mirror of
				https://github.com/docker/compose.git
				synced 2025-11-03 21:25:21 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			162 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			162 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
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'
 | 
						|
                }
 | 
						|
            ]
 | 
						|
        }
 | 
						|
        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',
 | 
						|
            'com.docker.network.windowsshim.hnsid': 'aac3fd4887daaec1e3b',
 | 
						|
        }
 | 
						|
        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 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]
 |