Add enum34 and use it to create a ConvergenceStrategy enum.
Signed-off-by: Daniel Nephin <dnephin@gmail.com>
This commit is contained in:
parent
d4372bc98f
commit
0484e22a84
11 changed files with 105 additions and 77 deletions
|
|
@ -223,7 +223,7 @@ class CLITestCase(DockerClientTestCase):
|
|||
self.assertTrue(config['AttachStdin'])
|
||||
|
||||
@mock.patch('dockerpty.start')
|
||||
def test_run_service_with_links(self, __):
|
||||
def test_run_service_with_links(self, _):
|
||||
self.command.base_dir = 'tests/fixtures/links-composefile'
|
||||
self.command.dispatch(['run', 'web', '/bin/true'], None)
|
||||
db = self.project.get_service('db')
|
||||
|
|
@ -232,14 +232,14 @@ class CLITestCase(DockerClientTestCase):
|
|||
self.assertEqual(len(console.containers()), 0)
|
||||
|
||||
@mock.patch('dockerpty.start')
|
||||
def test_run_with_no_deps(self, __):
|
||||
def test_run_with_no_deps(self, _):
|
||||
self.command.base_dir = 'tests/fixtures/links-composefile'
|
||||
self.command.dispatch(['run', '--no-deps', 'web', '/bin/true'], None)
|
||||
db = self.project.get_service('db')
|
||||
self.assertEqual(len(db.containers()), 0)
|
||||
|
||||
@mock.patch('dockerpty.start')
|
||||
def test_run_does_not_recreate_linked_containers(self, __):
|
||||
def test_run_does_not_recreate_linked_containers(self, _):
|
||||
self.command.base_dir = 'tests/fixtures/links-composefile'
|
||||
self.command.dispatch(['up', '-d', 'db'], None)
|
||||
db = self.project.get_service('db')
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ from compose import config
|
|||
from compose.const import LABEL_PROJECT
|
||||
from compose.container import Container
|
||||
from compose.project import Project
|
||||
from compose.service import ConvergenceStrategy
|
||||
|
||||
|
||||
def build_service_dicts(service_config):
|
||||
|
|
@ -224,7 +225,7 @@ class ProjectTest(DockerClientTestCase):
|
|||
old_db_id = project.containers()[0].id
|
||||
db_volume_path = project.containers()[0].get('Volumes./etc')
|
||||
|
||||
project.up(force_recreate=True)
|
||||
project.up(strategy=ConvergenceStrategy.always)
|
||||
self.assertEqual(len(project.containers()), 2)
|
||||
|
||||
db_container = [c for c in project.containers() if 'db' in c.name][0]
|
||||
|
|
@ -243,7 +244,7 @@ class ProjectTest(DockerClientTestCase):
|
|||
old_db_id = project.containers()[0].id
|
||||
db_volume_path = project.containers()[0].inspect()['Volumes']['/var/db']
|
||||
|
||||
project.up(allow_recreate=False)
|
||||
project.up(strategy=ConvergenceStrategy.never)
|
||||
self.assertEqual(len(project.containers()), 2)
|
||||
|
||||
db_container = [c for c in project.containers() if 'db' in c.name][0]
|
||||
|
|
@ -267,7 +268,7 @@ class ProjectTest(DockerClientTestCase):
|
|||
old_db_id = old_containers[0].id
|
||||
db_volume_path = old_containers[0].inspect()['Volumes']['/var/db']
|
||||
|
||||
project.up(allow_recreate=False)
|
||||
project.up(strategy=ConvergenceStrategy.never)
|
||||
|
||||
new_containers = project.containers(stopped=True)
|
||||
self.assertEqual(len(new_containers), 2)
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ from __future__ import unicode_literals
|
|||
from .. import mock
|
||||
from .testcases import DockerClientTestCase
|
||||
from compose.project import Project
|
||||
from compose.service import ConvergenceStrategy
|
||||
|
||||
|
||||
class ResilienceTest(DockerClientTestCase):
|
||||
|
|
@ -16,14 +17,14 @@ class ResilienceTest(DockerClientTestCase):
|
|||
self.host_path = container.get('Volumes')['/var/db']
|
||||
|
||||
def test_successful_recreate(self):
|
||||
self.project.up(force_recreate=True)
|
||||
self.project.up(strategy=ConvergenceStrategy.always)
|
||||
container = self.db.containers()[0]
|
||||
self.assertEqual(container.get('Volumes')['/var/db'], self.host_path)
|
||||
|
||||
def test_create_failure(self):
|
||||
with mock.patch('compose.service.Service.create_container', crash):
|
||||
with self.assertRaises(Crash):
|
||||
self.project.up(force_recreate=True)
|
||||
self.project.up(strategy=ConvergenceStrategy.always)
|
||||
|
||||
self.project.up()
|
||||
container = self.db.containers()[0]
|
||||
|
|
@ -32,7 +33,7 @@ class ResilienceTest(DockerClientTestCase):
|
|||
def test_start_failure(self):
|
||||
with mock.patch('compose.service.Service.start_container', crash):
|
||||
with self.assertRaises(Crash):
|
||||
self.project.up(force_recreate=True)
|
||||
self.project.up(strategy=ConvergenceStrategy.always)
|
||||
|
||||
self.project.up()
|
||||
container = self.db.containers()[0]
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ from .testcases import DockerClientTestCase
|
|||
from compose import config
|
||||
from compose.const import LABEL_CONFIG_HASH
|
||||
from compose.project import Project
|
||||
from compose.service import ConvergenceStrategy
|
||||
|
||||
|
||||
class ProjectTestCase(DockerClientTestCase):
|
||||
|
|
@ -151,7 +152,9 @@ class ProjectWithDependenciesTest(ProjectTestCase):
|
|||
old_containers = self.run_up(self.cfg)
|
||||
|
||||
self.cfg['db']['environment'] = {'NEW_VAR': '1'}
|
||||
new_containers = self.run_up(self.cfg, allow_recreate=False)
|
||||
new_containers = self.run_up(
|
||||
self.cfg,
|
||||
strategy=ConvergenceStrategy.never)
|
||||
|
||||
self.assertEqual(new_containers - old_containers, set())
|
||||
|
||||
|
|
@ -175,23 +178,11 @@ class ProjectWithDependenciesTest(ProjectTestCase):
|
|||
|
||||
|
||||
def converge(service,
|
||||
allow_recreate=True,
|
||||
force_recreate=False,
|
||||
strategy=ConvergenceStrategy.changed,
|
||||
do_build=True):
|
||||
"""
|
||||
If a container for this service doesn't exist, create and start one. If there are
|
||||
any, stop them, create+start new ones, and remove the old containers.
|
||||
"""
|
||||
plan = service.convergence_plan(
|
||||
allow_recreate=allow_recreate,
|
||||
force_recreate=force_recreate,
|
||||
)
|
||||
|
||||
return service.execute_convergence_plan(
|
||||
plan,
|
||||
do_build=do_build,
|
||||
timeout=1,
|
||||
)
|
||||
"""Create a converge plan from a strategy and execute the plan."""
|
||||
plan = service.convergence_plan(strategy)
|
||||
return service.execute_convergence_plan(plan, do_build=do_build, timeout=1)
|
||||
|
||||
|
||||
class ServiceStateTest(DockerClientTestCase):
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
from compose import container
|
||||
from compose.cli.errors import UserError
|
||||
from compose.cli.log_printer import LogPrinter
|
||||
from compose.cli.main import attach_to_logs
|
||||
from compose.cli.main import build_log_printer
|
||||
from compose.cli.main import convergence_strategy_from_opts
|
||||
from compose.project import Project
|
||||
from compose.service import ConvergenceStrategy
|
||||
from tests import mock
|
||||
from tests import unittest
|
||||
|
||||
|
|
@ -55,3 +58,32 @@ class CLIMainTestCase(unittest.TestCase):
|
|||
project.stop.assert_called_once_with(
|
||||
service_names=service_names,
|
||||
timeout=timeout)
|
||||
|
||||
|
||||
class ConvergeStrategyFromOptsTestCase(unittest.TestCase):
|
||||
|
||||
def test_invalid_opts(self):
|
||||
options = {'--force-recreate': True, '--no-recreate': True}
|
||||
with self.assertRaises(UserError):
|
||||
convergence_strategy_from_opts(options)
|
||||
|
||||
def test_always(self):
|
||||
options = {'--force-recreate': True, '--no-recreate': False}
|
||||
self.assertEqual(
|
||||
convergence_strategy_from_opts(options),
|
||||
ConvergenceStrategy.always
|
||||
)
|
||||
|
||||
def test_never(self):
|
||||
options = {'--force-recreate': False, '--no-recreate': True}
|
||||
self.assertEqual(
|
||||
convergence_strategy_from_opts(options),
|
||||
ConvergenceStrategy.never
|
||||
)
|
||||
|
||||
def test_changed(self):
|
||||
options = {'--force-recreate': False, '--no-recreate': False}
|
||||
self.assertEqual(
|
||||
convergence_strategy_from_opts(options),
|
||||
ConvergenceStrategy.changed
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue