blob: 2f68fe6b52a478f40ae06941b03751b3d2703792 [file] [log] [blame]
# Copyright 2020-2024 Open Networking Foundation (ONF) and the ONF Contributors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
*** Settings ***
Documentation Library for testing dmi interface (hw_management_service.proto)
Library Process
Library grpc_robot.Dmi WITH NAME dmi1
Library grpc_robot.Collections WITH NAME tools
Library kafka_robot.KafkaClient WITH NAME kafka
Library Collections
Library BuiltIn
Library ../../libraries/utility.py WITH NAME utility
Resource ../../libraries/dmi-basics.robot
Variables ../../variables/variables.py
Suite Setup Suite Setup
Suite Teardown Suite Teardown
*** Variables ***
${DEVICEMANAGER_IP} ${GIVEN_DM_IP}
${DEVICEMANAGER_PORT} ${GIVEN_DM_PORT}
${OLT_IP} ${GIVEN_OLT_IP}
${OLT_NAME} ${GIVEN_OLT_NAME}
${has_dataplane} True
*** Test Cases ***
Start and Stop Managing Device In Device Manager
[Documentation] add/remove device in device manager (testcase is done by Suite Setup and Suite Teardown)
[Tags] sanityDMI functionalDMI EnableOltDMI
# this tescase exist, to have the possiblity to check only the Start-/Stop-ManagingDevice
# can be run via adding parameter ("-t add and remove device in device manager") to the robot call!
No Operation
Get Inventory Data
[Documentation] get physical inventory data from OLT
[Tags] functionalDMI GetInventoryDataDMI
&{PhyInvReq}= Evaluate {'device_uuid':${suite_device_uuid}}
${inventory}= dmi1.Hw Management Service Get Physical Inventory ${PhyInvReq}
Check Dmi Status ${inventory}[0] OK_STATUS
FOR ${component} IN @{dm_components}
Log ${component}
Check Physical Inventory ${inventory} ${component}
END
Get Set Configurable Component Inventory Info
[Documentation] get physical component info of all hw in given yaml file
[Tags] functionalDMI GetSetConfigurableComponentInventoryInfoDMI
&{PhyInvReq}= Evaluate {'device_uuid':${suite_device_uuid}}
${inventory}= dmi1.Hw Management Service Get Physical Inventory ${PhyInvReq}
Check Dmi Status ${inventory}[0] OK_STATUS
FOR ${component} IN @{dm_components}
Log ${component}
${component_name}= Convert To String ${component['name']}
${component_uuid}= Get Component Uuid From Inventory ${inventory} ${component_name}
${hwComInfoReq}= Create Dictionary device_uuid=${suite_device_uuid} component_uuid=${component_uuid}
Set To Dictionary ${hwComInfoReq} component_name=${component_name}
${hwComInfoRes}= dmi1.Hw Management Service Get Hw Component Info ${hwComInfoReq}
${hwComInfoRes}= Get From List ${hwComInfoRes} 0
Check Dmi Status ${hwComInfoRes} OK_STATUS
${res_component}= Get From Dictionary ${hwComInfoRes} component
${value_name}= Get From Dictionary ${res_component} name
Should be Equal ${value_name} ${component_name}
# Try setting 'name' field
# (for BBSim the set api is not implemented)
# (for Physical Pod 'modifying component names is not supported')
${set_name_status}= Set Variable If ${has_dataplane} ERROR_STATUS UNIMPLEMENTED
Set Component Inventory Info
... ${suite_device_uuid} ${component_uuid} ${component_name} name new-value ${set_name_status}
# Try setting 'alias' (any, other than name) field (for BBSim the set api is not implemented)
${set_alias_status}= Set Variable If ${has_dataplane} OK_STATUS UNIMPLEMENTED
Set Component Inventory Info
... ${suite_device_uuid} ${component_uuid} ${component_name} alias ${component_name} ${set_alias_status}
# Reset alias field
Set Component Inventory Info
... ${suite_device_uuid} ${component_uuid} ${component_name} alias ${None} ${set_alias_status}
END
Get Loggable Entities
[Documentation] get the loggable entities of the device
[Tags] functionalDMI GetLoggableEntitiesDMI bbsimUnimplementedDMI
${loggable_entities}= Loggable Entities dmi1 ${suite_device_uuid}
${size_loggable_entities}= Get Length ${loggable_entities}
Should Be True ${size_loggable_entities} > 5
Set Get Logging Endpoint
[Documentation] set/get the loggable endpoint of a device
[Tags] functionalDMI SetGetLoggingEndpointDMI bbsimUnimplementedDMI
${defined_endpoint}= Set Variable 127.0.0.1
${defined_protocol}= Set Variable udp
Set Log Endpoint dmi1 ${suite_device_uuid} ${defined_endpoint} ${defined_protocol}
# now the new logging endpoint and protocol should be set!
${uuid}= Evaluate {'uuid':${suite_device_uuid}}
${log_endpoint}= dmi1.Hw Management Service Get Logging Endpoint ${uuid}
Check Dmi Status ${log_endpoint} OK_STATUS
${get_endpoint}= Get From Dictionary ${log_endpoint} logging_endpoint
${get_protocol}= Get From Dictionary ${log_endpoint} logging_protocol
Should Be Equal ${get_endpoint} ${defined_endpoint}
Should Be Equal ${get_protocol} ${defined_protocol}
# remove logging endpoint
${defined_endpoint}= Set Variable
${defined_protocol}= Set Variable
Set Log Endpoint dmi1 ${suite_device_uuid} ${defined_endpoint} ${defined_protocol}
Set Get LogLevel
[Documentation] set and get the log level of a device
[Tags] functionalDMI SetGetLogLevelDMI skipped bbsimUnimplementedDMI
${loggable_entities}= Get X Loggable Entities dmi1 ${suite_device_uuid} 2
${size}= GetLength ${loggable_entities}
Should Be True ${size} >= 2
# set new loglevel
Set Logging Level dmi1 ${suite_device_uuid} ${loggable_entities} ERROR
# get the loglevel
${log_list}= Create List
${entity}= Set Variable ${loggable_entities}[0][entities]
FOR ${log_entity} IN @{entity}
Append To List ${log_list} ${log_entity}
END
${entity}= Set Variable ${loggable_entities}[1][entities]
FOR ${log_entity} IN @{entity}
Append To List ${log_list} ${log_entity}
END
${loglvl_request}= Evaluate {'device_uuid':${suite_device_uuid}, 'entities':${log_list}}
${response}= dmi1.Hw Management Service Get Log Level ${loglvl_request}
Check Dmi Status ${response} OK_STATUS
FOR ${counter} IN RANGE 0 2
Should Be True '${response}[logLevels][${counter}][logLevel]' == 'ERROR'
END
# set loglevel back to default
Set Logging Level dmi1 ${suite_device_uuid} ${loggable_entities} WARN
*** Keywords ***
Suite Setup
[Documentation] start a managed device in the device manager
dmi1.Connection Open ${DEVICEMANAGER_IP} ${DEVICEMANAGER_PORT}
${suite_device_uuid}= Start Managing Device dmi1 ${OLT_IP} ${OLT_NAME}
${suite_device_name}= Evaluate {'name':'${OLT_NAME}'}
Set Suite Variable ${suite_device_uuid}
Set Suite Variable ${suite_device_name}
Suite Teardown
[Documentation] stop a managed device in device manager
Stop Managing Device dmi1 ${OLT_NAME}
dmi1.Connection Close
Search For Managed Devices And Stop Managing It dmi1
Check Physical Inventory
[Documentation] This keyword checks the passed inventory data
[Arguments] ${inventory} ${component}
FOR ${inventory_element} IN @{inventory}
log ${inventory_element}
Check Inventory Element ${inventory_element} ${component}
END
Check Inventory Element
[Documentation] This keyword checks the passed element data
[Arguments] ${inventory_element} ${component}
FOR ${component_element} IN @{component['elements']}
log ${component_element}
${result}= utility.check_Inventory_Element ${inventory_element} ${component['name']}
... ${component_element['element']} ${component_element['value']}
Should be True ${result}
END
Get Component Uuid From Inventory
[Documentation] This keyword delivers component-uuid from inventory of passed component-name
[Arguments] ${inventory} ${component_name}
FOR ${element} IN @{inventory}
Log ${element}
${component_uuid}= utility.get_uuid_from_Inventory_Element ${element} ${component_name}
END
Should Not Be Equal ${None} ${component_uuid} Could not find UUID for ${component_name}
[Return] ${component_uuid}
Loggable Entities
[Documentation] get the loggable entities of a device
[Arguments] ${lib_instance} ${uuid} ${with_check}=${TRUE}
${device_uuid}= Evaluate {'device_uuid':${uuid}}
${response}= Run Keyword ${lib_instance}.Hw Management Service Get Loggable Entities ${device_uuid}
${state}= Get From Dictionary ${response} status
Run Keyword If ${with_check} == ${True} Should Be Equal ${state} OK_STATUS
${response_uuid}= Get From Dictionary ${response} device_uuid
Run Keyword If ${with_check} == ${True} Should Be Equal ${uuid} ${response_uuid}
${is_loglevels_in}= Run Keyword And Return Status Dictionary Should Contain Key ${response} logLevels
${loggable_entities}= Run Keyword If ${is_loglevels_in}==${True} Get From Dictionary ${response} logLevels
... ELSE Create Dictionary
[Return] ${loggable_entities}
Get X Loggable Entities
[Documentation] get x (at least!) loggable entities and their loglevel of a device back to the user
[Arguments] ${lib_instance} ${uuid} ${number_entities}=5000 ${with_check}=${TRUE}
${loggable_entities}= Loggable Entities ${lib_instance} ${suite_device_uuid} ${with_check}
${entities2}= Create Dictionary
${entities}= Create List
${counter}= Set Variable ${1}
FOR ${entry} IN @{loggable_entities}
Append To List ${entities} ${entry}
Exit For Loop If ${number_entities}==${counter}
${counter}= Set Variable ${counter+1}
END
[Return] ${entities}
Set Component Inventory Info
[Documentation] This keyword sets a new value
[Arguments] ${uuid} ${component_uuid} ${component_name} ${component_field} ${new_value} ${status_code}
${modifiableComp}= Evaluate {'${component_field}':'${new_value}'}
${HWCompSetReq}= Create Dictionary device_uuid=${uuid} component_uuid=${component_uuid}
Set To Dictionary ${HWCompSetReq} component_name=${component_name} changes=${modifiableComp}
${state} ${response} Run Keyword And Ignore Error
... dmi1.Hw Management Service Set Hw Component Info ${HWCompSetReq}
Log ${response}
Run Keyword If '${state}'=='FAIL' Should Contain ${response} StatusCode.${status_code}
... ELSE Check Dmi Status ${response} ${status_code}
Set Logging Level
[Documentation] set the given loglevel in device
[Arguments] ${lib_instance} ${uuid} ${loggable_entities} ${log_level}
FOR ${counter} IN RANGE 0 2
${loggable_entity} Get From List ${loggable_entities} ${counter}
Set To Dictionary ${loggable_entity} logLevel ${log_level}
END
${loglvl_request}= Evaluate {'device_uuid':${uuid}, 'loglevels':${loggable_entities}}
${response}= Run Keyword ${lib_instance}.Hw Management Service Set Log Level ${loglvl_request}
Check Dmi Status ${response} OK_STATUS
Set Log Endpoint
[Documentation] set the given logging endpoint in device
[Arguments] ${lib_instance} ${uuid} ${defined_endpoint} ${defined_protocol}
${set_endpoint}= Create Dictionary device_uuid=${suite_device_uuid} logging_endpoint=${defined_endpoint}
Set To Dictionary ${set_endpoint} logging_protocol=${defined_protocol}
${response}= Run Keyword ${lib_instance}.Hw Management Service Set Logging Endpoint ${set_endpoint}
Check Dmi Status ${response} OK_STATUS