Home | History | Annotate | Download | only in hosts
      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