Merge pull request #1642 from aanand/fix-1573
Fix bug where duplicate container is leftover after 'up' fails
(cherry picked from commit f42fd6a3ad)
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
This commit is contained in:
parent
c8295d36cc
commit
c31e25af72
4 changed files with 62 additions and 13 deletions
|
|
@ -8,25 +8,36 @@ from .testcases import DockerClientTestCase
|
|||
|
||||
|
||||
class ResilienceTest(DockerClientTestCase):
|
||||
def test_recreate_fails(self):
|
||||
db = self.create_service('db', volumes=['/var/db'], command='top')
|
||||
project = Project('composetest', [db], self.client)
|
||||
def setUp(self):
|
||||
self.db = self.create_service('db', volumes=['/var/db'], command='top')
|
||||
self.project = Project('composetest', [self.db], self.client)
|
||||
|
||||
container = db.create_container()
|
||||
db.start_container(container)
|
||||
host_path = container.get('Volumes')['/var/db']
|
||||
container = self.db.create_container()
|
||||
self.db.start_container(container)
|
||||
self.host_path = container.get('Volumes')['/var/db']
|
||||
|
||||
project.up()
|
||||
container = db.containers()[0]
|
||||
self.assertEqual(container.get('Volumes')['/var/db'], host_path)
|
||||
def test_successful_recreate(self):
|
||||
self.project.up()
|
||||
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):
|
||||
project.up()
|
||||
self.project.up()
|
||||
|
||||
project.up()
|
||||
container = db.containers()[0]
|
||||
self.assertEqual(container.get('Volumes')['/var/db'], host_path)
|
||||
self.project.up()
|
||||
container = self.db.containers()[0]
|
||||
self.assertEqual(container.get('Volumes')['/var/db'], self.host_path)
|
||||
|
||||
def test_start_failure(self):
|
||||
with mock.patch('compose.service.Service.start_container', crash):
|
||||
with self.assertRaises(Crash):
|
||||
self.project.up()
|
||||
|
||||
self.project.up()
|
||||
container = self.db.containers()[0]
|
||||
self.assertEqual(container.get('Volumes')['/var/db'], self.host_path)
|
||||
|
||||
|
||||
class Crash(Exception):
|
||||
|
|
|
|||
|
|
@ -705,3 +705,18 @@ class ServiceTest(DockerClientTestCase):
|
|||
|
||||
self.assertEqual(1, len(device_config))
|
||||
self.assertDictEqual(device_dict, device_config[0])
|
||||
|
||||
def test_duplicate_containers(self):
|
||||
service = self.create_service('web')
|
||||
|
||||
options = service._get_container_create_options({}, 1)
|
||||
original = Container.create(service.client, **options)
|
||||
|
||||
self.assertEqual(set(service.containers(stopped=True)), set([original]))
|
||||
self.assertEqual(set(service.duplicate_containers()), set())
|
||||
|
||||
options['name'] = 'temporary_container_name'
|
||||
duplicate = Container.create(service.client, **options)
|
||||
|
||||
self.assertEqual(set(service.containers(stopped=True)), set([original, duplicate]))
|
||||
self.assertEqual(set(service.duplicate_containers()), set([duplicate]))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue