mirror of https://github.com/docker/compose.git
176 lines
6.2 KiB
Python
176 lines
6.2 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'
|
|
}
|
|
],
|
|
'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.warning.assert_called_once_with(mock.ANY)
|
|
_, args, kwargs = mock_log.warning.mock_calls[0]
|
|
assert 'label "com.project.touhou.character" has changed' in args[0]
|
|
|
|
def test_remote_config_labels_none(self):
|
|
remote = {'Labels': None}
|
|
local = Network(None, 'test_project', 'test_network')
|
|
check_remote_network_config(remote, local)
|