1"""Tests for base_sysinfo."""
2
3import mock
4import unittest
5
6import common
7from autotest_lib.client.common_lib import autotemp
8from autotest_lib.client.bin import base_sysinfo
9
10
11class LoggableTestException(Exception):
12    """An exception thrown by the loggable used for testing."""
13
14
15class BaseSysinfoTestCase(unittest.TestCase):
16    """TestCase for free functions in the base_sysinfo module."""
17
18    def setUp(self):
19        self._output_dir = autotemp.tempdir()
20        self.addCleanup(self._output_dir.clean)
21
22    def test_run_loggables_with_no_exception(self):
23        """Tests _run_loggables_ignoring_errors when no loggable throws"""
24        loggables = {
25                mock.create_autospec(base_sysinfo.loggable),
26                mock.create_autospec(base_sysinfo.loggable),
27        }
28        base_sysinfo._run_loggables_ignoring_errors(loggables, self._output_dir)
29        for log in loggables:
30            log.run.assert_called_once_with(self._output_dir)
31
32    def test_run_loggables_with_exception(self):
33        """Tests _run_loggables_ignoring_errors when one loggable throws"""
34        failing_loggable = mock.create_autospec(base_sysinfo.loggable)
35        failing_loggable.run.side_effect = LoggableTestException
36        loggables = {
37                mock.create_autospec(base_sysinfo.loggable),
38                failing_loggable,
39                mock.create_autospec(base_sysinfo.loggable),
40        }
41        base_sysinfo._run_loggables_ignoring_errors(loggables, self._output_dir)
42        for log in loggables:
43            log.run.assert_called_once_with(self._output_dir)
44
45
46if __name__ == '__main__':
47    unittest.main()
48