mirror of
				https://github.com/docker/compose.git
				synced 2025-10-31 03:03:49 +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]
 |