| #!/usr/bin/python3 |
| # Copyright 2021 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # pylint: disable=missing-docstring |
| |
| import unittest |
| from unittest import mock |
| |
| import common |
| from autotest_lib.server.hosts import servo_repair |
| from autotest_lib.server.hosts import repair_utils |
| |
| SERVO_VERIFY_DAG = ( |
| (servo_repair._ConnectionVerifier, 'connection', []), |
| (servo_repair._RootServoPresentVerifier, 'servo_root_present', |
| ['connection']), |
| (servo_repair._RootServoV3PresentVerifier, 'servo_v3_root_present', |
| ['connection']), |
| (servo_repair._ServoFwVerifier, 'servo_fw', ['servo_root_present']), |
| (servo_repair._StartServodVerifier, 'start_servod', |
| ['servo_fw', 'servo_v3_root_present']), |
| (servo_repair._DiskSpaceVerifier, 'servo_disk_space', ['connection']), |
| (servo_repair._UpdateVerifier, 'servo_update', |
| ['servo_v3_root_present']), |
| (servo_repair._BoardConfigVerifier, 'servo_config_board', |
| ['connection']), |
| (servo_repair._SerialConfigVerifier, 'servo_config_serial', |
| ['connection']), |
| (servo_repair._ServodJobVerifier, 'servod_started', [ |
| 'start_servod', 'servo_config_board', 'servo_config_serial', |
| 'servo_disk_space' |
| ]), |
| (servo_repair._ServodEchoVerifier, 'servod_echo', ['servod_started']), |
| (servo_repair._TopologyVerifier, 'servo_topology', ['servod_echo']), |
| (servo_repair._ServodConnectionVerifier, 'servod_connection', |
| ['servod_echo']), |
| (servo_repair._Cr50LowSBUVerifier, 'servo_cr50_low_sbu', |
| ['servod_connection']), |
| (servo_repair.ServodDutControllerMissingVerifier, |
| 'servod_dut_controller_missing', ['servod_connection']), |
| (servo_repair._Cr50OffVerifier, 'servo_cr50_off', |
| ['servod_connection']), |
| (servo_repair._ServodControlVerifier, 'servod_control', |
| ['servod_connection']), |
| (servo_repair._DUTConnectionVerifier, 'servo_dut_connected', |
| ['servod_connection']), |
| (servo_repair._ServoHubConnectionVerifier, 'servo_hub_connected', |
| ['servo_dut_connected']), |
| (servo_repair._PowerButtonVerifier, 'servo_pwr_button', |
| ['servo_hub_connected']), |
| (servo_repair._BatteryVerifier, 'servo_battery', |
| ['servo_hub_connected']), |
| (servo_repair._LidVerifier, 'servo_lid_open', ['servo_hub_connected']), |
| (servo_repair.ECConsoleVerifier, 'servo_ec_console', |
| ['servo_dut_connected']), |
| (servo_repair._Cr50ConsoleVerifier, 'servo_cr50_console', |
| ['servo_dut_connected']), |
| (servo_repair._CCDTestlabVerifier, 'servo_ccd_testlab', |
| ['servo_cr50_console']), |
| (servo_repair._CCDPowerDeliveryVerifier, 'servo_power_delivery', |
| ['servod_connection']), |
| ) |
| |
| SERVO_REPAIR_ACTIONS = ( |
| (servo_repair._ServoFwUpdateRepair, 'servo_fw_update', ['connection'], |
| ['servo_fw']), |
| (servo_repair._DiskCleanupRepair, 'servo_disk_cleanup', ['connection'], |
| ['servo_disk_space']), |
| (servo_repair._ServoMicroFlashRepair, 'servo_micro_flash', |
| ['connection', 'servo_topology'], ['servo_dut_connected']), |
| (servo_repair._RestartServod, 'servod_restart', |
| ['connection', 'servo_fw'], [ |
| 'servo_config_board', 'servo_config_serial', 'start_servod', |
| 'servod_started', 'servo_topology', 'servod_connection', |
| 'servod_echo', 'servod_control', 'servo_dut_connected', |
| 'servo_hub_connected', 'servo_pwr_button', |
| 'servo_cr50_console', 'servo_cr50_low_sbu', 'servo_cr50_off', |
| 'servo_power_delivery', 'servod_dut_controller_missing' |
| ]), |
| (servo_repair._ServoRebootRepair, 'servo_reboot', ['connection'], [ |
| 'servo_topology', 'servo_root_present', 'servo_disk_space', |
| 'servo_power_delivery' |
| ]), |
| (servo_repair._PowerDeliveryRepair, 'servo_pd_recover', |
| ['servod_connection'], [ |
| 'servod_started', 'servo_topology', 'servod_connection', |
| 'servod_echo', 'servod_control', 'servo_dut_connected', |
| 'servo_hub_connected', 'servo_pwr_button', |
| 'servo_cr50_console', 'servo_cr50_low_sbu', 'servo_cr50_off', |
| 'servo_power_delivery', 'servod_dut_controller_missing' |
| ]), |
| (servo_repair._FakedisconnectRepair, 'servo_fakedisconnect', |
| ['servod_connection'], [ |
| 'servod_started', 'servo_topology', 'servod_connection', |
| 'servod_echo', 'servod_control', 'servo_dut_connected', |
| 'servo_hub_connected', 'servo_pwr_button', |
| 'servo_cr50_console', 'servo_cr50_low_sbu', 'servo_cr50_off', |
| 'servo_power_delivery', 'servod_dut_controller_missing' |
| ]), |
| (servo_repair._ToggleCCLineRepair, 'servo_cc', ['servod_connection'], [ |
| 'servod_started', 'servo_topology', 'servod_connection', |
| 'servod_echo', 'servod_control', 'servo_dut_connected', |
| 'servo_hub_connected', 'servo_pwr_button', |
| 'servo_cr50_console', 'servo_cr50_low_sbu', 'servo_cr50_off', |
| 'servo_power_delivery', 'servod_dut_controller_missing' |
| ]), |
| (servo_repair._DutRebootRepair, 'servo_dut_reboot', |
| ['servod_connection'], [ |
| 'servod_control', 'servo_lid_open', 'servo_ec_console', |
| 'servo_topology', 'servo_dut_connected', |
| 'servo_hub_connected', 'servo_cr50_low_sbu', 'servo_cr50_off', |
| 'servo_cr50_console', 'servo_power_delivery', |
| 'servod_dut_controller_missing' |
| ]), |
| (servo_repair._ECRebootRepair, 'servo_ec_reboot', |
| ['servod_connection'], [ |
| 'servod_control', 'servo_lid_open', 'servo_ec_console', |
| 'servo_topology', 'servo_dut_connected', |
| 'servo_hub_connected', 'servo_cr50_low_sbu', 'servo_cr50_off', |
| 'servo_cr50_console', 'servo_power_delivery', |
| 'servod_dut_controller_missing' |
| ]), |
| ) |
| |
| |
| class ServoRepairUnittests(unittest.TestCase): |
| |
| # Allow to show all diff when compare tuple. |
| maxDiff = None |
| |
| def test_servo_repair_components(self): |
| verify_dag = servo_repair._servo_verifier_actions() |
| self.assertTupleEqual(verify_dag, SERVO_VERIFY_DAG) |
| self.check_verify_dag(verify_dag) |
| repair_actions = servo_repair._servo_repair_actions() |
| self.assertTupleEqual(repair_actions, SERVO_REPAIR_ACTIONS) |
| self.check_repair_actions(verify_dag, repair_actions) |
| |
| def test_servo_repair_strategy(self): |
| servo_repair.create_servo_repair_strategy() |
| |
| def check_verify_dag(self, verify_dag): |
| """Checks that dependency labels are defined.""" |
| labels = [n[1] for n in verify_dag] |
| for node in verify_dag: |
| for dep in node[2]: |
| self.assertIn(dep, labels) |
| |
| def check_repair_actions(self, verify_dag, repair_actions): |
| """Checks that dependency and trigger labels are defined.""" |
| verify_labels = [n[1] for n in verify_dag] |
| for action in repair_actions: |
| deps = action[2] |
| triggers = action[3] |
| for label in deps + triggers: |
| self.assertIn(label, verify_labels) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |