| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 | from __future__ import absolute_importfrom __future__ import unicode_literalsimport pytestfrom .. import unittestfrom compose.network import check_remote_network_configfrom compose.network import Networkfrom compose.network import NetworkConfigChangedErrorclass 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'                }            ]        }        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'                    }],                },                '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'        }        net = Network(            None, 'compose_test', 'net1', 'overlay',            options        )        check_remote_network_config(            {'Driver': 'overlay', 'Options': remote_options}, net        )    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)    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        )    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 pytest.raises(NetworkConfigChangedError) as e:            check_remote_network_config(remote, net)        assert 'label "com.project.touhou.character" has changed' in str(e.value)
 |