"""Unit tests for flashrom_handler.py.""" import mock import unittest from autotest_lib.client.common_lib import autotemp from autotest_lib.client.cros.faft.utils import (os_interface, flashrom_handler) class TestFlashromHandler(unittest.TestCase): """Tests for flashrom_handler.FlashromHandler()""" def setUp(self): self._tempdir = autotemp.tempdir(unique_id='flashrom_handler_test') self.addCleanup(self._tempdir.clean) self.os_if = os_interface.OSInterface( self._tempdir.name, test_mode=True) self.flashrom_handler = flashrom_handler.FlashromHandler(self.os_if) self.good_flashrom = mock.Mock() attrs = { 'communicate.return_value': ('working flashrom stdout', 'working flashrom stderr') } self.good_flashrom.configure_mock(**attrs) self.good_flashrom.returncode = 0 self.bad_flashrom = mock.Mock() attrs = { 'communicate.return_value': ('broken flashrom stdout', 'broken flashrom stderr') } self.bad_flashrom.configure_mock(**attrs) self.bad_flashrom.returncode = 1 @mock.patch('subprocess.Popen') def testHandlerUnavailable(self, mock_subproc_popen): """Failing flashrom check should mark the handler unavailable""" mock_subproc_popen.return_value = self.bad_flashrom self.assertFalse(self.flashrom_handler.is_available()) @mock.patch('subprocess.Popen') def testHandlerUnavailableCached(self, mock_subproc_popen): """Status of flashrom handler should be cached, and not rechecked""" mock_subproc_popen.return_value = self.bad_flashrom self.assertFalse(self.flashrom_handler.is_available()) mock_subproc_popen.return_value = self.good_flashrom self.assertFalse(self.flashrom_handler.is_available()) mock_subproc_popen.assert_called_once() @mock.patch('subprocess.Popen') def testHandlerAvailable(self, mock_subproc_popen): """Successful flashrom check should mark the handler available""" mock_subproc_popen.return_value = self.good_flashrom self.assertTrue(self.flashrom_handler.is_available()) @mock.patch('subprocess.Popen') def testHandlerAvailableCached(self, mock_subproc_popen): """Status of flashrom handler should be cached, and not rechecked""" mock_subproc_popen.return_value = self.good_flashrom self.assertTrue(self.flashrom_handler.is_available()) mock_subproc_popen.return_value = self.bad_flashrom self.assertTrue(self.flashrom_handler.is_available()) mock_subproc_popen.assert_called_once() if __name__ == '__main__': unittest.main()