123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- from __future__ import absolute_import
- from __future__ import unicode_literals
- import pytest
- from .. import mock
- from .. import unittest
- from compose.network import check_remote_network_config
- from compose.network import Network
- from compose.network import NetworkConfigChangedError
- class NetworkTest(unittest.TestCase):
- def test_check_remote_network_config_success(self):
- options = {'com.docker.network.driver.foo': 'bar'}
- ipam_config = {
- 'driver': 'default',
- 'config': [
- {'subnet': '172.0.0.1/16', },
- {
- 'subnet': '156.0.0.1/25',
- 'gateway': '156.0.0.1',
- 'aux_addresses': ['11.0.0.1', '24.25.26.27'],
- 'ip_range': '156.0.0.1-254'
- }
- ],
- 'options': {
- 'iface': 'eth0',
- }
- }
- labels = {
- 'com.project.tests.istest': 'true',
- 'com.project.sound.track': 'way out of here',
- }
- remote_labels = labels.copy()
- remote_labels.update({
- 'com.docker.compose.project': 'compose_test',
- 'com.docker.compose.network': 'net1',
- })
- net = Network(
- None, 'compose_test', 'net1', 'bridge',
- options, enable_ipv6=True, ipam=ipam_config,
- labels=labels
- )
- check_remote_network_config(
- {
- 'Driver': 'bridge',
- 'Options': options,
- 'EnableIPv6': True,
- 'Internal': False,
- 'Attachable': True,
- 'IPAM': {
- 'Driver': 'default',
- 'Config': [{
- 'Subnet': '156.0.0.1/25',
- 'Gateway': '156.0.0.1',
- 'AuxiliaryAddresses': ['24.25.26.27', '11.0.0.1'],
- 'IPRange': '156.0.0.1-254'
- }, {
- 'Subnet': '172.0.0.1/16',
- 'Gateway': '172.0.0.1'
- }],
- 'Options': {
- 'iface': 'eth0',
- },
- },
- 'Labels': remote_labels
- },
- net
- )
- def test_check_remote_network_config_whitelist(self):
- options = {'com.docker.network.driver.foo': 'bar'}
- remote_options = {
- 'com.docker.network.driver.overlay.vxlanid_list': '257',
- 'com.docker.network.driver.foo': 'bar',
- 'com.docker.network.windowsshim.hnsid': 'aac3fd4887daaec1e3b',
- }
- net = Network(
- None, 'compose_test', 'net1', 'overlay',
- options
- )
- check_remote_network_config(
- {'Driver': 'overlay', 'Options': remote_options}, net
- )
- @mock.patch('compose.network.Network.true_name', lambda n: n.full_name)
- def test_check_remote_network_config_driver_mismatch(self):
- net = Network(None, 'compose_test', 'net1', 'overlay')
- with pytest.raises(NetworkConfigChangedError) as e:
- check_remote_network_config(
- {'Driver': 'bridge', 'Options': {}}, net
- )
- assert 'driver has changed' in str(e.value)
- @mock.patch('compose.network.Network.true_name', lambda n: n.full_name)
- def test_check_remote_network_config_options_mismatch(self):
- net = Network(None, 'compose_test', 'net1', 'overlay')
- with pytest.raises(NetworkConfigChangedError) as e:
- check_remote_network_config({'Driver': 'overlay', 'Options': {
- 'com.docker.network.driver.foo': 'baz'
- }}, net)
- assert 'option "com.docker.network.driver.foo" has changed' in str(e.value)
- def test_check_remote_network_config_null_remote(self):
- net = Network(None, 'compose_test', 'net1', 'overlay')
- check_remote_network_config(
- {'Driver': 'overlay', 'Options': None}, net
- )
- def test_check_remote_network_config_null_remote_ipam_options(self):
- ipam_config = {
- 'driver': 'default',
- 'config': [
- {'subnet': '172.0.0.1/16', },
- {
- 'subnet': '156.0.0.1/25',
- 'gateway': '156.0.0.1',
- 'aux_addresses': ['11.0.0.1', '24.25.26.27'],
- 'ip_range': '156.0.0.1-254'
- }
- ]
- }
- net = Network(
- None, 'compose_test', 'net1', 'bridge', ipam=ipam_config,
- )
- check_remote_network_config(
- {
- 'Driver': 'bridge',
- 'Attachable': True,
- 'IPAM': {
- 'Driver': 'default',
- 'Config': [{
- 'Subnet': '156.0.0.1/25',
- 'Gateway': '156.0.0.1',
- 'AuxiliaryAddresses': ['24.25.26.27', '11.0.0.1'],
- 'IPRange': '156.0.0.1-254'
- }, {
- 'Subnet': '172.0.0.1/16',
- 'Gateway': '172.0.0.1'
- }],
- 'Options': None
- },
- },
- net
- )
- @mock.patch('compose.network.Network.true_name', lambda n: n.full_name)
- def test_check_remote_network_labels_mismatch(self):
- net = Network(None, 'compose_test', 'net1', 'overlay', labels={
- 'com.project.touhou.character': 'sakuya.izayoi'
- })
- remote = {
- 'Driver': 'overlay',
- 'Options': None,
- 'Labels': {
- 'com.docker.compose.network': 'net1',
- 'com.docker.compose.project': 'compose_test',
- 'com.project.touhou.character': 'marisa.kirisame',
- }
- }
- with mock.patch('compose.network.log') as mock_log:
- check_remote_network_config(remote, net)
- mock_log.warn.assert_called_once_with(mock.ANY)
- _, args, kwargs = mock_log.warn.mock_calls[0]
- assert 'label "com.project.touhou.character" has changed' in args[0]
|