1"""Unit tests for saft_flashrom_util.py."""
2
3import mock
4import unittest
5
6from autotest_lib.client.common_lib import autotemp
7from autotest_lib.client.common_lib import error
8from autotest_lib.client.cros.faft.utils import (os_interface,
9                                                 saft_flashrom_util)
10
11
12class TestFlashromUtil(unittest.TestCase):
13    """Tests for saft_flashrom_util.flashrom_util()."""
14
15    def setUp(self):
16        self._tempdir = autotemp.tempdir(unique_id='saft_flashrom_util_test')
17        self.addCleanup(self._tempdir.clean)
18
19        self.os_if = os_interface.OSInterface(
20                self._tempdir.name, test_mode=True)
21        self.flashrom_util = saft_flashrom_util.flashrom_util(self.os_if)
22
23    @mock.patch('subprocess.Popen')
24    def testTargetIsBroken(self, mock_subproc_popen):
25        """check_target should raise error.CmdError if flashrom is broken"""
26
27        bad_flashrom = mock.Mock()
28        attrs = {
29                'communicate.return_value':
30                ('broken flashrom stdout', 'broken flashrom stderr')
31        }
32        bad_flashrom.configure_mock(**attrs)
33        bad_flashrom.returncode = 1
34
35        mock_subproc_popen.return_value = bad_flashrom
36        with self.assertRaises(error.CmdError):
37            self.flashrom_util.check_target()
38
39    @mock.patch('subprocess.Popen')
40    def testTargetIsNotBroken(self, mock_subproc_popen):
41        """check_target should return True if flashrom is working"""
42
43        good_flashrom = mock.Mock()
44        attrs = {
45                'communicate.return_value':
46                ('working flashrom stdout', 'working flashrom stderr')
47        }
48        good_flashrom.configure_mock(**attrs)
49        good_flashrom.returncode = 0
50
51        mock_subproc_popen.return_value = good_flashrom
52        self.assertTrue(self.flashrom_util.check_target())
53
54
55if __name__ == '__main__':
56    unittest.main()
57