Fix warning message when a container uses a non-json log driver

Signed-off-by: Daniel Nephin <dnephin@gmail.com>
This commit is contained in:
Daniel Nephin 2015-09-09 17:53:36 -04:00 committed by Daniel Nephin
commit 413b76e228
4 changed files with 84 additions and 54 deletions

View file

@ -1,20 +1,31 @@
from __future__ import absolute_import
from __future__ import unicode_literals
import os
import mock
import six
from compose.cli.log_printer import LogPrinter
from compose.cli.log_printer import wait_on_exit
from compose.container import Container
from tests import unittest
def build_mock_container(reader):
return mock.Mock(
spec=Container,
name='myapp_web_1',
name_without_project='web_1',
has_api_logs=True,
attach=reader,
wait=mock.Mock(return_value=0),
)
class LogPrinterTest(unittest.TestCase):
def get_default_output(self, monochrome=False):
def reader(*args, **kwargs):
yield b"hello\nworld"
container = MockContainer(reader)
container = build_mock_container(reader)
output = run_log_printer([container], monochrome=monochrome)
return output
@ -38,37 +49,39 @@ class LogPrinterTest(unittest.TestCase):
def reader(*args, **kwargs):
yield glyph.encode('utf-8') + b'\n'
container = MockContainer(reader)
container = build_mock_container(reader)
output = run_log_printer([container])
if six.PY2:
output = output.decode('utf-8')
self.assertIn(glyph, output)
def test_wait_on_exit(self):
exit_status = 3
mock_container = mock.Mock(
spec=Container,
name='cname',
wait=mock.Mock(return_value=exit_status))
expected = '{} exited with code {}\n'.format(mock_container.name, exit_status)
self.assertEqual(expected, wait_on_exit(mock_container))
def test_generator_with_no_logs(self):
mock_container = mock.Mock(
spec=Container,
has_api_logs=False,
log_driver='none',
name_without_project='web_1',
wait=mock.Mock(return_value=0))
output = run_log_printer([mock_container])
self.assertIn(
"WARNING: no logs are available with the 'none' log driver\n",
output
)
def run_log_printer(containers, monochrome=False):
r, w = os.pipe()
reader, writer = os.fdopen(r, 'r'), os.fdopen(w, 'w')
printer = LogPrinter(containers, output=writer, monochrome=monochrome)
printer.run()
writer.close()
return reader.read()
class MockContainer(object):
def __init__(self, reader):
self._reader = reader
@property
def name(self):
return 'myapp_web_1'
@property
def name_without_project(self):
return 'web_1'
def attach(self, *args, **kwargs):
return self._reader()
def wait(self, *args, **kwargs):
return 0
output = six.StringIO()
LogPrinter(containers, output=output, monochrome=monochrome).run()
return output.getvalue()