1 #!/usr/bin/python 2 # pylint: disable=missing-docstring 3 4 import unittest 5 6 import common 7 8 from autotest_lib.server.hosts import cros_host 9 from autotest_lib.server.hosts import servo_host 10 11 CROSSYSTEM_RESULT = ''' 12 fwb_tries = 0 # Fake comment 13 fw_vboot2 = 1 # Fake comment 14 fwid = Google_Reef.9933.0.0 # Fake comment 15 fwupdate_tries = 0 # 16 fw_tried = B # 17 fw_try_count = 0 # 18 ''' 19 20 NON_UNI_LSB_RELEASE_OUTPUT = ''' 21 CHROMEOS_RELEASE_BOARD=reef 22 ''' 23 24 UNI_LSB_RELEASE_OUTPUT = ''' 25 CHROMEOS_RELEASE_BOARD=coral 26 CHROMEOS_RELEASE_UNIBUILD=1 27 ''' 28 29 class MockCmd(object): 30 """Simple mock command with base command and results""" 31 32 def __init__(self, cmd, exit_status, stdout): 33 self.cmd = cmd 34 self.stdout = stdout 35 self.exit_status = exit_status 36 37 38 class MockHost(cros_host.CrosHost): 39 """Simple host for running mock'd host commands""" 40 41 def __init__(self, *args): 42 self._mock_cmds = {c.cmd: c for c in args} 43 44 def run(self, command, **kwargs): 45 """Finds the matching result by command value""" 46 mock_cmd = self._mock_cmds[command] 47 file_out = kwargs.get('stdout_tee', None) 48 if file_out: 49 file_out.write(mock_cmd.stdout) 50 return mock_cmd 51 52 53 class GetPlatformModelTests(unittest.TestCase): 54 """Unit tests for CrosHost.get_platform_model""" 55 56 def test_mosys_succeeds(self): 57 host = MockHost( 58 MockCmd('cat /etc/lsb-release', 0, UNI_LSB_RELEASE_OUTPUT), 59 MockCmd('mosys platform model', 0, 'coral\n')) 60 self.assertEqual(host.get_platform(), 'coral') 61 62 def test_mosys_fails(self): 63 host = MockHost( 64 MockCmd('cat /etc/lsb-release', 0, UNI_LSB_RELEASE_OUTPUT), 65 MockCmd('mosys platform model', 1, ''), 66 MockCmd('crossystem', 0, CROSSYSTEM_RESULT)) 67 self.assertEqual(host.get_platform(), 'reef') 68 69 def test_non_unibuild(self): 70 host = MockHost( 71 MockCmd('cat /etc/lsb-release', 0, NON_UNI_LSB_RELEASE_OUTPUT), 72 MockCmd('crossystem', 0, CROSSYSTEM_RESULT)) 73 self.assertEqual(host.get_platform(), 'reef') 74 75 def test_cat_lsb_fails(self): 76 host = MockHost( 77 MockCmd('cat /etc/lsb-release', 1, ''), 78 MockCmd('crossystem', 0, CROSSYSTEM_RESULT)) 79 self.assertEqual(host.get_platform(), 'reef') 80 81 82 class DictFilteringTestCase(unittest.TestCase): 83 """Tests for dict filtering methods on CrosHost.""" 84 85 def test_get_chameleon_arguments(self): 86 got = cros_host.CrosHost.get_chameleon_arguments({ 87 'chameleon_host': 'host', 88 'spam': 'eggs', 89 }) 90 self.assertEqual(got, {'chameleon_host': 'host'}) 91 92 def test_get_plankton_arguments(self): 93 got = cros_host.CrosHost.get_plankton_arguments({ 94 'plankton_host': 'host', 95 'spam': 'eggs', 96 }) 97 self.assertEqual(got, {'plankton_host': 'host'}) 98 99 def test_get_servo_arguments(self): 100 got = cros_host.CrosHost.get_servo_arguments({ 101 servo_host.SERVO_HOST_ATTR: 'host', 102 'spam': 'eggs', 103 }) 104 self.assertEqual(got, {servo_host.SERVO_HOST_ATTR: 'host'}) 105 106 107 if __name__ == "__main__": 108 unittest.main() 109 110