|
@@ -10,13 +10,14 @@ import pytest
|
|
|
|
|
|
from .. import mock
|
|
|
from .. import unittest
|
|
|
+from ..helpers import build_config
|
|
|
from compose.cli.command import get_project
|
|
|
from compose.cli.command import get_project_name
|
|
|
from compose.cli.docopt_command import NoSuchCommand
|
|
|
from compose.cli.errors import UserError
|
|
|
from compose.cli.main import TopLevelCommand
|
|
|
from compose.const import IS_WINDOWS_PLATFORM
|
|
|
-from compose.service import Service
|
|
|
+from compose.project import Project
|
|
|
|
|
|
|
|
|
class CLITestCase(unittest.TestCase):
|
|
@@ -66,17 +67,17 @@ class CLITestCase(unittest.TestCase):
|
|
|
def test_help(self):
|
|
|
command = TopLevelCommand()
|
|
|
with self.assertRaises(SystemExit):
|
|
|
- command.dispatch(['-h'], None)
|
|
|
+ command.dispatch(['-h'])
|
|
|
|
|
|
def test_command_help(self):
|
|
|
with self.assertRaises(SystemExit) as ctx:
|
|
|
- TopLevelCommand().dispatch(['help', 'up'], None)
|
|
|
+ TopLevelCommand().dispatch(['help', 'up'])
|
|
|
|
|
|
self.assertIn('Usage: up', str(ctx.exception))
|
|
|
|
|
|
def test_command_help_nonexistent(self):
|
|
|
with self.assertRaises(NoSuchCommand):
|
|
|
- TopLevelCommand().dispatch(['help', 'nonexistent'], None)
|
|
|
+ TopLevelCommand().dispatch(['help', 'nonexistent'])
|
|
|
|
|
|
@pytest.mark.xfail(IS_WINDOWS_PLATFORM, reason="requires dockerpty")
|
|
|
@mock.patch('compose.cli.main.RunOperation', autospec=True)
|
|
@@ -84,18 +85,19 @@ class CLITestCase(unittest.TestCase):
|
|
|
def test_run_interactive_passes_logs_false(self, mock_pseudo_terminal, mock_run_operation):
|
|
|
command = TopLevelCommand()
|
|
|
mock_client = mock.create_autospec(docker.Client)
|
|
|
- mock_project = mock.Mock(client=mock_client)
|
|
|
- mock_project.get_service.return_value = Service(
|
|
|
- 'service',
|
|
|
+ project = Project.from_config(
|
|
|
+ name='composetest',
|
|
|
client=mock_client,
|
|
|
- environment=['FOO=ONE', 'BAR=TWO'],
|
|
|
- image='someimage')
|
|
|
+ config_data=build_config({
|
|
|
+ 'service': {'image': 'busybox'}
|
|
|
+ }),
|
|
|
+ )
|
|
|
|
|
|
with pytest.raises(SystemExit):
|
|
|
- command.run(mock_project, {
|
|
|
+ command.run(project, {
|
|
|
'SERVICE': 'service',
|
|
|
'COMMAND': None,
|
|
|
- '-e': ['BAR=NEW', 'OTHER=bär'.encode('utf-8')],
|
|
|
+ '-e': [],
|
|
|
'--user': None,
|
|
|
'--no-deps': None,
|
|
|
'-d': False,
|
|
@@ -110,49 +112,22 @@ class CLITestCase(unittest.TestCase):
|
|
|
_, _, call_kwargs = mock_run_operation.mock_calls[0]
|
|
|
assert call_kwargs['logs'] is False
|
|
|
|
|
|
- @pytest.mark.xfail(IS_WINDOWS_PLATFORM, reason="requires dockerpty")
|
|
|
- @mock.patch('compose.cli.main.PseudoTerminal', autospec=True)
|
|
|
- def test_run_with_environment_merged_with_options_list(self, mock_pseudo_terminal):
|
|
|
- command = TopLevelCommand()
|
|
|
+ def test_run_service_with_restart_always(self):
|
|
|
mock_client = mock.create_autospec(docker.Client)
|
|
|
- mock_project = mock.Mock(client=mock_client)
|
|
|
- mock_project.get_service.return_value = Service(
|
|
|
- 'service',
|
|
|
- client=mock_client,
|
|
|
- environment=['FOO=ONE', 'BAR=TWO'],
|
|
|
- image='someimage')
|
|
|
-
|
|
|
- command.run(mock_project, {
|
|
|
- 'SERVICE': 'service',
|
|
|
- 'COMMAND': None,
|
|
|
- '-e': ['BAR=NEW', 'OTHER=bär'.encode('utf-8')],
|
|
|
- '--user': None,
|
|
|
- '--no-deps': None,
|
|
|
- '-d': True,
|
|
|
- '-T': None,
|
|
|
- '--entrypoint': None,
|
|
|
- '--service-ports': None,
|
|
|
- '--publish': [],
|
|
|
- '--rm': None,
|
|
|
- '--name': None,
|
|
|
- })
|
|
|
|
|
|
- _, _, call_kwargs = mock_client.create_container.mock_calls[0]
|
|
|
- assert (
|
|
|
- sorted(call_kwargs['environment']) ==
|
|
|
- sorted(['FOO=ONE', 'BAR=NEW', 'OTHER=bär'])
|
|
|
+ project = Project.from_config(
|
|
|
+ name='composetest',
|
|
|
+ client=mock_client,
|
|
|
+ config_data=build_config({
|
|
|
+ 'service': {
|
|
|
+ 'image': 'busybox',
|
|
|
+ 'restart': 'always',
|
|
|
+ }
|
|
|
+ }),
|
|
|
)
|
|
|
|
|
|
- def test_run_service_with_restart_always(self):
|
|
|
command = TopLevelCommand()
|
|
|
- mock_client = mock.create_autospec(docker.Client)
|
|
|
- mock_project = mock.Mock(client=mock_client)
|
|
|
- mock_project.get_service.return_value = Service(
|
|
|
- 'service',
|
|
|
- client=mock_client,
|
|
|
- restart={'Name': 'always', 'MaximumRetryCount': 0},
|
|
|
- image='someimage')
|
|
|
- command.run(mock_project, {
|
|
|
+ command.run(project, {
|
|
|
'SERVICE': 'service',
|
|
|
'COMMAND': None,
|
|
|
'-e': [],
|
|
@@ -173,14 +148,7 @@ class CLITestCase(unittest.TestCase):
|
|
|
)
|
|
|
|
|
|
command = TopLevelCommand()
|
|
|
- mock_client = mock.create_autospec(docker.Client)
|
|
|
- mock_project = mock.Mock(client=mock_client)
|
|
|
- mock_project.get_service.return_value = Service(
|
|
|
- 'service',
|
|
|
- client=mock_client,
|
|
|
- restart='always',
|
|
|
- image='someimage')
|
|
|
- command.run(mock_project, {
|
|
|
+ command.run(project, {
|
|
|
'SERVICE': 'service',
|
|
|
'COMMAND': None,
|
|
|
'-e': [],
|
|
@@ -201,17 +169,16 @@ class CLITestCase(unittest.TestCase):
|
|
|
|
|
|
def test_command_manula_and_service_ports_together(self):
|
|
|
command = TopLevelCommand()
|
|
|
- mock_client = mock.create_autospec(docker.Client)
|
|
|
- mock_project = mock.Mock(client=mock_client)
|
|
|
- mock_project.get_service.return_value = Service(
|
|
|
- 'service',
|
|
|
- client=mock_client,
|
|
|
- restart='always',
|
|
|
- image='someimage',
|
|
|
+ project = Project.from_config(
|
|
|
+ name='composetest',
|
|
|
+ client=None,
|
|
|
+ config_data=build_config({
|
|
|
+ 'service': {'image': 'busybox'},
|
|
|
+ }),
|
|
|
)
|
|
|
|
|
|
with self.assertRaises(UserError):
|
|
|
- command.run(mock_project, {
|
|
|
+ command.run(project, {
|
|
|
'SERVICE': 'service',
|
|
|
'COMMAND': None,
|
|
|
'-e': [],
|