Fix #1961 - docker-compose up should attach to all containers with no service names are specified, and add tests.

Signed-off-by: Daniel Nephin <dnephin@gmail.com>
This commit is contained in:
Daniel Nephin 2015-09-02 16:08:18 -04:00 committed by Daniel Nephin
parent b24ca75914
commit ac75d35927
3 changed files with 38 additions and 6 deletions

View File

@ -541,8 +541,11 @@ class TopLevelCommand(Command):
def build_log_printer(containers, service_names, monochrome): def build_log_printer(containers, service_names, monochrome):
if service_names:
containers = [c for c in containers if c.service in service_names]
return LogPrinter( return LogPrinter(
[c for c in containers if c.service in service_names], containers,
attach_params={"logs": True}, attach_params={"logs": True},
monochrome=monochrome) monochrome=monochrome)

View File

@ -4,6 +4,7 @@ import sys
import os import os
import shlex import shlex
import mock
from six import StringIO from six import StringIO
from mock import patch from mock import patch
@ -104,7 +105,7 @@ class CLITestCase(DockerClientTestCase):
output = mock_stdout.getvalue() output = mock_stdout.getvalue()
self.assertNotIn(cache_indicator, output) self.assertNotIn(cache_indicator, output)
def test_up(self): def test_up_detached(self):
self.command.dispatch(['up', '-d'], None) self.command.dispatch(['up', '-d'], None)
service = self.project.get_service('simple') service = self.project.get_service('simple')
another = self.project.get_service('another') another = self.project.get_service('another')
@ -112,10 +113,28 @@ class CLITestCase(DockerClientTestCase):
self.assertEqual(len(another.containers()), 1) self.assertEqual(len(another.containers()), 1)
# Ensure containers don't have stdin and stdout connected in -d mode # Ensure containers don't have stdin and stdout connected in -d mode
config = service.containers()[0].inspect()['Config'] container, = service.containers()
self.assertFalse(config['AttachStderr']) self.assertFalse(container.get('Config.AttachStderr'))
self.assertFalse(config['AttachStdout']) self.assertFalse(container.get('Config.AttachStdout'))
self.assertFalse(config['AttachStdin']) self.assertFalse(container.get('Config.AttachStdin'))
def test_up_attached(self):
with mock.patch(
'compose.cli.main.attach_to_logs',
autospec=True
) as mock_attach:
self.command.dispatch(['up'], None)
_, args, kwargs = mock_attach.mock_calls[0]
_project, log_printer, _names, _timeout = args
service = self.project.get_service('simple')
another = self.project.get_service('another')
self.assertEqual(len(service.containers()), 1)
self.assertEqual(len(another.containers()), 1)
self.assertEqual(
set(log_printer.containers),
set(self.project.containers())
)
def test_up_with_links(self): def test_up_with_links(self):
self.command.base_dir = 'tests/fixtures/links-composefile' self.command.base_dir = 'tests/fixtures/links-composefile'

View File

@ -31,6 +31,16 @@ class CLIMainTestCase(unittest.TestCase):
log_printer = build_log_printer(containers, service_names, True) log_printer = build_log_printer(containers, service_names, True)
self.assertEqual(log_printer.containers, containers[:3]) self.assertEqual(log_printer.containers, containers[:3])
def test_build_log_printer_all_services(self):
containers = [
mock_container('web', 1),
mock_container('db', 1),
mock_container('other', 1),
]
service_names = []
log_printer = build_log_printer(containers, service_names, True)
self.assertEqual(log_printer.containers, containers)
def test_attach_to_logs(self): def test_attach_to_logs(self):
project = mock.create_autospec(Project) project = mock.create_autospec(Project)
log_printer = mock.create_autospec(LogPrinter, containers=[]) log_printer = mock.create_autospec(LogPrinter, containers=[])