| import mock |
| import unittest |
| import re |
| |
| import common |
| |
| from autotest_lib.server.hosts import servo_host |
| from autotest_lib.server.hosts import servo_constants |
| |
| |
| class MockCmd(object): |
| """Simple mock command with base command and results""" |
| |
| def __init__(self, cmd, exit_status, stdout): |
| self.cmd = cmd |
| self.stdout = stdout |
| self.exit_status = exit_status |
| |
| |
| class MockHost(servo_host.ServoHost): |
| """Simple host for running mock'd host commands""" |
| |
| def __init__(self, *args): |
| self._mock_cmds = {c.cmd: c for c in args} |
| self._init_attributes() |
| self.hostname = "chromeos1-row1-rack1-host1" |
| self._dut_hostname = 'dut-' + self.hostname |
| self.servo_port = '9991' |
| |
| def run(self, command, **kwargs): |
| """Finds the matching result by command value""" |
| mock_cmd = self._mock_cmds[command] |
| file_out = kwargs.get('stdout_tee', None) |
| if file_out: |
| file_out.write(mock_cmd.stdout) |
| return mock_cmd |
| |
| |
| class ServoHostServoStateTestCase(unittest.TestCase): |
| """Tests to verify changing the servo_state""" |
| def test_return_none_if_state_not_defined(self): |
| host = MockHost() |
| self.assertIsNotNone(host) |
| self.assertIsNone(host._servo_state) |
| self.assertIsNone(host.get_servo_state()) |
| self.assertEqual(host._servo_state, None) |
| |
| def test_verify_set_state_broken_if_raised_error(self): |
| host = MockHost() |
| host._is_localhost = False |
| host._repair_strategy = mock.Mock() |
| host._repair_strategy.verify.side_effect = Exception('something_ex') |
| try: |
| host.verify(silent=True) |
| self.assertEqual("Should not be reached", 'expecting error') |
| except: |
| pass |
| self.assertEqual(host.get_servo_state(), |
| servo_constants.SERVO_STATE_BROKEN) |
| |
| def test_verify_set_state_working_if_no_raised_error(self): |
| host = MockHost() |
| host._repair_strategy = mock.Mock() |
| host.verify(silent=True) |
| self.assertEqual(host.get_servo_state(), |
| servo_constants.SERVO_STATE_WORKING) |
| |
| def test_repair_set_state_broken_if_raised_error(self): |
| host = MockHost() |
| host._is_localhost = False |
| host._repair_strategy = mock.Mock() |
| host._repair_strategy.repair.side_effect = Exception('something_ex') |
| try: |
| host.repair(silent=True) |
| self.assertEqual("Should not be reached", 'expecting error') |
| except: |
| pass |
| self.assertEqual(host.get_servo_state(), |
| servo_constants.SERVO_STATE_BROKEN) |
| |
| def test_repair_set_state_working_if_no_raised_error(self): |
| host = MockHost() |
| host._is_labstation = False |
| host._repair_strategy = mock.Mock() |
| host.repair(silent=True) |
| self.assertEqual(host.get_servo_state(), |
| servo_constants.SERVO_STATE_WORKING) |
| |
| |
| class ServoHostInformationValidator(unittest.TestCase): |
| """Tests to verify logic in servo host data""" |
| def test_true_when_host_and_port_is_correct(self): |
| port = 9999 |
| hostname = 'chromeos1-rack1-row1-host1-servo' |
| self.assertTrue(servo_host.is_servo_host_information_valid(hostname, port)) |
| hostname = 'CHROMEOS1-RACK1-ROW1-host1-SERVO' |
| self.assertTrue(servo_host.is_servo_host_information_valid(hostname, port)) |
| hostname = '96.120.0.567' |
| self.assertTrue(servo_host.is_servo_host_information_valid(hostname, port)) |
| hostname = 'locathost' |
| self.assertTrue(servo_host.is_servo_host_information_valid(hostname, port)) |
| hostname = 'my.dut-1' |
| self.assertTrue(servo_host.is_servo_host_information_valid(hostname, port)) |
| # diff ports |
| self.assertTrue(servo_host.is_servo_host_information_valid(hostname, 7000)) |
| self.assertTrue(servo_host.is_servo_host_information_valid(hostname, 1234)) |
| self.assertTrue(servo_host.is_servo_host_information_valid(hostname, 1)) |
| self.assertTrue(servo_host.is_servo_host_information_valid(hostname, 15000)) |
| # port as string in case of local testing |
| self.assertTrue(servo_host.is_servo_host_information_valid(hostname, '7000')) |
| self.assertTrue(servo_host.is_servo_host_information_valid(hostname, '1234')) |
| self.assertTrue(servo_host.is_servo_host_information_valid(hostname, '1')) |
| self.assertTrue(servo_host.is_servo_host_information_valid(hostname, ' 15000')) |
| self.assertTrue(servo_host.is_servo_host_information_valid(hostname, ' 07000')) |
| self.assertTrue(servo_host.is_servo_host_information_valid(hostname, ' 01234 ')) |
| self.assertTrue(servo_host.is_servo_host_information_valid(hostname, ' 01 ')) |
| self.assertTrue(servo_host.is_servo_host_information_valid(hostname, '015000')) |
| |
| def test_false_when_host_is_incorrect_and_port_is_correct(self): |
| port = '9991' |
| self.assertFalse( |
| servo_host.is_servo_host_information_valid('ch1%ra1$r1.h1.servo', port)) |
| self.assertFalse( |
| servo_host.is_servo_host_information_valid('[undefined]', port)) |
| self.assertFalse( |
| servo_host.is_servo_host_information_valid('None', port)) |
| self.assertFalse( |
| servo_host.is_servo_host_information_valid('', port)) |
| self.assertFalse( |
| servo_host.is_servo_host_information_valid(None, port)) |
| |
| def test_false_when_port_is_incorrect_and_host_is_correct(self): |
| hostname = 'Some_host-my' |
| self.assertFalse(servo_host.is_servo_host_information_valid(hostname, None)) |
| self.assertFalse(servo_host.is_servo_host_information_valid(hostname, -1)) |
| self.assertFalse(servo_host.is_servo_host_information_valid(hostname, 0)) |
| self.assertFalse(servo_host.is_servo_host_information_valid(hostname, None)) |
| self.assertFalse(servo_host.is_servo_host_information_valid(hostname, 'a1234')) |
| self.assertFalse(servo_host.is_servo_host_information_valid(hostname, 'o1234')) |
| self.assertFalse(servo_host.is_servo_host_information_valid(hostname, '71234')) |
| self.assertFalse(servo_host.is_servo_host_information_valid(hostname, '71_24')) |
| self.assertFalse(servo_host.is_servo_host_information_valid(hostname, '71.24')) |
| self.assertFalse(servo_host.is_servo_host_information_valid(hostname, '71-24')) |
| self.assertFalse(servo_host.is_servo_host_information_valid(hostname, '-234')) |
| self.assertFalse(servo_host.is_servo_host_information_valid(hostname, '-234.9')) |
| |
| |
| class ServoHostInformationExistor(unittest.TestCase): |
| """Tests to verify logic in servo host present""" |
| def test_true_when_host_is_correct(self): |
| port = 9999 |
| hostname = 'chromeos1-rack1-row1-host1-servo' |
| self.assertTrue(servo_host._is_servo_host_information_exist(hostname, port)) |
| hostname = 'CHROMEOS1' |
| self.assertTrue(servo_host._is_servo_host_information_exist(hostname, port)) |
| hostname = '!@#$%^&*()' |
| self.assertTrue(servo_host._is_servo_host_information_exist(hostname, port)) |
| |
| def test_true_when_port_is_correct(self): |
| hostname = 'chromeos1-rack1-row1-host1-servo' |
| port = 9999 |
| self.assertTrue(servo_host._is_servo_host_information_exist(hostname, 9999)) |
| self.assertTrue(servo_host._is_servo_host_information_exist(hostname, '9999')) |
| self.assertTrue(servo_host._is_servo_host_information_exist(hostname, 1234)) |
| self.assertTrue(servo_host._is_servo_host_information_exist(hostname, '1234')) |
| self.assertTrue(servo_host._is_servo_host_information_exist(hostname, ' 1234 ')) |
| self.assertTrue(servo_host._is_servo_host_information_exist(hostname, '01234')) |
| self.assertTrue(servo_host._is_servo_host_information_exist(hostname, '01234')) |
| |
| def test_false_when_port_was_not_set_up(self): |
| hostname = 'chromeos1%rack1$row1.host1.servo' |
| self.assertFalse(servo_host._is_servo_host_information_exist(hostname, '')) |
| self.assertFalse(servo_host._is_servo_host_information_exist(hostname, None)) |
| self.assertFalse(servo_host._is_servo_host_information_exist(hostname, "")) |
| |
| def test_false_when_host_was_not_set_up(self): |
| port = 1234 |
| self.assertFalse(servo_host._is_servo_host_information_exist('', port)) |
| self.assertFalse(servo_host._is_servo_host_information_exist(None, port)) |
| self.assertFalse(servo_host._is_servo_host_information_exist(' ', port)) |
| |
| |
| class ValidateUSBCPigtailRegex(unittest.TestCase): |
| """Tests to verify logic in servo host present""" |
| def test_good_cases(self): |
| host = MockHost() |
| message = "[475635.476044 PD TMOUT RX 1/1]" |
| self.assertTrue(bool(re.match(host.USBC_PIGTAIL_TIMEOUT_RE, message))) |
| message = "[475635.476044654 PD TMOUT RX 1/1]" |
| self.assertTrue(bool(re.match(host.USBC_PIGTAIL_TIMEOUT_RE, message))) |
| message = "475635.476044654 PD TMOUT RX 1/1" |
| self.assertFalse(bool(re.match(host.USBC_PIGTAIL_TIMEOUT_RE, message))) |
| |
| def test_bad_cases(self): |
| host = MockHost() |
| message = "PD TMOUT RX 1/1" |
| self.assertFalse(bool(re.match(host.USBC_PIGTAIL_TIMEOUT_RE, message))) |
| message = "[PD TMOUT RX 1/1]" |
| self.assertFalse(bool(re.match(host.USBC_PIGTAIL_TIMEOUT_RE, message))) |
| message = "PD TMOUT RX" |
| self.assertFalse(bool(re.match(host.USBC_PIGTAIL_TIMEOUT_RE, message))) |
| message = "something other" |
| self.assertFalse(bool(re.match(host.USBC_PIGTAIL_TIMEOUT_RE, message))) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |