1#!/usr/bin/python3 2"""Unit tests for flashrom_handler.py.""" 3 4import unittest 5from unittest import mock 6 7from autotest_lib.client.common_lib import autotemp 8from autotest_lib.client.cros.faft.utils import (os_interface, 9 flashrom_handler) 10 11 12class TestFlashromHandler(unittest.TestCase): 13 """Tests for flashrom_handler.FlashromHandler()""" 14 15 def setUp(self): 16 self._tempdir = autotemp.tempdir(unique_id='flashrom_handler_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_handler = flashrom_handler.FlashromHandler(self.os_if) 22 23 self.good_flashrom = mock.Mock() 24 attrs = { 25 'communicate.return_value': 26 (b'working flashrom stdout', b'working flashrom stderr') 27 } 28 self.good_flashrom.configure_mock(**attrs) 29 self.good_flashrom.returncode = 0 30 31 self.bad_flashrom = mock.Mock() 32 attrs = { 33 'communicate.return_value': 34 (b'broken flashrom stdout', b'broken flashrom stderr') 35 } 36 self.bad_flashrom.configure_mock(**attrs) 37 self.bad_flashrom.returncode = 1 38 39 @mock.patch('subprocess.Popen') 40 def testHandlerUnavailable(self, mock_subproc_popen): 41 """Failing flashrom check should mark the handler unavailable""" 42 43 mock_subproc_popen.return_value = self.bad_flashrom 44 self.assertFalse(self.flashrom_handler.is_available()) 45 46 @mock.patch('subprocess.Popen') 47 def testHandlerUnavailableCached(self, mock_subproc_popen): 48 """Status of flashrom handler should be cached, and not rechecked""" 49 50 mock_subproc_popen.return_value = self.bad_flashrom 51 self.assertFalse(self.flashrom_handler.is_available()) 52 53 mock_subproc_popen.return_value = self.good_flashrom 54 self.assertFalse(self.flashrom_handler.is_available()) 55 56 mock_subproc_popen.assert_called_once() 57 58 @mock.patch('subprocess.Popen') 59 def testHandlerAvailable(self, mock_subproc_popen): 60 """Successful flashrom check should mark the handler available""" 61 62 mock_subproc_popen.return_value = self.good_flashrom 63 self.assertTrue(self.flashrom_handler.is_available()) 64 65 @mock.patch('subprocess.Popen') 66 def testHandlerAvailableCached(self, mock_subproc_popen): 67 """Status of flashrom handler should be cached, and not rechecked""" 68 69 mock_subproc_popen.return_value = self.good_flashrom 70 self.assertTrue(self.flashrom_handler.is_available()) 71 72 mock_subproc_popen.return_value = self.bad_flashrom 73 self.assertTrue(self.flashrom_handler.is_available()) 74 75 mock_subproc_popen.assert_called_once() 76 77if __name__ == '__main__': 78 unittest.main() 79