From 9c665edbcc4828c84d5a1373bb72113a677dfc65 Mon Sep 17 00:00:00 2001 From: avladu Date: Thu, 2 Oct 2014 11:30:44 -0400 Subject: [PATCH] Fixed serial port logging Before writing on the serial port, the port must be open. Closes-Bug: #1376819 Change-Id: I630c6807f1c19070aa2981708a0d85f9a12e370a --- cloudbaseinit/tests/utils/test_log.py | 29 +++++++++++++++++++++++++++ cloudbaseinit/utils/log.py | 3 +++ 2 files changed, 32 insertions(+) diff --git a/cloudbaseinit/tests/utils/test_log.py b/cloudbaseinit/tests/utils/test_log.py index d5c03c1b..1c872305 100644 --- a/cloudbaseinit/tests/utils/test_log.py +++ b/cloudbaseinit/tests/utils/test_log.py @@ -16,6 +16,7 @@ import importlib import mock +import six import unittest from oslo.config import cfg @@ -26,6 +27,7 @@ CONF = cfg.CONF class SerialPortHandlerTests(unittest.TestCase): def setUp(self): self._serial = mock.MagicMock() + self._stream = mock.MagicMock() self._module_patcher = mock.patch.dict( 'sys.modules', {'serial': self._serial}) @@ -36,6 +38,8 @@ class SerialPortHandlerTests(unittest.TestCase): CONF.set_override('logging_serial_port_settings', "COM1,115200,N,8") self._serial_port_handler = self.log.SerialPortHandler() + self._unicode_stream = self._serial_port_handler._UnicodeToBytesStream( + self._stream) self._serial_port_handler._port = mock.MagicMock() def tearDown(self): @@ -79,3 +83,28 @@ class SerialPortHandlerTests(unittest.TestCase): mock_SerialPortHandler().setFormatter.assert_called_once_with( mock_ContextFormatter()) + + def _test_unicode_write(self, is_six_instance=False): + self._stream.isOpen.return_value = False + if is_six_instance: + fake_data = mock.MagicMock(spec=six.text_type) + fake_data.encode = mock.MagicMock() + else: + fake_data = mock.MagicMock() + + self._unicode_stream.write(fake_data) + + self._stream.isOpen.assert_called_once_with() + self._stream.open.assert_called_once_with() + if is_six_instance: + self._stream.write.assert_called_once_with( + fake_data.encode.return_value) + fake_data.encode.assert_called_once_with('utf-8') + else: + self._stream.write.assert_called_once_with(fake_data) + + def test_unicode_write(self): + self._test_unicode_write() + + def test_unicode_write_with_encode(self): + self._test_unicode_write(is_six_instance=True) diff --git a/cloudbaseinit/utils/log.py b/cloudbaseinit/utils/log.py index 214aa378..10cd2614 100644 --- a/cloudbaseinit/utils/log.py +++ b/cloudbaseinit/utils/log.py @@ -40,6 +40,9 @@ class SerialPortHandler(logging.StreamHandler): self._stream = stream def write(self, data): + if self._stream and not self._stream.isOpen(): + self._stream.open() + if isinstance(data, six.text_type): self._stream.write(data.encode("utf-8")) else: