xref: /aosp_15_r20/external/autotest/server/hosts/servo_repair_unittest.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li#!/usr/bin/python3
2*9c5db199SXin Li# Copyright 2021 The Chromium OS Authors. All rights reserved.
3*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be
4*9c5db199SXin Li# found in the LICENSE file.
5*9c5db199SXin Li
6*9c5db199SXin Li# pylint: disable=missing-docstring
7*9c5db199SXin Li
8*9c5db199SXin Liimport unittest
9*9c5db199SXin Lifrom unittest import mock
10*9c5db199SXin Li
11*9c5db199SXin Liimport common
12*9c5db199SXin Lifrom autotest_lib.server.hosts import servo_repair
13*9c5db199SXin Lifrom autotest_lib.server.hosts import repair_utils
14*9c5db199SXin Li
15*9c5db199SXin LiSERVO_VERIFY_DAG = (
16*9c5db199SXin Li        (servo_repair._ConnectionVerifier, 'connection', []),
17*9c5db199SXin Li        (servo_repair._RootServoPresentVerifier, 'servo_root_present',
18*9c5db199SXin Li         ['connection']),
19*9c5db199SXin Li        (servo_repair._RootServoV3PresentVerifier, 'servo_v3_root_present',
20*9c5db199SXin Li         ['connection']),
21*9c5db199SXin Li        (servo_repair._ServoFwVerifier, 'servo_fw', ['servo_root_present']),
22*9c5db199SXin Li        (servo_repair._StartServodVerifier, 'start_servod',
23*9c5db199SXin Li         ['servo_fw', 'servo_v3_root_present']),
24*9c5db199SXin Li        (servo_repair._DiskSpaceVerifier, 'servo_disk_space', ['connection']),
25*9c5db199SXin Li        (servo_repair._UpdateVerifier, 'servo_update',
26*9c5db199SXin Li         ['servo_v3_root_present']),
27*9c5db199SXin Li        (servo_repair._BoardConfigVerifier, 'servo_config_board',
28*9c5db199SXin Li         ['connection']),
29*9c5db199SXin Li        (servo_repair._SerialConfigVerifier, 'servo_config_serial',
30*9c5db199SXin Li         ['connection']),
31*9c5db199SXin Li        (servo_repair._ServodJobVerifier, 'servod_started', [
32*9c5db199SXin Li                'start_servod', 'servo_config_board', 'servo_config_serial',
33*9c5db199SXin Li                'servo_disk_space'
34*9c5db199SXin Li        ]),
35*9c5db199SXin Li        (servo_repair._ServodEchoVerifier, 'servod_echo', ['servod_started']),
36*9c5db199SXin Li        (servo_repair._TopologyVerifier, 'servo_topology', ['servod_echo']),
37*9c5db199SXin Li        (servo_repair._ServodConnectionVerifier, 'servod_connection',
38*9c5db199SXin Li         ['servod_echo']),
39*9c5db199SXin Li        (servo_repair._Cr50LowSBUVerifier, 'servo_cr50_low_sbu',
40*9c5db199SXin Li         ['servod_connection']),
41*9c5db199SXin Li        (servo_repair.ServodDutControllerMissingVerifier,
42*9c5db199SXin Li         'servod_dut_controller_missing', ['servod_connection']),
43*9c5db199SXin Li        (servo_repair._Cr50OffVerifier, 'servo_cr50_off',
44*9c5db199SXin Li         ['servod_connection']),
45*9c5db199SXin Li        (servo_repair._ServodControlVerifier, 'servod_control',
46*9c5db199SXin Li         ['servod_connection']),
47*9c5db199SXin Li        (servo_repair._DUTConnectionVerifier, 'servo_dut_connected',
48*9c5db199SXin Li         ['servod_connection']),
49*9c5db199SXin Li        (servo_repair._ServoHubConnectionVerifier, 'servo_hub_connected',
50*9c5db199SXin Li         ['servo_dut_connected']),
51*9c5db199SXin Li        (servo_repair._PowerButtonVerifier, 'servo_pwr_button',
52*9c5db199SXin Li         ['servo_hub_connected']),
53*9c5db199SXin Li        (servo_repair._BatteryVerifier, 'servo_battery',
54*9c5db199SXin Li         ['servo_hub_connected']),
55*9c5db199SXin Li        (servo_repair._LidVerifier, 'servo_lid_open', ['servo_hub_connected']),
56*9c5db199SXin Li        (servo_repair.ECConsoleVerifier, 'servo_ec_console',
57*9c5db199SXin Li         ['servo_dut_connected']),
58*9c5db199SXin Li        (servo_repair._Cr50ConsoleVerifier, 'servo_cr50_console',
59*9c5db199SXin Li         ['servo_dut_connected']),
60*9c5db199SXin Li        (servo_repair._CCDTestlabVerifier, 'servo_ccd_testlab',
61*9c5db199SXin Li         ['servo_cr50_console']),
62*9c5db199SXin Li        (servo_repair._CCDPowerDeliveryVerifier, 'servo_power_delivery',
63*9c5db199SXin Li         ['servod_connection']),
64*9c5db199SXin Li)
65*9c5db199SXin Li
66*9c5db199SXin LiSERVO_REPAIR_ACTIONS = (
67*9c5db199SXin Li        (servo_repair._ServoFwUpdateRepair, 'servo_fw_update', ['connection'],
68*9c5db199SXin Li         ['servo_fw']),
69*9c5db199SXin Li        (servo_repair._DiskCleanupRepair, 'servo_disk_cleanup', ['connection'],
70*9c5db199SXin Li         ['servo_disk_space']),
71*9c5db199SXin Li        (servo_repair._ServoMicroFlashRepair, 'servo_micro_flash',
72*9c5db199SXin Li         ['connection', 'servo_topology'], ['servo_dut_connected']),
73*9c5db199SXin Li        (servo_repair._RestartServod, 'servod_restart',
74*9c5db199SXin Li         ['connection', 'servo_fw'], [
75*9c5db199SXin Li                 'servo_config_board', 'servo_config_serial', 'start_servod',
76*9c5db199SXin Li                 'servod_started', 'servo_topology', 'servod_connection',
77*9c5db199SXin Li                 'servod_echo', 'servod_control', 'servo_dut_connected',
78*9c5db199SXin Li                 'servo_hub_connected', 'servo_pwr_button',
79*9c5db199SXin Li                 'servo_cr50_console', 'servo_cr50_low_sbu', 'servo_cr50_off',
80*9c5db199SXin Li                 'servo_power_delivery', 'servod_dut_controller_missing'
81*9c5db199SXin Li         ]),
82*9c5db199SXin Li        (servo_repair._ServoRebootRepair, 'servo_reboot', ['connection'], [
83*9c5db199SXin Li                'servo_topology', 'servo_root_present', 'servo_disk_space',
84*9c5db199SXin Li                'servo_power_delivery'
85*9c5db199SXin Li        ]),
86*9c5db199SXin Li        (servo_repair._PowerDeliveryRepair, 'servo_pd_recover',
87*9c5db199SXin Li         ['servod_connection'], [
88*9c5db199SXin Li                 'servod_started', 'servo_topology', 'servod_connection',
89*9c5db199SXin Li                 'servod_echo', 'servod_control', 'servo_dut_connected',
90*9c5db199SXin Li                 'servo_hub_connected', 'servo_pwr_button',
91*9c5db199SXin Li                 'servo_cr50_console', 'servo_cr50_low_sbu', 'servo_cr50_off',
92*9c5db199SXin Li                 'servo_power_delivery', 'servod_dut_controller_missing'
93*9c5db199SXin Li         ]),
94*9c5db199SXin Li        (servo_repair._FakedisconnectRepair, 'servo_fakedisconnect',
95*9c5db199SXin Li         ['servod_connection'], [
96*9c5db199SXin Li                 'servod_started', 'servo_topology', 'servod_connection',
97*9c5db199SXin Li                 'servod_echo', 'servod_control', 'servo_dut_connected',
98*9c5db199SXin Li                 'servo_hub_connected', 'servo_pwr_button',
99*9c5db199SXin Li                 'servo_cr50_console', 'servo_cr50_low_sbu', 'servo_cr50_off',
100*9c5db199SXin Li                 'servo_power_delivery', 'servod_dut_controller_missing'
101*9c5db199SXin Li         ]),
102*9c5db199SXin Li        (servo_repair._ToggleCCLineRepair, 'servo_cc', ['servod_connection'], [
103*9c5db199SXin Li                'servod_started', 'servo_topology', 'servod_connection',
104*9c5db199SXin Li                'servod_echo', 'servod_control', 'servo_dut_connected',
105*9c5db199SXin Li                'servo_hub_connected', 'servo_pwr_button',
106*9c5db199SXin Li                'servo_cr50_console', 'servo_cr50_low_sbu', 'servo_cr50_off',
107*9c5db199SXin Li                'servo_power_delivery', 'servod_dut_controller_missing'
108*9c5db199SXin Li        ]),
109*9c5db199SXin Li        (servo_repair._DutRebootRepair, 'servo_dut_reboot',
110*9c5db199SXin Li         ['servod_connection'], [
111*9c5db199SXin Li                 'servod_control', 'servo_lid_open', 'servo_ec_console',
112*9c5db199SXin Li                 'servo_topology', 'servo_dut_connected',
113*9c5db199SXin Li                 'servo_hub_connected', 'servo_cr50_low_sbu', 'servo_cr50_off',
114*9c5db199SXin Li                 'servo_cr50_console', 'servo_power_delivery',
115*9c5db199SXin Li                 'servod_dut_controller_missing'
116*9c5db199SXin Li         ]),
117*9c5db199SXin Li        (servo_repair._ECRebootRepair, 'servo_ec_reboot',
118*9c5db199SXin Li         ['servod_connection'], [
119*9c5db199SXin Li                 'servod_control', 'servo_lid_open', 'servo_ec_console',
120*9c5db199SXin Li                 'servo_topology', 'servo_dut_connected',
121*9c5db199SXin Li                 'servo_hub_connected', 'servo_cr50_low_sbu', 'servo_cr50_off',
122*9c5db199SXin Li                 'servo_cr50_console', 'servo_power_delivery',
123*9c5db199SXin Li                 'servod_dut_controller_missing'
124*9c5db199SXin Li         ]),
125*9c5db199SXin Li)
126*9c5db199SXin Li
127*9c5db199SXin Li
128*9c5db199SXin Liclass ServoRepairUnittests(unittest.TestCase):
129*9c5db199SXin Li
130*9c5db199SXin Li    # Allow to show all diff when compare tuple.
131*9c5db199SXin Li    maxDiff = None
132*9c5db199SXin Li
133*9c5db199SXin Li    def test_servo_repair_components(self):
134*9c5db199SXin Li        verify_dag = servo_repair._servo_verifier_actions()
135*9c5db199SXin Li        self.assertTupleEqual(verify_dag, SERVO_VERIFY_DAG)
136*9c5db199SXin Li        self.check_verify_dag(verify_dag)
137*9c5db199SXin Li        repair_actions = servo_repair._servo_repair_actions()
138*9c5db199SXin Li        self.assertTupleEqual(repair_actions, SERVO_REPAIR_ACTIONS)
139*9c5db199SXin Li        self.check_repair_actions(verify_dag, repair_actions)
140*9c5db199SXin Li
141*9c5db199SXin Li    def test_servo_repair_strategy(self):
142*9c5db199SXin Li        servo_repair.create_servo_repair_strategy()
143*9c5db199SXin Li
144*9c5db199SXin Li    def check_verify_dag(self, verify_dag):
145*9c5db199SXin Li        """Checks that dependency labels are defined."""
146*9c5db199SXin Li        labels = [n[1] for n in verify_dag]
147*9c5db199SXin Li        for node in verify_dag:
148*9c5db199SXin Li            for dep in node[2]:
149*9c5db199SXin Li                self.assertIn(dep, labels)
150*9c5db199SXin Li
151*9c5db199SXin Li    def check_repair_actions(self, verify_dag, repair_actions):
152*9c5db199SXin Li        """Checks that dependency and trigger labels are defined."""
153*9c5db199SXin Li        verify_labels = [n[1] for n in verify_dag]
154*9c5db199SXin Li        for action in repair_actions:
155*9c5db199SXin Li            deps = action[2]
156*9c5db199SXin Li            triggers = action[3]
157*9c5db199SXin Li            for label in deps + triggers:
158*9c5db199SXin Li                self.assertIn(label, verify_labels)
159*9c5db199SXin Li
160*9c5db199SXin Li
161*9c5db199SXin Liif __name__ == '__main__':
162*9c5db199SXin Li    unittest.main()
163