1*** Settings *** 2Documentation Verify Auto Restart policy for set of mission critical 3... services needed for functioning on BMC. 4 5Resource ../../lib/resource.robot 6Resource ../../lib/connection_client.robot 7Resource ../../lib/openbmc_ffdc.robot 8Resource ../../lib/utils.robot 9Library ../../data/platform_variables.py 10 11Suite Setup Open Connection And Log In 12Suite Teardown Close All Connections 13Test Teardown FFDC On Test Case Fail 14 15*** Variables *** 16${LOG_SERVICE} xyz.openbmc_project.Logging.service 17 18*** Test Cases *** 19 20Verify OpenBMC Services Auto Restart Policy 21 [Documentation] Kill active services and expect auto restart. 22 [Tags] Verify_OpenBMC_Services_Auto_Restart_Policy 23 # The services listed below restart policy should be "always" 24 # Command output: 25 # systemctl -p Restart show xyz.openbmc_project.Logging.service | cat 26 # Restart=always 27 @{services}= 28 ... Create List xyz.openbmc_project.Logging.service 29 ... xyz.openbmc_project.ObjectMapper.service 30 ... xyz.openbmc_project.State.BMC.service 31 ... xyz.openbmc_project.State.Chassis@0.service 32 ... xyz.openbmc_project.State.Host@0.service 33 FOR ${SERVICE} IN @{services} 34 Check Service Autorestart ${SERVICE} 35 END 36 37 38Kill Services And Expect Service Restart 39 [Documentation] Kill the service and it must restart. 40 [Tags] Kill_Services_And_Expect_Service_Restart 41 42 # Get the MainPID and service state. 43 ${MainPID}= Get Service Attribute MainPID ${LOG_SERVICE} 44 Should Not Be Equal ${0} ${MainPID} 45 ... msg=Logging service not restarted. 46 47 ${ActiveState}= Get Service Attribute ActiveState ${LOG_SERVICE} 48 Should Be Equal active ${ActiveState} 49 ... msg=Logging Service not in active state. 50 51 BMC Execute Command kill -9 ${MainPID} 52 Sleep 10s reason=Wait for service to restart. 53 54 ${MainPID}= Get Service Attribute MainPID ${LOG_SERVICE} 55 Should Not Be Equal ${0} ${MainPID} 56 ... msg=Logging service not restarted. 57 58 ${ActiveState}= Get Service Attribute ActiveState ${LOG_SERVICE} 59 Should Be Equal active ${ActiveState} 60 ... msg=Logging service not in active state. 61 62Kill The List Of Services And Expect Killed Service Gets Restarted 63 [Documentation] Kill the given services and expect again services get restarted automatically. 64 [Tags] Kill_The_List_Of_Services_And_Expect_Killed_Service_Gets_Restarted 65 66 # Create a list of services in respective server model python file 67 # like romulus.py, witherspoon.py on openbmc-test-automation/data directory etc. 68 # Example of creating a list of services in their respective server model python file 69 # SERVICES = { 70 # "BMC_SERVICES": ['xyz.openbmc_project.Logging.service', 'xyz.openbmc_project.ObjectMapper.service', 71 # 'xyz.openbmc_project.State.BMC.service', 'xyz.openbmc_project.State.Chassis.service', 72 # 'xyz.openbmc_project.State.Host.service'] 73 74 @{auto_restart_policy_always_services}= Create List 75 @{incorrect_auto_restart_policy_services}= Create List 76 @{service_not_started}= Create List 77 78 # Creating an list of services which needs to be validated. 79 80 ${services}= Get Service Restart Policy Services ${OPENBMC_MODEL} 81 ${service_list}= Get From Dictionary ${services} BMC_SERVICES 82 ${length_services}= Get Length ${service_list} 83 84 # From service list it will check service auto-restart policy 85 # If incorrect those services will be appended to incorrect_auto_restart_policy_services list 86 # Proper restart policy services will be appended to auto_restart_policy_always_services list. 87 88 FOR ${service} IN @{service_list} 89 ${service_status}= Run Keyword And Return Status Check Service Autorestart ${service} 90 Run Keyword If ${service_status} == False 91 ... Append To List ${incorrect_auto_restart_policy_services} ${service} 92 ... ELSE 93 ... Append To List ${auto_restart_policy_always_services} ${service} 94 END 95 96 ${length_incorrect_autorestart_policy}= Get Length ${incorrect_auto_restart_policy_services} 97 Run Keyword If ${length_incorrect_autorestart_policy} != 0 and ${length_incorrect_autorestart_policy} == ${length_services} 98 ... Run Keywords Log ${incorrect_auto_restart_policy_services} AND 99 ... Fail msg=All the given services have incorrect auto-restart policy. 100 ... ELSE IF ${length_incorrect_autorestart_policy} != 0 and ${length_incorrect_autorestart_policy} != ${length_services} 101 ... Run Keywords Log ${incorrect_auto_restart_policy_services} AND 102 ... Run Keyword And Continue On Failure Fail msg=Listed services are having incorrect auto-restart policy. 103 104 # This will get process id and check the service active state before killing the services. 105 # If service process id was 0 or service was not in active state then those services will get 106 # appended to service_not_started list. 107 # Only services with process ID and in active state get killed and checked whether 108 # they automatically restart and put into active state. 109 110 FOR ${service} IN @{auto_restart_policy_always_services} 111 ${Old_MainPID}= Get Service Attribute MainPID ${service} 112 ${ActiveState}= Get Service Attribute ActiveState ${service} 113 ${main_pid_status}= Run Keyword And Return Status Should Not Be Equal ${0} ${Old_MainPID} 114 ${active_state_status}= Run Keyword And Return Status Should Be Equal active ${ActiveState} 115 Run Keyword If ${main_pid_status} == False or ${active_state_status} == False 116 ... Run Keywords Append To List ${service_not_started} ${service} AND Continue For Loop 117 118 BMC Execute Command kill -9 ${Old_MainPID} 119 Sleep 10s reason=Wait for service to restart. 120 121 ${New_MainPID}= Get Service Attribute MainPID ${service} 122 Run Keyword And Continue On Failure Should Not Be Equal ${0} ${New_MainPID} 123 ... msg=${service} service not restarted. 124 Run Keyword And Continue On Failure Should Not Be Equal ${Old_MainPID} ${New_MainPID} 125 ... msg=Old process ID is mapped to ${service} service after service restart.. 126 127 ${ActiveState}= Get Service Attribute ActiveState ${service} 128 Run Keyword And Continue On Failure Should Be Equal active ${ActiveState} 129 ... msg=${service} service not in active state. 130 END 131 132 ${length_service_not_started}= Get Length ${service_not_started} 133 ${incorrect_services}= Evaluate ${length_incorrect_autorestart_policy} + ${length_service_not_started} 134 135 Run Keyword If ${incorrect_services} == ${length_services} and ${length_service_not_started} != 0 136 ... Run Keywords Log ${service_not_started} AND Fail msg=All the services were either not started or not in active state by default. 137 ... ELSE IF ${incorrect_services} != ${length_services} and ${length_service_not_started} != 0 138 ... Run Keywords Log ${service_not_started} AND Fail msg=Few listed services were either not started or not in active state by default. 139 140*** Keywords *** 141 142Check Service Autorestart 143 [Documentation] Check if given policy is "always". 144 [Arguments] ${servicename} 145 # servicename Qualified service name 146 ${restart_policy}= Get Service Attribute Restart ${servicename} 147 Should Be Equal always ${restart_policy} 148 ... msg=Incorrect policy for ${servicename} 149