| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- from __future__ import absolute_import
- from __future__ import unicode_literals
- import logging
- import docker
- import pytest
- from compose import container
- from compose.cli.errors import UserError
- from compose.cli.formatter import ConsoleWarningFormatter
- from compose.cli.main import convergence_strategy_from_opts
- from compose.cli.main import filter_containers_to_service_names
- from compose.cli.main import setup_console_handler
- from compose.cli.main import warn_for_swarm_mode
- from compose.service import ConvergenceStrategy
- from tests import mock
- def mock_container(service, number):
- return mock.create_autospec(
- container.Container,
- service=service,
- number=number,
- name_without_project='{0}_{1}'.format(service, number))
- @pytest.fixture
- def logging_handler():
- stream = mock.Mock()
- stream.isatty.return_value = True
- return logging.StreamHandler(stream=stream)
- class TestCLIMainTestCase(object):
- def test_filter_containers_to_service_names(self):
- containers = [
- mock_container('web', 1),
- mock_container('web', 2),
- mock_container('db', 1),
- mock_container('other', 1),
- mock_container('another', 1),
- ]
- service_names = ['web', 'db']
- actual = filter_containers_to_service_names(containers, service_names)
- assert actual == containers[:3]
- def test_filter_containers_to_service_names_all(self):
- containers = [
- mock_container('web', 1),
- mock_container('db', 1),
- mock_container('other', 1),
- ]
- service_names = []
- actual = filter_containers_to_service_names(containers, service_names)
- assert actual == containers
- def test_warning_in_swarm_mode(self):
- mock_client = mock.create_autospec(docker.APIClient)
- mock_client.info.return_value = {'Swarm': {'LocalNodeState': 'active'}}
- with mock.patch('compose.cli.main.log') as fake_log:
- warn_for_swarm_mode(mock_client)
- assert fake_log.warn.call_count == 1
- class TestSetupConsoleHandlerTestCase(object):
- def test_with_tty_verbose(self, logging_handler):
- setup_console_handler(logging_handler, True)
- assert type(logging_handler.formatter) == ConsoleWarningFormatter
- assert '%(name)s' in logging_handler.formatter._fmt
- assert '%(funcName)s' in logging_handler.formatter._fmt
- def test_with_tty_not_verbose(self, logging_handler):
- setup_console_handler(logging_handler, False)
- assert type(logging_handler.formatter) == ConsoleWarningFormatter
- assert '%(name)s' not in logging_handler.formatter._fmt
- assert '%(funcName)s' not in logging_handler.formatter._fmt
- def test_with_not_a_tty(self, logging_handler):
- logging_handler.stream.isatty.return_value = False
- setup_console_handler(logging_handler, False)
- assert type(logging_handler.formatter) == logging.Formatter
- class TestConvergeStrategyFromOptsTestCase(object):
- def test_invalid_opts(self):
- options = {'--force-recreate': True, '--no-recreate': True}
- with pytest.raises(UserError):
- convergence_strategy_from_opts(options)
- def test_always(self):
- options = {'--force-recreate': True, '--no-recreate': False}
- assert (
- convergence_strategy_from_opts(options) ==
- ConvergenceStrategy.always
- )
- def test_never(self):
- options = {'--force-recreate': False, '--no-recreate': True}
- assert (
- convergence_strategy_from_opts(options) ==
- ConvergenceStrategy.never
- )
- def test_changed(self):
- options = {'--force-recreate': False, '--no-recreate': False}
- assert (
- convergence_strategy_from_opts(options) ==
- ConvergenceStrategy.changed
- )
|