• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/python
2# pylint: disable=missing-docstring
3
4import unittest
5
6import common
7
8from autotest_lib.server.hosts import cros_host
9from autotest_lib.server.hosts import servo_host
10
11CROSSYSTEM_RESULT = '''
12fwb_tries              = 0                              # Fake comment
13fw_vboot2              = 1                              # Fake comment
14fwid                   = Google_Reef.9933.0.0           # Fake comment
15fwupdate_tries         = 0                              #
16fw_tried               = B                              #
17fw_try_count           = 0                              #
18'''
19
20NON_UNI_LSB_RELEASE_OUTPUT = '''
21CHROMEOS_RELEASE_BOARD=reef
22'''
23
24UNI_LSB_RELEASE_OUTPUT = '''
25CHROMEOS_RELEASE_BOARD=coral
26CHROMEOS_RELEASE_UNIBUILD=1
27'''
28
29class 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
38class 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
53class 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
82class 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
107if __name__ == "__main__":
108    unittest.main()
109
110