class OpTestFWTS(): ## Initialize this object # @param i_bmcIP The IP address of the BMC # @param i_bmcUser The userid to log into the BMC with # @param i_bmcPasswd The password of the userid to log into the BMC with # @param i_bmcUserIpmi The userid to issue the BMC IPMI commands with # @param i_bmcPasswdIpmi The password of BMC IPMI userid # @param i_ffdcDir Optional param to indicate where to write FFDC # # "Only required for inband tests" else Default = None # @param i_hostIP The IP address of the HOST # @param i_hostuser The userid to log into the HOST # @param i_hostPasswd The password of the userid to log into the HOST with # def __init__(self, i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir=None, i_hostip=None, i_hostuser=None, i_hostPasswd=None): self.cv_BMC = OpTestBMC(i_bmcIP, i_bmcUser, i_bmcPasswd, i_ffdcDir) self.cv_IPMI = OpTestIPMI(i_bmcIP, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostip, i_hostuser, i_hostPasswd) self.cv_HOST = OpTestHost(i_hostip, i_hostuser, i_hostPasswd, i_bmcIP, i_ffdcDir) self.cv_SYSTEM = OpTestSystem(i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostip, i_hostuser, i_hostPasswd) self.util = OpTestUtil() self.user = i_hostuser self.ip = i_hostip self.passwd = i_hostPasswd ## # @brief This function just brings the system to host OS. # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def test_system_reboot(self): print "Testing FWTS: Booting system to OS" print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == BMC_CONST.FW_SUCCESS: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) self.cv_IPMI.clear_ssh_keys(self.cv_HOST.ip) print "Gathering the OPAL msg logs" self.cv_HOST.host_gather_opal_msg_log() return BMC_CONST.FW_SUCCESS ## # @brief This function just executes the fwts_execution.sh on host OS # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def test_fwts(self): l_oslevel = self.cv_HOST.host_get_OS_Level() if not "Ubuntu" in l_oslevel: return # Copy the fwts execution file to the tmp folder in the host base_path = (os.path.dirname(os.path.abspath(__file__))).split('testcases')[0] fwts_script = base_path + "/testcases/fwts_execution.sh" try: self.util.copyFilesToDest(fwts_script, self.user, self.ip, "/tmp/", self.passwd) except: l_msg = "Copying fwts file to host failed" print l_msg raise OpTestError(l_msg) l_res = self.cv_HOST.host_run_command("/tmp/fwts_execution.sh") print l_res
class OpTestIPMIReprovision(): ## Initialize this object # @param i_bmcIP The IP address of the BMC # @param i_bmcUser The userid to log into the BMC with # @param i_bmcPasswd The password of the userid to log into the BMC with # @param i_bmcUserIpmi The userid to issue the BMC IPMI commands with # @param i_bmcPasswdIpmi The password of BMC IPMI userid # @param i_ffdcDir Optional param to indicate where to write FFDC # # "Only required for inband tests" else Default = None # @param i_hostIP The IP address of the HOST # @param i_hostUser The userid to log into the HOST # @param i_hostPasswd The password of the userid to log into the HOST with # def __init__(self, i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir=None, i_hostIP=None, i_hostUser=None, i_hostPasswd=None): self.cv_BMC = OpTestBMC(i_bmcIP, i_bmcUser, i_bmcPasswd, i_ffdcDir) self.cv_IPMI = OpTestIPMI(i_bmcIP, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostIP, i_hostUser, i_hostPasswd) self.cv_HOST = OpTestHost(i_hostIP, i_hostUser, i_hostPasswd,i_bmcIP, i_ffdcDir) self.cv_SYSTEM = OpTestSystem(i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostIP, i_hostUser, i_hostPasswd) self.util = OpTestUtil() self.opTestHMIHandling = OpTestHMIHandling(i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostIP, i_hostUser, i_hostPasswd) ## # @brief This function will cover following test steps # Testcase: NVRAM Partition-IPMI Reprovision # 1. Update NVRAM config data with test config data # i.e "nvram --update-config test-name=test-value" # 2. Issue an IPMI PNOR Reprovision request command, to reset NVRAM partition to default. # 3. Wait for PNOR Reprovision progress to complete(00). # 4. Do a Hard reboot(Power OFF/ON) to avoid nvram cache data. # 5. Once system booted, check for NVRAM parition whether the test config data # got erased or not. # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def test_nvram_ipmi_reprovision(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() self.cv_HOST.host_run_command("uname -a") self.cv_HOST.host_run_command(BMC_CONST.NVRAM_PRINT_CFG) print "IPMI_Reprovision: Updating the nvram partition with test cfg data" self.cv_HOST.host_run_command(BMC_CONST.NVRAM_UPDATE_CONFIG_TEST_DATA) self.cv_HOST.host_run_command(BMC_CONST.NVRAM_PRINT_CFG) print "IPMI_Reprovision: issuing ipmi pnor reprovision request" self.cv_SYSTEM.sys_issue_ipmi_pnor_reprovision_request() print "IPMI_Reprovision: wait for reprovision to complete" self.cv_SYSTEM.sys_wait_for_ipmi_pnor_reprovision_to_complete() print "IPMI_Reprovision: gathering the opal message logs" self.cv_HOST.host_gather_opal_msg_log() print "IPMI_Reprovision: Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == BMC_CONST.FW_SUCCESS: print "IPMI_Reprovision: System is in standby/Soft-off state" else: l_msg = "IPMI_Reprovision: System failed to reach standby/Soft-off state after pnor reprovisioning" raise OpTestError(l_msg) print "IPMI_Reprovision: Performing a IPMI Power ON Operation" # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) l_res = self.cv_HOST.host_run_command(BMC_CONST.NVRAM_PRINT_CFG) if l_res.__contains__(BMC_CONST.NVRAM_TEST_DATA): l_msg = "NVRAM Partition - IPMI Reprovision not happening, nvram test config data still exists" raise OpTestError(l_msg) print "NVRAM Partition - IPMI Reprovision is done, cleared the nvram test config data" self.cv_HOST.host_gather_opal_msg_log() return BMC_CONST.FW_SUCCESS ## # @brief This function will cover following test steps # Testcase: GARD Partition-IPMI Reprovision # 1. Inject core checkstop using existed function from OpTestHMIHandling.py # 2. Do a Hard reboot(IPMI Power OFF/ON) # 2. Issue an IPMI PNOR Reprovision request command, to reset GUARD partition to default. # 3. Wait for IPMI PNOR Reprovision progress to complete(00). # 4. Check for GUARD parition whether the existing gard records erased or not. # 6. Reboot the system back to see system is booting fine or not. # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def test_gard_ipmi_reprovision(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "IPMI_Reprovision: Injecting system core checkstop to guard the phyisical cpu" self.opTestHMIHandling.testHMIHandling(BMC_CONST.HMI_MALFUNCTION_ALERT) print "IPMI_Reprovision: Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == BMC_CONST.FW_SUCCESS: print "IPMI_Reprovision: System is in standby/Soft-off state" else: l_msg = "IPMI_Reprovision: System failed to reach standby/Soft-off state" raise OpTestError(l_msg) print "IPMI_Reprovision: Performing a IPMI Power ON Operation" # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) print "IPMI_Reprovision: issuing ipmi pnor reprovision request" self.cv_SYSTEM.sys_issue_ipmi_pnor_reprovision_request() print "IPMI_Reprovision: wait for reprovision to complete" self.cv_SYSTEM.sys_wait_for_ipmi_pnor_reprovision_to_complete() print "IPMI_Reprovision: gathering the opal message logs" self.cv_HOST.host_gather_opal_msg_log() self.cv_HOST.host_get_OS_Level() self.cv_HOST.host_clone_skiboot_source(BMC_CONST.CLONE_SKIBOOT_DIR) # Compile the necessary tools xscom-utils and gard utility self.cv_HOST.host_compile_gard_utility(BMC_CONST.CLONE_SKIBOOT_DIR) l_con = self.cv_SYSTEM.sys_get_ipmi_console() self.cv_IPMI.ipmi_host_login(l_con) self.cv_IPMI.ipmi_host_set_unique_prompt(l_con) self.cv_IPMI.run_host_cmd_on_ipmi_console("uname -a") l_res = self.cv_SYSTEM.sys_list_gard_records(BMC_CONST.GARD_TOOL_DIR) print l_res if BMC_CONST.NO_GARD_RECORDS in l_res: print "GUARD Partition - IPMI Reprovision is done, cleared HW gard records" else: l_msg = "IPMI: Reprovision not happening, gard records are not erased" raise OpTestError(l_msg) print "IPMI_Reprovision: Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == BMC_CONST.FW_SUCCESS: print "IPMI_Reprovision: System is in standby/Soft-off state" else: l_msg = "IPMI_Reprovision: System failed to reach standby/Soft-off state" raise OpTestError(l_msg) print "IPMI_Reprovision: Performing a IPMI Power ON Operation" # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) print "IPMI_Reprovision: gathering the opal message logs" self.cv_HOST.host_gather_opal_msg_log() return BMC_CONST.FW_SUCCESS
class OpTestEnergyScale(): ## Initialize this object # @param i_bmcIP The IP address of the BMC # @param i_bmcUser The userid to log into the BMC with # @param i_bmcPasswd The password of the userid to log into the BMC with # @param i_bmcUserIpmi The userid to issue the BMC IPMI commands with # @param i_bmcPasswdIpmi The password of BMC IPMI userid # @param i_ffdcDir Optional param to indicate where to write FFDC # # "Only required for inband tests" else Default = None # @param i_hostIP The IP address of the HOST # @param i_hostuser The userid to log into the HOST # @param i_hostPasswd The password of the userid to log into the HOST with # def __init__(self, i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir=None, i_platName=None, i_hostip=None, i_hostuser=None, i_hostPasswd=None): self.cv_BMC = OpTestBMC(i_bmcIP, i_bmcUser, i_bmcPasswd, i_ffdcDir) self.cv_IPMI = OpTestIPMI(i_bmcIP, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostip, i_hostuser, i_hostPasswd) self.cv_HOST = OpTestHost(i_hostip, i_hostuser, i_hostPasswd, i_bmcIP) self.cv_SYSTEM = OpTestSystem(i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostip, i_hostuser, i_hostPasswd) self.cv_PLATFORM = i_platName self.util = OpTestUtil() ## # @brief This function will get and return platform power limits for supported machine # # @param i_platform type: str platform name to get the power limits # # @return l_power_limit_low lower platform power limit # l_power_limit_high higher platform power limit # or raise OpTestError if it is a new platform # def get_platform_power_limits(self, i_platform): l_platform = i_platform if BMC_CONST.HABANERO in l_platform: l_power_limit_high = BMC_CONST.HABANERO_POWER_LIMIT_HIGH l_power_limit_low = BMC_CONST.HABANERO_POWER_LIMIT_LOW elif BMC_CONST.FIRESTONE in l_platform: l_power_limit_high = BMC_CONST.FIRESTONE_POWER_LIMIT_HIGH l_power_limit_low = BMC_CONST.FIRESTONE_POWER_LIMIT_LOW elif BMC_CONST.GARRISON in l_platform: l_power_limit_high = BMC_CONST.GARRISON_POWER_LIMIT_HIGH l_power_limit_low = BMC_CONST.GARRISON_POWER_LIMIT_LOW else: l_msg = "New platform, add power limit support to this platform and retry" raise OpTestError(l_msg) return l_power_limit_low, l_power_limit_high ## # @brief This function will test Energy scale features at standby state # 1. Power OFF the system. # 2. Validate below Energy scale features at standby state # ipmitool dcmi power get_limit :Get the configured power limits. # ipmitool dcmi power set_limit limit <value> :Power Limit Requested in Watts. # ipmitool dcmi power activate :Activate the set power limit. # ipmitool dcmi power deactivate :Deactivate the set power limit. # 3. Once platform power limit activated execute below dcmi commands at standby state. # ipmitool dcmi discover :This command is used to discover # supported capabilities in DCMI. # ipmitool dcmi power reading :Get power related readings from the system. # ipmitool dcmi power get_limit :Get the configured power limits. # ipmitool dcmi power sensors :Prints the available DCMI sensors. # ipmitool dcmi get_temp_reading :Get Temperature Sensor Readings. # 4. Power ON the system. # 5. Check after system booted to runtime, whether occ's are active or not. # 6. Again in runtime execute all dcmi commands to check the functionality. # # @return BMC_CONST.FW_SUCCESS or BMC_CONST.FW_FAILED # def test_energy_scale_at_standby_state(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "Energy Scale Test 1: Get, Set, activate and deactivate platform power limit at power off" l_power_limit_low, l_power_limit_high = self.get_platform_power_limits(self.cv_PLATFORM) print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) self.cv_IPMI.ipmi_sdr_clear() print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_set_power_limit(l_power_limit_high) self.cv_IPMI.ipmi_activate_power_limit() self.cv_IPMI.ipmi_deactivate_power_limit() print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_activate_power_limit() print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_deactivate_power_limit() self.cv_IPMI.ipmi_set_power_limit(l_power_limit_low) self.cv_IPMI.ipmi_activate_power_limit() print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_set_power_limit(l_power_limit_high) self.cv_IPMI.ipmi_get_power_limit() print "Get All dcmi readings at power off" self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_DISCOVER) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_GET_LIMIT) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_SENSORS) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_MC_ID_STRING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_TEMP_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_CONF_PARAM) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_OOB_DISCOVER) print "Performing a IPMI Power ON Operation" # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) l_status = self.cv_IPMI.ipmi_get_occ_status() print l_status if BMC_CONST.OCC_DEVICE_ENABLED in l_status: print "OCC's are up and active" else: l_msg = "OCC's are not in active state" raise OpTestError(l_msg) print self.cv_IPMI.ipmi_get_power_limit() print "Get All dcmi readings at runtime" self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_DISCOVER) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_GET_LIMIT) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_SENSORS) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_MC_ID_STRING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_TEMP_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_CONF_PARAM) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_OOB_DISCOVER) ## # @brief This function will test Energy scale features at standby state # 1. Power OFF the system. # 2. Power On the system to boot to host OS # 2. Validate below Energy scale features at runtime state # ipmitool dcmi power get_limit :Get the configured power limits. # ipmitool dcmi power set_limit limit <value> :Power Limit Requested in Watts. # ipmitool dcmi power activate :Activate the set power limit. # ipmitool dcmi power deactivate :Deactivate the set power limit. # 3. Once platform power limit activated execute below dcmi commands at runtime state. # ipmitool dcmi discover :This command is used to discover # supported capabilities in DCMI. # ipmitool dcmi power reading :Get power related readings from the system. # ipmitool dcmi power get_limit :Get the configured power limits. # ipmitool dcmi power sensors :Prints the available DCMI sensors. # ipmitool dcmi get_temp_reading :Get Temperature Sensor Readings. # 4. Issue Power OFF/ON to check whether system boots after setting platform power limit at runtime. # 5. Again in runtime execute all dcmi commands to check the functionality. # # @return BMC_CONST.FW_SUCCESS or BMC_CONST.FW_FAILED # def test_energy_scale_at_runtime_state(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "Energy Scale Test 2: Get, Set, activate and deactivate platform power limit at runtime" l_power_limit_low, l_power_limit_high = self.get_platform_power_limits(self.cv_PLATFORM) print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) print "Get All dcmi readings at power off" self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_DISCOVER) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_GET_LIMIT) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_SENSORS) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_MC_ID_STRING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_TEMP_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_CONF_PARAM) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_OOB_DISCOVER) self.cv_IPMI.ipmi_sdr_clear() print self.cv_IPMI.ipmi_get_power_limit() print "Performing a IPMI Power ON Operation" # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) l_status = self.cv_IPMI.ipmi_get_occ_status() print l_status if BMC_CONST.OCC_DEVICE_ENABLED in l_status: print "OCC's are up and active" else: l_msg = "OCC's are not in active state" raise OpTestError(l_msg) print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_set_power_limit(l_power_limit_high) self.cv_IPMI.ipmi_activate_power_limit() print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_deactivate_power_limit() print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_activate_power_limit() print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_set_power_limit(l_power_limit_low) self.cv_IPMI.ipmi_activate_power_limit() print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_deactivate_power_limit() print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_activate_power_limit() print self.cv_IPMI.ipmi_get_power_limit() print "Get All dcmi readings at runtime" self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_DISCOVER) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_GET_LIMIT) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_SENSORS) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_MC_ID_STRING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_TEMP_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_CONF_PARAM) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_OOB_DISCOVER) print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) print "Performing a IPMI Power ON Operation" # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) l_status = self.cv_IPMI.ipmi_get_occ_status() print l_status if BMC_CONST.OCC_DEVICE_ENABLED in l_status: print "OCC's are up and active" else: l_msg = "OCC's are not in active state" raise OpTestError(l_msg) print "Get All dcmi readings at runtime" self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_DISCOVER) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_GET_LIMIT) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_SENSORS) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_MC_ID_STRING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_TEMP_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_CONF_PARAM) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_OOB_DISCOVER) ## # @brief This function will test below dcmi commands at both standby and runtime states # ipmitool dcmi discover :This command is used to discover # supported capabilities in DCMI. # ipmitool dcmi power reading :Get power related readings from the system. # ipmitool dcmi power get_limit :Get the configured power limits. # ipmitool dcmi power sensors :Prints the available DCMI sensors. # ipmitool dcmi get_temp_reading :Get Temperature Sensor Readings. # ipmitool dcmi get_mc_id_string :Get management controller identifier string. # ipmitool dcmi get_conf_param :Get DCMI Configuration Parameters. # ipmitool dcmi oob_discover :Ping/Pong Message for DCMI Discovery. # # @return BMC_CONST.FW_SUCCESS or BMC_CONST.FW_FAILED # def test_dcmi_at_standby_and_runtime_states(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "Energy scale Test 3: Get Sensors, Temperature and Power reading's at power off and runtime" print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) print "Get All dcmi readings at power off" self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_DISCOVER) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_GET_LIMIT) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_SENSORS) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_MC_ID_STRING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_TEMP_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_CONF_PARAM) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_OOB_DISCOVER) print "Performing a IPMI Power ON Operation" # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) l_status = self.cv_IPMI.ipmi_get_occ_status() print l_status if BMC_CONST.OCC_DEVICE_ENABLED in l_status: print "OCC's are up and active" else: l_msg = "OCC's are not in active state" raise OpTestError(l_msg) print "Get All dcmi readings at runtime" self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_DISCOVER) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_GET_LIMIT) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_SENSORS) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_MC_ID_STRING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_TEMP_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_CONF_PARAM) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_OOB_DISCOVER) ## # @brief It will execute and test the return code of ipmi command. # # @param i_cmd @type string:The ipmitool command, for example: chassis power on; echo $? # # @return l_res @type list: output of command or raise OpTestError # def run_ipmi_cmd(self, i_cmd): l_cmd = i_cmd l_res = self.cv_IPMI.ipmitool_execute_command(l_cmd) print l_res l_res = l_res.splitlines() if int(l_res[-1]): l_msg = "IPMI: command failed %c" % l_cmd raise OpTestError(l_msg) return l_res
class OpTestIPMIPowerControl(): ## Initialize this object # @param i_bmcIP The IP address of the BMC # @param i_bmcUser The userid to log into the BMC with # @param i_bmcPasswd The password of the userid to log into the BMC with # @param i_bmcUserIpmi The userid to issue the BMC IPMI commands with # @param i_bmcPasswdIpmi The password of BMC IPMI userid # @param i_ffdcDir Optional param to indicate where to write FFDC # # "Only required for inband tests" else Default = None # @param i_hostIP The IP address of the HOST # @param i_hostuser The userid to log into the HOST # @param i_hostPasswd The password of the userid to log into the HOST with # def __init__(self, i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir=None, i_hostip=None, i_hostuser=None, i_hostPasswd=None): self.cv_BMC = OpTestBMC(i_bmcIP, i_bmcUser, i_bmcPasswd, i_ffdcDir) self.cv_IPMI = OpTestIPMI(i_bmcIP, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostip, i_hostuser, i_hostPasswd) self.cv_HOST = OpTestHost(i_hostip, i_hostuser, i_hostPasswd, i_bmcIP) self.cv_SYSTEM = OpTestSystem(i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostip, i_hostuser, i_hostPasswd) self.util = OpTestUtil() ## # @brief This function will test below system power control operations # IPMI Power ON # Power OFF # Power Soft # Power Cycle # Power Reset # So each operation is executed through ipmi commands. and # check_system_status function will check whether FW and Host OS # Boot completed or not. # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def testIPMIPowerControl(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) print "Performing a IPMI Power ON Operation" # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() self.check_system_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) print "Performing a IPMI Soft Power OFF Operation" # Perform a IPMI Soft Power OFF Operation(Graceful shutdown) self.cv_IPMI.ipmi_power_soft() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) print "Perform a IPMI Power ON Operation" # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() self.check_system_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) print "Performing a IPMI Power Cycle(Soft reboot) Operation " # Perform a IPMI Power Cycle(Soft reboot) Operation only when system is in ON state self.cv_IPMI.ipmi_power_cycle() self.check_system_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) print "Performing a IPMI Power Hard Reset Operation" # Perform a IPMI Power Hard Reset Operation self.cv_IPMI.ipmi_power_reset() self.check_system_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) return BMC_CONST.FW_SUCCESS ## # @brief This function will check for system status and wait for # FW and Host OS Boot progress to complete. # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def check_system_status(self): if int(self.cv_SYSTEM.sys_ipl_wait_for_working_state()) == 0: print "System booted to working state" else: l_msg = "System failed to boot" raise OpTestError(l_msg) if int(self.cv_SYSTEM.sys_wait_for_os_boot_complete()) == 0: print "System booted to Host OS" else: l_msg = "System failed to boot Host OS" raise OpTestError(l_msg) return BMC_CONST.FW_SUCCESS
class OpTestEnergyScale(): ## Initialize this object # @param i_bmcIP The IP address of the BMC # @param i_bmcUser The userid to log into the BMC with # @param i_bmcPasswd The password of the userid to log into the BMC with # @param i_bmcUserIpmi The userid to issue the BMC IPMI commands with # @param i_bmcPasswdIpmi The password of BMC IPMI userid # @param i_ffdcDir Optional param to indicate where to write FFDC # # "Only required for inband tests" else Default = None # @param i_hostIP The IP address of the HOST # @param i_hostuser The userid to log into the HOST # @param i_hostPasswd The password of the userid to log into the HOST with # def __init__(self, i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir=None, i_platName=None, i_hostip=None, i_hostuser=None, i_hostPasswd=None): self.cv_BMC = OpTestBMC(i_bmcIP, i_bmcUser, i_bmcPasswd, i_ffdcDir) self.cv_IPMI = OpTestIPMI(i_bmcIP, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostip, i_hostuser, i_hostPasswd) self.cv_HOST = OpTestHost(i_hostip, i_hostuser, i_hostPasswd, i_bmcIP) self.cv_SYSTEM = OpTestSystem(i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostip, i_hostuser, i_hostPasswd) self.cv_PLATFORM = i_platName self.util = OpTestUtil() ## # @brief This function will get and return platform power limits for supported machine # # @param i_platform type: str platform name to get the power limits # # @return l_power_limit_low lower platform power limit # l_power_limit_high higher platform power limit # or raise OpTestError if it is a new platform # def get_platform_power_limits(self, i_platform): l_platform = i_platform if BMC_CONST.HABANERO in l_platform: l_power_limit_high = BMC_CONST.HABANERO_POWER_LIMIT_HIGH l_power_limit_low = BMC_CONST.HABANERO_POWER_LIMIT_LOW elif BMC_CONST.FIRESTONE in l_platform: l_power_limit_high = BMC_CONST.FIRESTONE_POWER_LIMIT_HIGH l_power_limit_low = BMC_CONST.FIRESTONE_POWER_LIMIT_LOW elif BMC_CONST.GARRISON in l_platform: l_power_limit_high = BMC_CONST.GARRISON_POWER_LIMIT_HIGH l_power_limit_low = BMC_CONST.GARRISON_POWER_LIMIT_LOW else: l_msg = "New platform, add power limit support to this platform and retry" raise OpTestError(l_msg) return l_power_limit_low, l_power_limit_high ## # @brief This function will test Energy scale features at standby state # 1. Power OFF the system. # 2. Validate below Energy scale features at standby state # ipmitool dcmi power get_limit :Get the configured power limits. # ipmitool dcmi power set_limit limit <value> :Power Limit Requested in Watts. # ipmitool dcmi power activate :Activate the set power limit. # ipmitool dcmi power deactivate :Deactivate the set power limit. # 3. Once platform power limit activated execute below dcmi commands at standby state. # ipmitool dcmi discover :This command is used to discover # supported capabilities in DCMI. # ipmitool dcmi power reading :Get power related readings from the system. # ipmitool dcmi power get_limit :Get the configured power limits. # ipmitool dcmi power sensors :Prints the available DCMI sensors. # ipmitool dcmi get_temp_reading :Get Temperature Sensor Readings. # 4. Power ON the system. # 5. Check after system booted to runtime, whether occ's are active or not. # 6. Again in runtime execute all dcmi commands to check the functionality. # # @return BMC_CONST.FW_SUCCESS or BMC_CONST.FW_FAILED # def test_energy_scale_at_standby_state(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "Energy Scale Test 1: Get, Set, activate and deactivate platform power limit at power off" l_power_limit_low, l_power_limit_high = self.get_platform_power_limits( self.cv_PLATFORM) print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int( self.cv_SYSTEM.sys_wait_for_standby_state( BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) self.cv_IPMI.ipmi_sdr_clear() print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_set_power_limit(l_power_limit_high) self.cv_IPMI.ipmi_activate_power_limit() self.cv_IPMI.ipmi_deactivate_power_limit() print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_activate_power_limit() print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_deactivate_power_limit() self.cv_IPMI.ipmi_set_power_limit(l_power_limit_low) self.cv_IPMI.ipmi_activate_power_limit() print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_set_power_limit(l_power_limit_high) self.cv_IPMI.ipmi_get_power_limit() print "Get All dcmi readings at power off" self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_DISCOVER) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_GET_LIMIT) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_SENSORS) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_MC_ID_STRING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_TEMP_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_CONF_PARAM) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_OOB_DISCOVER) print "Performing a IPMI Power ON Operation" # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) l_status = self.cv_IPMI.ipmi_get_occ_status() print l_status if BMC_CONST.OCC_DEVICE_ENABLED in l_status: print "OCC's are up and active" else: l_msg = "OCC's are not in active state" raise OpTestError(l_msg) print self.cv_IPMI.ipmi_get_power_limit() print "Get All dcmi readings at runtime" self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_DISCOVER) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_GET_LIMIT) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_SENSORS) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_MC_ID_STRING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_TEMP_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_CONF_PARAM) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_OOB_DISCOVER) ## # @brief This function will test Energy scale features at standby state # 1. Power OFF the system. # 2. Power On the system to boot to host OS # 2. Validate below Energy scale features at runtime state # ipmitool dcmi power get_limit :Get the configured power limits. # ipmitool dcmi power set_limit limit <value> :Power Limit Requested in Watts. # ipmitool dcmi power activate :Activate the set power limit. # ipmitool dcmi power deactivate :Deactivate the set power limit. # 3. Once platform power limit activated execute below dcmi commands at runtime state. # ipmitool dcmi discover :This command is used to discover # supported capabilities in DCMI. # ipmitool dcmi power reading :Get power related readings from the system. # ipmitool dcmi power get_limit :Get the configured power limits. # ipmitool dcmi power sensors :Prints the available DCMI sensors. # ipmitool dcmi get_temp_reading :Get Temperature Sensor Readings. # 4. Issue Power OFF/ON to check whether system boots after setting platform power limit at runtime. # 5. Again in runtime execute all dcmi commands to check the functionality. # # @return BMC_CONST.FW_SUCCESS or BMC_CONST.FW_FAILED # def test_energy_scale_at_runtime_state(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "Energy Scale Test 2: Get, Set, activate and deactivate platform power limit at runtime" l_power_limit_low, l_power_limit_high = self.get_platform_power_limits( self.cv_PLATFORM) print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int( self.cv_SYSTEM.sys_wait_for_standby_state( BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) print "Get All dcmi readings at power off" self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_DISCOVER) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_GET_LIMIT) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_SENSORS) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_MC_ID_STRING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_TEMP_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_CONF_PARAM) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_OOB_DISCOVER) self.cv_IPMI.ipmi_sdr_clear() print self.cv_IPMI.ipmi_get_power_limit() print "Performing a IPMI Power ON Operation" # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) l_status = self.cv_IPMI.ipmi_get_occ_status() print l_status if BMC_CONST.OCC_DEVICE_ENABLED in l_status: print "OCC's are up and active" else: l_msg = "OCC's are not in active state" raise OpTestError(l_msg) print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_set_power_limit(l_power_limit_high) self.cv_IPMI.ipmi_activate_power_limit() print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_deactivate_power_limit() print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_activate_power_limit() print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_set_power_limit(l_power_limit_low) self.cv_IPMI.ipmi_activate_power_limit() print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_deactivate_power_limit() print self.cv_IPMI.ipmi_get_power_limit() self.cv_IPMI.ipmi_activate_power_limit() print self.cv_IPMI.ipmi_get_power_limit() print "Get All dcmi readings at runtime" self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_DISCOVER) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_GET_LIMIT) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_SENSORS) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_MC_ID_STRING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_TEMP_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_CONF_PARAM) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_OOB_DISCOVER) print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int( self.cv_SYSTEM.sys_wait_for_standby_state( BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) print "Performing a IPMI Power ON Operation" # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) l_status = self.cv_IPMI.ipmi_get_occ_status() print l_status if BMC_CONST.OCC_DEVICE_ENABLED in l_status: print "OCC's are up and active" else: l_msg = "OCC's are not in active state" raise OpTestError(l_msg) print "Get All dcmi readings at runtime" self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_DISCOVER) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_GET_LIMIT) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_SENSORS) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_MC_ID_STRING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_TEMP_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_CONF_PARAM) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_OOB_DISCOVER) ## # @brief This function will test below dcmi commands at both standby and runtime states # ipmitool dcmi discover :This command is used to discover # supported capabilities in DCMI. # ipmitool dcmi power reading :Get power related readings from the system. # ipmitool dcmi power get_limit :Get the configured power limits. # ipmitool dcmi power sensors :Prints the available DCMI sensors. # ipmitool dcmi get_temp_reading :Get Temperature Sensor Readings. # ipmitool dcmi get_mc_id_string :Get management controller identifier string. # ipmitool dcmi get_conf_param :Get DCMI Configuration Parameters. # ipmitool dcmi oob_discover :Ping/Pong Message for DCMI Discovery. # # @return BMC_CONST.FW_SUCCESS or BMC_CONST.FW_FAILED # def test_dcmi_at_standby_and_runtime_states(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "Energy scale Test 3: Get Sensors, Temperature and Power reading's at power off and runtime" print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int( self.cv_SYSTEM.sys_wait_for_standby_state( BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) print "Get All dcmi readings at power off" self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_DISCOVER) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_GET_LIMIT) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_SENSORS) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_MC_ID_STRING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_TEMP_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_CONF_PARAM) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_OOB_DISCOVER) print "Performing a IPMI Power ON Operation" # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) l_status = self.cv_IPMI.ipmi_get_occ_status() print l_status if BMC_CONST.OCC_DEVICE_ENABLED in l_status: print "OCC's are up and active" else: l_msg = "OCC's are not in active state" raise OpTestError(l_msg) print "Get All dcmi readings at runtime" self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_DISCOVER) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_POWER_GET_LIMIT) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_SENSORS) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_MC_ID_STRING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_TEMP_READING) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_GET_CONF_PARAM) self.run_ipmi_cmd(BMC_CONST.IPMI_DCMI_OOB_DISCOVER) ## # @brief It will execute and test the return code of ipmi command. # # @param i_cmd @type string:The ipmitool command, for example: chassis power on; echo $? # # @return l_res @type list: output of command or raise OpTestError # def run_ipmi_cmd(self, i_cmd): l_cmd = i_cmd l_res = self.cv_IPMI.ipmitool_execute_command(l_cmd) print l_res l_res = l_res.splitlines() if int(l_res[-1]): l_msg = "IPMI: command failed %c" % l_cmd raise OpTestError(l_msg) return l_res
class OpTestFWTS(): ## Initialize this object # @param i_bmcIP The IP address of the BMC # @param i_bmcUser The userid to log into the BMC with # @param i_bmcPasswd The password of the userid to log into the BMC with # @param i_bmcUserIpmi The userid to issue the BMC IPMI commands with # @param i_bmcPasswdIpmi The password of BMC IPMI userid # @param i_ffdcDir Optional param to indicate where to write FFDC # # "Only required for inband tests" else Default = None # @param i_hostIP The IP address of the HOST # @param i_hostuser The userid to log into the HOST # @param i_hostPasswd The password of the userid to log into the HOST with # def __init__(self, i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir=None, i_hostip=None, i_hostuser=None, i_hostPasswd=None): self.cv_BMC = OpTestBMC(i_bmcIP, i_bmcUser, i_bmcPasswd, i_ffdcDir) self.cv_IPMI = OpTestIPMI(i_bmcIP, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostip, i_hostuser, i_hostPasswd) self.cv_HOST = OpTestHost(i_hostip, i_hostuser, i_hostPasswd, i_bmcIP, i_ffdcDir) self.cv_SYSTEM = OpTestSystem(i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostip, i_hostuser, i_hostPasswd) self.util = OpTestUtil() self.user = i_hostuser self.ip = i_hostip self.passwd = i_hostPasswd ## # @brief This function just brings the system to host OS. # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def test_system_reboot(self): print "Testing FWTS: Booting system to OS" print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int( self.cv_SYSTEM.sys_wait_for_standby_state( BMC_CONST.SYSTEM_STANDBY_STATE_DELAY) ) == BMC_CONST.FW_SUCCESS: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) self.cv_IPMI.clear_ssh_keys(self.cv_HOST.ip) print "Gathering the OPAL msg logs" self.cv_HOST.host_gather_opal_msg_log() return BMC_CONST.FW_SUCCESS ## # @brief This function just executes the fwts_execution.sh on host OS # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def test_fwts(self): l_oslevel = self.cv_HOST.host_get_OS_Level() if not "Ubuntu" in l_oslevel: return # Copy the fwts execution file to the tmp folder in the host base_path = (os.path.dirname( os.path.abspath(__file__))).split('testcases')[0] fwts_script = base_path + "/testcases/fwts_execution.sh" try: self.util.copyFilesToDest(fwts_script, self.user, self.ip, "/tmp/", self.passwd) except: l_msg = "Copying fwts file to host failed" print l_msg raise OpTestError(l_msg) l_res = self.cv_HOST.host_run_command("/tmp/fwts_execution.sh") print l_res
class OpTestSystemBootSequence(): ## Initialize this object # @param i_bmcIP The IP address of the BMC # @param i_bmcUser The userid to log into the BMC with # @param i_bmcPasswd The password of the userid to log into the BMC with # @param i_bmcUserIpmi The userid to issue the BMC IPMI commands with # @param i_bmcPasswdIpmi The password of BMC IPMI userid # @param i_ffdcDir Optional param to indicate where to write FFDC # # "Only required for inband tests" else Default = None # @param i_hostip The IP address of the HOST # @param i_hostuser The userid to log into the HOST # @param i_hostpasswd The password of the userid to log into the HOST with # def __init__(self, i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir=None, i_hostip=None, i_hostuser=None, i_hostpasswd=None): self.cv_BMC = OpTestBMC(i_bmcIP, i_bmcUser, i_bmcPasswd, i_ffdcDir) self.cv_IPMI = OpTestIPMI(i_bmcIP, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostip, i_hostuser, i_hostpasswd) self.cv_HOST = OpTestHost(i_hostip, i_hostuser, i_hostpasswd, i_bmcIP, i_ffdcDir) self.cv_SYSTEM = OpTestSystem(i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostip, i_hostuser, i_hostpasswd) self.util = OpTestUtil() ## # @brief This function will test mc cold reset boot sequence # It has below steps # 1. Do a system Power OFF(Host should go down) # 2. Set auto reboot policy to off(chassis policy always-off) # 3. Issue a BMC Cold reset. # 4. After BMC comes up, Issue a Power ON of the system # 5. Check for system status and gather OPAL msg log. # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def testMcColdResetBootSequence(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "Testing MC Cold reset boot sequence" print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) print "Setting the system power policy to always-off" self.cv_IPMI.ipmi_set_power_policy("always-off") # Perform a BMC Cold Reset Operation self.cv_IPMI.ipmi_cold_reset() print "Performing a IPMI Power ON Operation" # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) self.cv_IPMI.clear_ssh_keys(self.cv_HOST.ip) print "Gathering the OPAL msg logs" self.cv_HOST.host_gather_opal_msg_log() return BMC_CONST.FW_SUCCESS ## # @brief This function will test mc warm reset boot sequence # It has below steps # 1. Do a system Power OFF(Host should go down) # 2. Set auto reboot policy to off(chassis policy always-off) # 3. Issue a BMC Warm reset. # 4. After BMC comes up, Issue a Power ON of the system # 5. Check for system status and gather OPAL msg log. # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def testMcWarmResetBootSequence(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "Testing MC Warm reset boot sequence" print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) print "Setting the system power policy to always-off" self.cv_IPMI.ipmi_set_power_policy("always-off") # Perform a BMC Warm Reset Operation self.cv_IPMI.ipmi_warm_reset() print "Performing a IPMI Power ON Operation" # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) self.cv_IPMI.clear_ssh_keys(self.cv_HOST.ip) print "Gathering the OPAL msg logs" self.cv_HOST.host_gather_opal_msg_log() return BMC_CONST.FW_SUCCESS ## # @brief This function will test system auto reboot policy always-off. # It has below steps # 1. Do a system Power OFF(Host should go down) # 2. Set auto reboot policy to off(chassis policy always-off) # 3. Issue a BMC Cold reset. # 4. After BMC comes up, expect the system to not boot. # 5. Issue a Power ON of the system # 6. Check for system status and gather OPAL msg log. # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def testSystemPowerPolicyOff(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "Testing System Power Policy:always-off" print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == BMC_CONST.FW_SUCCESS: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) print "Setting the system power policy to always-off" self.cv_IPMI.ipmi_set_power_policy("always-off") # Perform a BMC Cold Reset Operation if int(self.cv_SYSTEM.sys_cold_reset_bmc()) == BMC_CONST.FW_SUCCESS: print "System auto reboot policy for always-off works as expected" print "System Power status not changed" print "Performing a IPMI Power ON Operation" # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() else: print "Power restore policy failed" l_msg = "Fail: chassis policy always-off making the system to auto boot" print l_msg self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) self.cv_IPMI.clear_ssh_keys(self.cv_HOST.ip) print "Gathering the OPAL msg logs" self.cv_HOST.host_gather_opal_msg_log() return BMC_CONST.FW_SUCCESS ## # @brief This function will test system auto reboot policy always-on. # It has below steps # 1. Do a system Power OFF(Host should go down) # 2. Set auto reboot policy to on(chassis policy always-on) # 3. Issue a BMC Cold reset. # 4. After BMC comes up, Here expect the system to boot, # If not power policy is not working as expected # 5. Check for system status and gather OPAL msg log. # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def testSystemPowerPolicyOn(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "Testing System Power Policy:Always-ON" print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == BMC_CONST.FW_SUCCESS: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) print "Setting the system power policy to always-on" self.cv_IPMI.ipmi_set_power_policy("always-on") # Perform a BMC Cold Reset Operation if int(self.cv_SYSTEM.sys_cold_reset_bmc()) == BMC_CONST.FW_FAILED: print "System auto reboot policy for always-on works as expected" print "System Power status changed as expected" else: print "Power restore policy failed" l_msg = "Fail: chassis policy always-on making the system not to auto boot" print "Performing a IPMI Power ON Operation" # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) self.cv_IPMI.clear_ssh_keys(self.cv_HOST.ip) print "Gathering the OPAL msg logs" self.cv_HOST.host_gather_opal_msg_log() return BMC_CONST.FW_SUCCESS ## # @brief This function will test system auto reboot policy previous # It has below steps # 1. Do a system Power OFF(Host should go down) # 2. Set auto reboot policy to previous(chassis policy previous) # 3. Issue a BMC Cold reset. # 4. After BMC comes up, system power status will change based on # previous power status before issuing cold reset. # 5. Check for system status and gather OPAL msg log. # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def testSystemPowerPolicyPrevious(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "Testing System Power Policy:previous" print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == BMC_CONST.FW_SUCCESS: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) print "Setting the system power policy to previous" self.cv_IPMI.ipmi_set_power_policy("previous") # Perform a BMC Cold Reset Operation if int(self.cv_SYSTEM.sys_cold_reset_bmc()) == BMC_CONST.FW_SUCCESS: print "System auto reboot policy for previous works as expected" print "System Power status not changed" print "Performing a IPMI Power ON Operation" # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() else: print "Power restore policy failed" l_msg = "Fail: chassis policy previous making the system to auto boot" print l_msg self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) self.cv_IPMI.clear_ssh_keys(self.cv_HOST.ip) print "Gathering the OPAL msg logs" self.cv_HOST.host_gather_opal_msg_log() # Perform a BMC Cold Reset Operation if int(self.cv_SYSTEM.sys_cold_reset_bmc()) == BMC_CONST.FW_SUCCESS: print "System auto reboot policy for previous works as expected" print "System Power status not changed" else: print "Power restore policy previous failed" l_msg = "Fail: chassis policy previous making the system to change power status" print l_msg # Perform a IPMI Power ON Operation self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() self.util.PingFunc(self.cv_HOST.ip, BMC_CONST.PING_RETRY_POWERCYCLE) self.cv_IPMI.clear_ssh_keys(self.cv_HOST.ip) print "Gathering the OPAL msg logs" self.cv_HOST.host_gather_opal_msg_log()
class OpTestOCC(): ## Initialize this object # @param i_bmcIP The IP address of the BMC # @param i_bmcUser The userid to log into the BMC with # @param i_bmcPasswd The password of the userid to log into the BMC with # @param i_bmcUserIpmi The userid to issue the BMC IPMI commands with # @param i_bmcPasswdIpmi The password of BMC IPMI userid # @param i_ffdcDir Optional param to indicate where to write FFDC # # "Only required for inband tests" else Default = None # @param i_hostIP The IP address of the HOST # @param i_hostuser The userid to log into the HOST # @param i_hostPasswd The password of the userid to log into the HOST with # def __init__(self, i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir=None, i_hostip=None, i_hostuser=None, i_hostPasswd=None): self.cv_BMC = OpTestBMC(i_bmcIP, i_bmcUser, i_bmcPasswd, i_ffdcDir) self.cv_IPMI = OpTestIPMI(i_bmcIP, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostip, i_hostuser, i_hostPasswd) self.cv_HOST = OpTestHost(i_hostip, i_hostuser, i_hostPasswd, i_bmcIP) self.cv_SYSTEM = OpTestSystem(i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostip, i_hostuser, i_hostPasswd) self.util = OpTestUtil() ## # @brief This function is used to test OCC Reset funtionality in BMC based systems. # OCC Reset reload is limited to 3 times per full power cycle. # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def test_occ_reset_functionality(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int( self.cv_SYSTEM.sys_wait_for_standby_state( BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state" #raise OpTestError(l_msg) print "OPAL-PRD: OCC Enable" self.cv_HOST.host_run_command(BMC_CONST.OCC_ENABLE) print "OPAL-PRD: OCC DISABLE" self.cv_HOST.host_run_command(BMC_CONST.OCC_DISABLE) print "OPAL-PRD: OCC RESET" self.cv_HOST.host_run_command(BMC_CONST.OCC_RESET) time.sleep(60) if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state" #raise OpTestError(l_msg) print "OPAL-PRD: OCC Enable" self.cv_HOST.host_run_command(BMC_CONST.OCC_ENABLE) print "OPAL-PRD: OCC DISABLE" self.cv_HOST.host_run_command(BMC_CONST.OCC_DISABLE) print "OPAL-PRD: OCC RESET" self.cv_HOST.host_run_command(BMC_CONST.OCC_RESET) time.sleep(60) if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state" #raise OpTestError(l_msg) print "OPAL-PRD: OCC Enable" self.cv_HOST.host_run_command(BMC_CONST.OCC_ENABLE) print "OPAL-PRD: OCC DISABLE" self.cv_HOST.host_run_command(BMC_CONST.OCC_DISABLE) print "OPAL-PRD: OCC RESET" self.cv_HOST.host_run_command(BMC_CONST.OCC_RESET) time.sleep(60) if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state, rebooting the system" print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int( self.cv_SYSTEM.sys_wait_for_standby_state( BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state" raise OpTestError(l_msg) ## # @brief This function is used to test OCC Reset funtionality in BMC based systems. # OCC Reset reload can be done more than 3 times per full power cycle, by # resetting OCC resetreload count. # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def test_occ_reset_n_times(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int( self.cv_SYSTEM.sys_wait_for_standby_state( BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state after rebooting" raise OpTestError(l_msg) for i in range(1, BMC_CONST.OCC_RESET_RELOAD_COUNT): print "*******************OCC Reset count %d*******************" % i print "OPAL-PRD: OCC Enable" self.cv_HOST.host_run_command(BMC_CONST.OCC_ENABLE) print "OPAL-PRD: OCC DISABLE" self.cv_HOST.host_run_command(BMC_CONST.OCC_DISABLE) print "OPAL-PRD: OCC RESET" self.cv_HOST.host_run_command(BMC_CONST.OCC_RESET) time.sleep(60) if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state" raise OpTestError(l_msg) print "OPAL-PRD: occ query reset reload count" self.cv_HOST.host_run_command(BMC_CONST.OCC_QUERY_RESET_COUNTS) print "OPAL-PRD: occ reset reset/reload count" self.cv_HOST.host_run_command(BMC_CONST.OCC_SET_RESET_RELOAD_COUNT) print "OPAL-PRD: occ query reset reload count" self.cv_HOST.host_run_command(BMC_CONST.OCC_QUERY_RESET_COUNTS) print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int( self.cv_SYSTEM.sys_wait_for_standby_state( BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state after rebooting" raise OpTestError(l_msg) ## # @brief This function is used to test OCC Enable and Disable funtionality in BMC based systems. # There is no limit for occ enable and disable, as of now doing 10 times in a loop. # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def test_occ_enable_disable_functionality(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int( self.cv_SYSTEM.sys_wait_for_standby_state( BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state" raise OpTestError(l_msg) for count in range(1, 10): print "OPAL-PRD: OCC Enable" self.cv_HOST.host_run_command(BMC_CONST.OCC_ENABLE) print "OPAL-PRD: OCC Disable" self.cv_HOST.host_run_command(BMC_CONST.OCC_DISABLE) time.sleep(60) if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state" #raise OpTestError(l_msg) print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int( self.cv_SYSTEM.sys_wait_for_standby_state( BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state" raise OpTestError(l_msg) ## # @brief This function is used to get OCC status enable/disable. # # @return BMC_CONST.FW_SUCCESS - OCC's are active or # BMC_CONST.FW_FAILED - OCC's are not in active state # def check_occ_status(self): l_status = self.cv_IPMI.ipmi_get_occ_status() print l_status if BMC_CONST.OCC_DEVICE_ENABLED in l_status: print "OCC's are up and active" return BMC_CONST.FW_SUCCESS else: print "OCC's are not in active state" return BMC_CONST.FW_FAILED
class OpTestOCC(): ## Initialize this object # @param i_bmcIP The IP address of the BMC # @param i_bmcUser The userid to log into the BMC with # @param i_bmcPasswd The password of the userid to log into the BMC with # @param i_bmcUserIpmi The userid to issue the BMC IPMI commands with # @param i_bmcPasswdIpmi The password of BMC IPMI userid # @param i_ffdcDir Optional param to indicate where to write FFDC # # "Only required for inband tests" else Default = None # @param i_hostIP The IP address of the HOST # @param i_hostuser The userid to log into the HOST # @param i_hostPasswd The password of the userid to log into the HOST with # def __init__(self, i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir=None, i_hostip=None, i_hostuser=None, i_hostPasswd=None): self.cv_BMC = OpTestBMC(i_bmcIP, i_bmcUser, i_bmcPasswd, i_ffdcDir) self.cv_IPMI = OpTestIPMI(i_bmcIP, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostip, i_hostuser, i_hostPasswd) self.cv_HOST = OpTestHost(i_hostip, i_hostuser, i_hostPasswd, i_bmcIP) self.cv_SYSTEM = OpTestSystem(i_bmcIP, i_bmcUser, i_bmcPasswd, i_bmcUserIpmi, i_bmcPasswdIpmi, i_ffdcDir, i_hostip, i_hostuser, i_hostPasswd) self.util = OpTestUtil() ## # @brief This function is used to test OCC Reset funtionality in BMC based systems. # OCC Reset reload is limited to 3 times per full power cycle. # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def test_occ_reset_functionality(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state" #raise OpTestError(l_msg) print "OPAL-PRD: OCC Enable" self.cv_HOST.host_run_command(BMC_CONST.OCC_ENABLE) print "OPAL-PRD: OCC DISABLE" self.cv_HOST.host_run_command(BMC_CONST.OCC_DISABLE) print "OPAL-PRD: OCC RESET" self.cv_HOST.host_run_command(BMC_CONST.OCC_RESET) time.sleep(60) if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state" #raise OpTestError(l_msg) print "OPAL-PRD: OCC Enable" self.cv_HOST.host_run_command(BMC_CONST.OCC_ENABLE) print "OPAL-PRD: OCC DISABLE" self.cv_HOST.host_run_command(BMC_CONST.OCC_DISABLE) print "OPAL-PRD: OCC RESET" self.cv_HOST.host_run_command(BMC_CONST.OCC_RESET) time.sleep(60) if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state" #raise OpTestError(l_msg) print "OPAL-PRD: OCC Enable" self.cv_HOST.host_run_command(BMC_CONST.OCC_ENABLE) print "OPAL-PRD: OCC DISABLE" self.cv_HOST.host_run_command(BMC_CONST.OCC_DISABLE) print "OPAL-PRD: OCC RESET" self.cv_HOST.host_run_command(BMC_CONST.OCC_RESET) time.sleep(60) if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state, rebooting the system" print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state" raise OpTestError(l_msg) ## # @brief This function is used to test OCC Reset funtionality in BMC based systems. # OCC Reset reload can be done more than 3 times per full power cycle, by # resetting OCC resetreload count. # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def test_occ_reset_n_times(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state after rebooting" raise OpTestError(l_msg) for i in range(1, BMC_CONST.OCC_RESET_RELOAD_COUNT): print "*******************OCC Reset count %d*******************" % i print "OPAL-PRD: OCC Enable" self.cv_HOST.host_run_command(BMC_CONST.OCC_ENABLE) print "OPAL-PRD: OCC DISABLE" self.cv_HOST.host_run_command(BMC_CONST.OCC_DISABLE) print "OPAL-PRD: OCC RESET" self.cv_HOST.host_run_command(BMC_CONST.OCC_RESET) time.sleep(60) if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state" raise OpTestError(l_msg) print "OPAL-PRD: occ query reset reload count" self.cv_HOST.host_run_command(BMC_CONST.OCC_QUERY_RESET_COUNTS) print "OPAL-PRD: occ reset reset/reload count" self.cv_HOST.host_run_command(BMC_CONST.OCC_SET_RESET_RELOAD_COUNT) print "OPAL-PRD: occ query reset reload count" self.cv_HOST.host_run_command(BMC_CONST.OCC_QUERY_RESET_COUNTS) print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state after rebooting" raise OpTestError(l_msg) ## # @brief This function is used to test OCC Enable and Disable funtionality in BMC based systems. # There is no limit for occ enable and disable, as of now doing 10 times in a loop. # # @return BMC_CONST.FW_SUCCESS or raise OpTestError # def test_occ_enable_disable_functionality(self): self.cv_SYSTEM.sys_bmc_power_on_validate_host() print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state" raise OpTestError(l_msg) for count in range(1,10): print "OPAL-PRD: OCC Enable" self.cv_HOST.host_run_command(BMC_CONST.OCC_ENABLE) print "OPAL-PRD: OCC Disable" self.cv_HOST.host_run_command(BMC_CONST.OCC_DISABLE) time.sleep(60) if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state" #raise OpTestError(l_msg) print "Performing a IPMI Power OFF Operation" # Perform a IPMI Power OFF Operation(Immediate Shutdown) self.cv_IPMI.ipmi_power_off() if int(self.cv_SYSTEM.sys_wait_for_standby_state(BMC_CONST.SYSTEM_STANDBY_STATE_DELAY)) == 0: print "System is in standby/Soft-off state" else: l_msg = "System failed to reach standby/Soft-off state" raise OpTestError(l_msg) self.cv_IPMI.ipmi_power_on() self.cv_SYSTEM.sys_check_host_status() if self.check_occ_status() == BMC_CONST.FW_FAILED: l_msg = "OCC's are not in active state" raise OpTestError(l_msg) ## # @brief This function is used to get OCC status enable/disable. # # @return BMC_CONST.FW_SUCCESS - OCC's are active or # BMC_CONST.FW_FAILED - OCC's are not in active state # def check_occ_status(self): l_status = self.cv_IPMI.ipmi_get_occ_status() print l_status if BMC_CONST.OCC_DEVICE_ENABLED in l_status: print "OCC's are up and active" return BMC_CONST.FW_SUCCESS else: print "OCC's are not in active state" return BMC_CONST.FW_FAILED