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:
parent
4641d40526
commit
413b76e228
4 changed files with 84 additions and 54 deletions
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue