• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/python3
2#
3# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
7"""Unit tests for client/common_lib/cros/control_file_getter.py."""
8
9import unittest
10from unittest.mock import patch
11
12import common
13
14from autotest_lib.client.common_lib import error
15from autotest_lib.client.common_lib.cros import dev_server
16from autotest_lib.server.cros.dynamic_suite import control_file_getter
17
18
19class DevServerGetterTest(unittest.TestCase):
20    """Unit tests for control_file_getter.DevServerGetter.
21
22    @var _HOST: fake dev server host address.
23    """
24
25    _BUILD = 'fake/build'
26    _FILES = ['a/b/control', 'b/c/control']
27    _CONTENTS = 'Multi-line\nControl File Contents\n'
28    _403 = dev_server.DevServerException('HTTP 403 Forbidden!')
29
30    def setUp(self):
31        super(DevServerGetterTest, self).setUp()
32        patcher = patch.object(dev_server, 'ImageServer')
33        self.dev_server = patcher.start()
34        self.addCleanup(patcher.stop)
35
36        self.getter = control_file_getter.DevServerGetter(self._BUILD,
37                                                          self.dev_server)
38
39    def tearDown(self):
40        if self.dev_server.resolve.call_count > 0:
41            self.dev_server.resolve.assert_called_with(self._BUILD,
42                                                       None,
43                                                       ban_list=None)
44
45    def testListControlFiles(self):
46        """Should successfully list control files from the dev server."""
47        self.dev_server.list_control_files.return_value = self._FILES
48        self.assertEquals(self.getter.get_control_file_list(), self._FILES)
49        self.assertEquals(self.getter._files, self._FILES)
50        self.dev_server.list_control_files.assert_called_with(self._BUILD,
51                                                              suite_name='')
52
53    def testListControlFilesFail(self):
54        """Should fail to list control files from the dev server."""
55        self.dev_server.list_control_files.return_value = None
56
57        self.dev_server.list_control_files.side_effect = self._403
58        self.assertRaises(error.NoControlFileList,
59                          self.getter.get_control_file_list)
60        self.dev_server.list_control_files.assert_called_with(self._BUILD,
61                                                              suite_name='')
62
63    def testGetControlFile(self):
64        """Should successfully get a control file from the dev server."""
65        path = self._FILES[0]
66        self.dev_server.get_control_file.return_value = self._CONTENTS
67        self.assertEquals(self.getter.get_control_file_contents(path),
68                          self._CONTENTS)
69        self.dev_server.get_control_file.assert_called_with(self._BUILD, path)
70
71    def testGetSuiteInfo(self):
72        """
73        Should successfully list control files' path and contents from the
74        dev server.
75        """
76        file_contents = {f:self._CONTENTS for f in self._FILES}
77        self.dev_server.list_suite_controls.return_value = file_contents
78
79        suite_info = self.getter.get_suite_info()
80        for k in suite_info.keys():
81            self.assertEquals(suite_info[k], file_contents[k])
82        self.assertEquals(sorted(self.getter._files), sorted(self._FILES))
83        self.dev_server.list_suite_controls.assert_called_with(self._BUILD,
84                                                               suite_name='')
85
86    def testListSuiteControlisFail(self):
87        """
88        Should fail to list all control file's contents from the dev server.
89        """
90        self.dev_server.list_suite_controls.side_effect = self._403
91        self.assertRaises(error.SuiteControlFileException,
92                          self.getter.get_suite_info,
93                          '')
94        self.dev_server.list_suite_controls.assert_called_with(self._BUILD,
95                                                               suite_name='')
96
97    def testGetControlFileFail(self):
98        """Should fail to get a control file from the dev server."""
99        path = self._FILES[0]
100        self.dev_server.get_control_file.side_effect = self._403
101
102        self.assertRaises(error.ControlFileNotFound,
103                          self.getter.get_control_file_contents,
104                          path)
105        self.dev_server.get_control_file.assert_called_with(self._BUILD, path)
106
107    def testGetControlFileByNameCached(self):
108        """\
109        Should successfully get a cf by name from the dev server, using a cache.
110        """
111        name = 'one'
112        path = "file/%s/control" % name
113
114        self.getter._files = self._FILES + [path]
115        self.dev_server.get_control_file.return_value = self._CONTENTS
116        self.assertEquals(self.getter.get_control_file_contents_by_name(name),
117                          self._CONTENTS)
118        self.dev_server.get_control_file.assert_called_with(self._BUILD, path)
119
120    def testGetControlFileByName(self):
121        """\
122        Should successfully get a control file from the dev server by name.
123        """
124        name = 'one'
125        path = "file/%s/control" % name
126
127        files = self._FILES + [path]
128        self.dev_server.list_control_files.return_value = files
129        self.dev_server.get_control_file.return_value = self._CONTENTS
130        self.assertEquals(self.getter.get_control_file_contents_by_name(name),
131                          self._CONTENTS)
132        self.dev_server.list_control_files.assert_called_with(self._BUILD,
133                                                              suite_name='')
134        self.dev_server.get_control_file.assert_called_with(self._BUILD, path)
135
136    def testGetSuiteControlFileByName(self):
137        """\
138        Should successfully get a suite control file from the devserver by name.
139        """
140        name = 'control.bvt'
141        path = "file/" + name
142
143        files = self._FILES + [path]
144        self.dev_server.list_control_files.return_value = files
145        self.dev_server.get_control_file.return_value = self._CONTENTS
146        self.assertEquals(self.getter.get_control_file_contents_by_name(name),
147                          self._CONTENTS)
148        self.dev_server.list_control_files.assert_called_with(self._BUILD,
149                                                              suite_name='')
150        self.dev_server.get_control_file.assert_called_with(self._BUILD, path)
151
152    def testGetControlFileByNameFail(self):
153        """Should fail to get a control file from the dev server by name."""
154        name = 'one'
155
156        self.dev_server.list_control_files.return_value = self._FILES
157        self.assertRaises(error.ControlFileNotFound,
158                          self.getter.get_control_file_contents_by_name,
159                          name)
160
161
162if __name__ == '__main__':
163    unittest.main()
164