Resolves #447, fix volume logic for recreate container

Signed-off-by: Daniel Nephin <dnephin@gmail.com>
This commit is contained in:
Daniel Nephin 2014-12-06 17:51:49 -05:00
commit 7eb476e61d
4 changed files with 117 additions and 30 deletions

View file

@ -11,13 +11,15 @@ from requests import Response
from fig import Service
from fig.container import Container
from fig.service import (
ConfigError,
split_port,
build_port_bindings,
parse_volume_spec,
build_volume_binding,
APIError,
ConfigError,
build_port_bindings,
build_volume_binding,
get_container_data_volumes,
get_volume_bindings,
parse_repository_tag,
parse_volume_spec,
split_port,
)
@ -57,13 +59,6 @@ class ServiceTest(unittest.TestCase):
self.assertEqual(service._get_volumes_from(), [container_id])
def test_get_volumes_from_intermediate_container(self):
container_id = 'aabbccddee'
service = Service('test')
container = mock.Mock(id=container_id, spec=Container)
self.assertEqual(service._get_volumes_from(container), [container_id])
def test_get_volumes_from_service_container_exists(self):
container_ids = ['aabbccddee', '12345']
from_service = mock.create_autospec(Service)
@ -288,6 +283,50 @@ class ServiceVolumesTest(unittest.TestCase):
binding,
('/home/user', dict(bind='/home/user', ro=False)))
def test_get_container_data_volumes(self):
options = [
'/host/volume:/host/volume:ro',
'/new/volume',
'/existing/volume',
]
container = Container(None, {
'Volumes': {
'/host/volume': '/host/volume',
'/existing/volume': '/var/lib/docker/aaaaaaaa',
'/removed/volume': '/var/lib/docker/bbbbbbbb',
},
}, has_been_inspected=True)
expected = {
'/var/lib/docker/aaaaaaaa': {'bind': '/existing/volume', 'ro': False},
}
binds = get_container_data_volumes(container, options)
self.assertEqual(binds, expected)
def test_get_volume_bindings(self):
options = [
'/host/volume:/host/volume:ro',
'/host/rw/volume:/host/rw/volume',
'/new/volume',
'/existing/volume',
]
intermediate_container = Container(None, {
'Volumes': {'/existing/volume': '/var/lib/docker/aaaaaaaa'},
}, has_been_inspected=True)
expected = {
'/host/volume': {'bind': '/host/volume', 'ro': True},
'/host/rw/volume': {'bind': '/host/rw/volume', 'ro': False},
'/var/lib/docker/aaaaaaaa': {'bind': '/existing/volume', 'ro': False},
}
binds = get_volume_bindings(options, intermediate_container)
self.assertEqual(binds, expected)
class ServiceEnvironmentTest(unittest.TestCase):
def setUp(self):