mirror of https://github.com/docker/compose.git
Add configs tests
Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
parent
70b2e64c1b
commit
bf3b62e2ff
|
@ -78,7 +78,9 @@ def test_to_bundle():
|
||||||
services=services,
|
services=services,
|
||||||
volumes={'special': {}},
|
volumes={'special': {}},
|
||||||
networks={'extra': {}},
|
networks={'extra': {}},
|
||||||
secrets={})
|
secrets={},
|
||||||
|
configs={}
|
||||||
|
)
|
||||||
|
|
||||||
with mock.patch('compose.bundle.log.warn', autospec=True) as mock_log:
|
with mock.patch('compose.bundle.log.warn', autospec=True) as mock_log:
|
||||||
output = bundle.to_bundle(config, image_digests)
|
output = bundle.to_bundle(config, image_digests)
|
||||||
|
|
|
@ -1982,6 +1982,38 @@ class ConfigTest(unittest.TestCase):
|
||||||
actual = config.merge_service_dicts(base, override, V3_1)
|
actual = config.merge_service_dicts(base, override, V3_1)
|
||||||
assert actual['secrets'] == override['secrets']
|
assert actual['secrets'] == override['secrets']
|
||||||
|
|
||||||
|
def test_merge_different_configs(self):
|
||||||
|
base = {
|
||||||
|
'image': 'busybox',
|
||||||
|
'configs': [
|
||||||
|
{'source': 'src.txt'}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
override = {'configs': ['other-src.txt']}
|
||||||
|
|
||||||
|
actual = config.merge_service_dicts(base, override, V3_3)
|
||||||
|
assert secret_sort(actual['configs']) == secret_sort([
|
||||||
|
{'source': 'src.txt'},
|
||||||
|
{'source': 'other-src.txt'}
|
||||||
|
])
|
||||||
|
|
||||||
|
def test_merge_configs_override(self):
|
||||||
|
base = {
|
||||||
|
'image': 'busybox',
|
||||||
|
'configs': ['src.txt'],
|
||||||
|
}
|
||||||
|
override = {
|
||||||
|
'configs': [
|
||||||
|
{
|
||||||
|
'source': 'src.txt',
|
||||||
|
'target': 'data.txt',
|
||||||
|
'mode': 0o400
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
actual = config.merge_service_dicts(base, override, V3_3)
|
||||||
|
assert actual['configs'] == override['configs']
|
||||||
|
|
||||||
def test_merge_deploy(self):
|
def test_merge_deploy(self):
|
||||||
base = {
|
base = {
|
||||||
'image': 'busybox',
|
'image': 'busybox',
|
||||||
|
@ -2214,6 +2246,91 @@ class ConfigTest(unittest.TestCase):
|
||||||
]
|
]
|
||||||
assert service_sort(service_dicts) == service_sort(expected)
|
assert service_sort(service_dicts) == service_sort(expected)
|
||||||
|
|
||||||
|
def test_load_configs(self):
|
||||||
|
base_file = config.ConfigFile(
|
||||||
|
'base.yaml',
|
||||||
|
{
|
||||||
|
'version': '3.3',
|
||||||
|
'services': {
|
||||||
|
'web': {
|
||||||
|
'image': 'example/web',
|
||||||
|
'configs': [
|
||||||
|
'one',
|
||||||
|
{
|
||||||
|
'source': 'source',
|
||||||
|
'target': 'target',
|
||||||
|
'uid': '100',
|
||||||
|
'gid': '200',
|
||||||
|
'mode': 0o777,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'configs': {
|
||||||
|
'one': {'file': 'secret.txt'},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
details = config.ConfigDetails('.', [base_file])
|
||||||
|
service_dicts = config.load(details).services
|
||||||
|
expected = [
|
||||||
|
{
|
||||||
|
'name': 'web',
|
||||||
|
'image': 'example/web',
|
||||||
|
'configs': [
|
||||||
|
types.ServiceConfig('one', None, None, None, None),
|
||||||
|
types.ServiceConfig('source', 'target', '100', '200', 0o777),
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
assert service_sort(service_dicts) == service_sort(expected)
|
||||||
|
|
||||||
|
def test_load_configs_multi_file(self):
|
||||||
|
base_file = config.ConfigFile(
|
||||||
|
'base.yaml',
|
||||||
|
{
|
||||||
|
'version': '3.3',
|
||||||
|
'services': {
|
||||||
|
'web': {
|
||||||
|
'image': 'example/web',
|
||||||
|
'configs': ['one'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'configs': {
|
||||||
|
'one': {'file': 'secret.txt'},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
override_file = config.ConfigFile(
|
||||||
|
'base.yaml',
|
||||||
|
{
|
||||||
|
'version': '3.3',
|
||||||
|
'services': {
|
||||||
|
'web': {
|
||||||
|
'configs': [
|
||||||
|
{
|
||||||
|
'source': 'source',
|
||||||
|
'target': 'target',
|
||||||
|
'uid': '100',
|
||||||
|
'gid': '200',
|
||||||
|
'mode': 0o777,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
details = config.ConfigDetails('.', [base_file, override_file])
|
||||||
|
service_dicts = config.load(details).services
|
||||||
|
expected = [
|
||||||
|
{
|
||||||
|
'name': 'web',
|
||||||
|
'image': 'example/web',
|
||||||
|
'configs': [
|
||||||
|
types.ServiceConfig('one', None, None, None, None),
|
||||||
|
types.ServiceConfig('source', 'target', '100', '200', 0o777),
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
assert service_sort(service_dicts) == service_sort(expected)
|
||||||
|
|
||||||
|
|
||||||
class NetworkModeTest(unittest.TestCase):
|
class NetworkModeTest(unittest.TestCase):
|
||||||
|
|
||||||
|
@ -2533,6 +2650,24 @@ class InterpolationTest(unittest.TestCase):
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@mock.patch.dict(os.environ)
|
||||||
|
def test_interpolation_configs_section(self):
|
||||||
|
os.environ['FOO'] = 'baz.bar'
|
||||||
|
config_dict = config.load(build_config_details({
|
||||||
|
'version': '3.3',
|
||||||
|
'configs': {
|
||||||
|
'configdata': {
|
||||||
|
'external': {'name': '$FOO'}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
assert config_dict.configs == {
|
||||||
|
'configdata': {
|
||||||
|
'external': {'name': 'baz.bar'},
|
||||||
|
'external_name': 'baz.bar'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class VolumeConfigTest(unittest.TestCase):
|
class VolumeConfigTest(unittest.TestCase):
|
||||||
|
|
||||||
|
@ -3964,7 +4099,38 @@ class SerializeTest(unittest.TestCase):
|
||||||
'image': 'alpine',
|
'image': 'alpine',
|
||||||
'name': 'web'
|
'name': 'web'
|
||||||
}
|
}
|
||||||
], volumes={}, networks={}, secrets={})
|
], volumes={}, networks={}, secrets={}, configs={})
|
||||||
|
|
||||||
serialized_config = yaml.load(serialize_config(config_dict))
|
serialized_config = yaml.load(serialize_config(config_dict))
|
||||||
assert '8080:80/tcp' in serialized_config['services']['web']['ports']
|
assert '8080:80/tcp' in serialized_config['services']['web']['ports']
|
||||||
|
|
||||||
|
def test_serialize_configs(self):
|
||||||
|
service_dict = {
|
||||||
|
'image': 'example/web',
|
||||||
|
'configs': [
|
||||||
|
{'source': 'one'},
|
||||||
|
{
|
||||||
|
'source': 'source',
|
||||||
|
'target': 'target',
|
||||||
|
'uid': '100',
|
||||||
|
'gid': '200',
|
||||||
|
'mode': 0o777,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
configs_dict = {
|
||||||
|
'one': {'file': '/one.txt'},
|
||||||
|
'source': {'file': '/source.pem'},
|
||||||
|
'two': {'external': True},
|
||||||
|
}
|
||||||
|
config_dict = config.load(build_config_details({
|
||||||
|
'version': '3.3',
|
||||||
|
'services': {'web': service_dict},
|
||||||
|
'configs': configs_dict
|
||||||
|
}))
|
||||||
|
|
||||||
|
serialized_config = yaml.load(serialize_config(config_dict))
|
||||||
|
serialized_service = serialized_config['services']['web']
|
||||||
|
assert secret_sort(serialized_service['configs']) == secret_sort(service_dict['configs'])
|
||||||
|
assert 'configs' in serialized_config
|
||||||
|
assert serialized_config['configs']['two'] == configs_dict['two']
|
||||||
|
|
|
@ -37,6 +37,7 @@ class ProjectTest(unittest.TestCase):
|
||||||
networks=None,
|
networks=None,
|
||||||
volumes=None,
|
volumes=None,
|
||||||
secrets=None,
|
secrets=None,
|
||||||
|
configs=None,
|
||||||
)
|
)
|
||||||
project = Project.from_config(
|
project = Project.from_config(
|
||||||
name='composetest',
|
name='composetest',
|
||||||
|
@ -66,6 +67,7 @@ class ProjectTest(unittest.TestCase):
|
||||||
networks=None,
|
networks=None,
|
||||||
volumes=None,
|
volumes=None,
|
||||||
secrets=None,
|
secrets=None,
|
||||||
|
configs=None,
|
||||||
)
|
)
|
||||||
project = Project.from_config('composetest', config, None)
|
project = Project.from_config('composetest', config, None)
|
||||||
self.assertEqual(len(project.services), 2)
|
self.assertEqual(len(project.services), 2)
|
||||||
|
@ -173,6 +175,7 @@ class ProjectTest(unittest.TestCase):
|
||||||
networks=None,
|
networks=None,
|
||||||
volumes=None,
|
volumes=None,
|
||||||
secrets=None,
|
secrets=None,
|
||||||
|
configs=None,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
assert project.get_service('test')._get_volumes_from() == [container_id + ":rw"]
|
assert project.get_service('test')._get_volumes_from() == [container_id + ":rw"]
|
||||||
|
@ -206,6 +209,7 @@ class ProjectTest(unittest.TestCase):
|
||||||
networks=None,
|
networks=None,
|
||||||
volumes=None,
|
volumes=None,
|
||||||
secrets=None,
|
secrets=None,
|
||||||
|
configs=None,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
assert project.get_service('test')._get_volumes_from() == [container_name + ":rw"]
|
assert project.get_service('test')._get_volumes_from() == [container_name + ":rw"]
|
||||||
|
@ -232,6 +236,7 @@ class ProjectTest(unittest.TestCase):
|
||||||
networks=None,
|
networks=None,
|
||||||
volumes=None,
|
volumes=None,
|
||||||
secrets=None,
|
secrets=None,
|
||||||
|
configs=None,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
with mock.patch.object(Service, 'containers') as mock_return:
|
with mock.patch.object(Service, 'containers') as mock_return:
|
||||||
|
@ -366,6 +371,7 @@ class ProjectTest(unittest.TestCase):
|
||||||
networks=None,
|
networks=None,
|
||||||
volumes=None,
|
volumes=None,
|
||||||
secrets=None,
|
secrets=None,
|
||||||
|
configs=None,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
service = project.get_service('test')
|
service = project.get_service('test')
|
||||||
|
@ -391,6 +397,7 @@ class ProjectTest(unittest.TestCase):
|
||||||
networks=None,
|
networks=None,
|
||||||
volumes=None,
|
volumes=None,
|
||||||
secrets=None,
|
secrets=None,
|
||||||
|
configs=None,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
service = project.get_service('test')
|
service = project.get_service('test')
|
||||||
|
@ -425,6 +432,7 @@ class ProjectTest(unittest.TestCase):
|
||||||
networks=None,
|
networks=None,
|
||||||
volumes=None,
|
volumes=None,
|
||||||
secrets=None,
|
secrets=None,
|
||||||
|
configs=None,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -446,6 +454,7 @@ class ProjectTest(unittest.TestCase):
|
||||||
networks=None,
|
networks=None,
|
||||||
volumes=None,
|
volumes=None,
|
||||||
secrets=None,
|
secrets=None,
|
||||||
|
configs=None,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -467,6 +476,7 @@ class ProjectTest(unittest.TestCase):
|
||||||
networks={'custom': {}},
|
networks={'custom': {}},
|
||||||
volumes=None,
|
volumes=None,
|
||||||
secrets=None,
|
secrets=None,
|
||||||
|
configs=None,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -498,6 +508,7 @@ class ProjectTest(unittest.TestCase):
|
||||||
networks=None,
|
networks=None,
|
||||||
volumes=None,
|
volumes=None,
|
||||||
secrets=None,
|
secrets=None,
|
||||||
|
configs=None,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
self.assertEqual([c.id for c in project.containers()], ['1'])
|
self.assertEqual([c.id for c in project.containers()], ['1'])
|
||||||
|
@ -515,6 +526,7 @@ class ProjectTest(unittest.TestCase):
|
||||||
networks={'default': {}},
|
networks={'default': {}},
|
||||||
volumes={'data': {}},
|
volumes={'data': {}},
|
||||||
secrets=None,
|
secrets=None,
|
||||||
|
configs=None,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
self.mock_client.remove_network.side_effect = NotFound(None, None, 'oops')
|
self.mock_client.remove_network.side_effect = NotFound(None, None, 'oops')
|
||||||
|
|
Loading…
Reference in New Issue