Enable use of Docker networking with the --x-networking flag

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
This commit is contained in:
Aanand Prasad 2015-10-07 16:10:08 +01:00 committed by Daniel Nephin
commit d5f5eb1924
14 changed files with 240 additions and 24 deletions

View file

@ -185,6 +185,49 @@ class CLITestCase(DockerClientTestCase):
set(self.project.containers())
)
def test_up_without_networking(self):
self.require_engine_version("1.9")
self.command.base_dir = 'tests/fixtures/links-composefile'
self.command.dispatch(['up', '-d'], None)
networks = [n for n in self.client.networks(names=[self.project.name])]
self.assertEqual(len(networks), 0)
for service in self.project.get_services():
containers = service.containers()
self.assertEqual(len(containers), 1)
self.assertNotEqual(containers[0].get('Config.Hostname'), service.name)
web_container = self.project.get_service('web').containers()[0]
self.assertTrue(web_container.get('HostConfig.Links'))
def test_up_with_networking(self):
self.require_engine_version("1.9")
self.command.base_dir = 'tests/fixtures/links-composefile'
self.command.dispatch(['--x-networking', 'up', '-d'], None)
services = self.project.get_services()
networks = [n for n in self.client.networks(names=[self.project.name])]
for n in networks:
self.addCleanup(self.client.remove_network, n['id'])
self.assertEqual(len(networks), 1)
self.assertEqual(networks[0]['driver'], 'bridge')
network = self.client.inspect_network(networks[0]['id'])
self.assertEqual(len(network['containers']), len(services))
for service in services:
containers = service.containers()
self.assertEqual(len(containers), 1)
self.assertIn(containers[0].id, network['containers'])
self.assertEqual(containers[0].get('Config.Hostname'), service.name)
web_container = self.project.get_service('web').containers()[0]
self.assertFalse(web_container.get('HostConfig.Links'))
def test_up_with_links(self):
self.command.base_dir = 'tests/fixtures/links-composefile'
self.command.dispatch(['up', '-d', 'web'], None)

View file

@ -2,6 +2,8 @@ from __future__ import absolute_import
from __future__ import unicode_literals
from docker import errors
from docker.utils import version_lt
from pytest import skip
from .. import unittest
from compose.cli.docker_client import docker_client
@ -73,3 +75,12 @@ class DockerClientTestCase(unittest.TestCase):
kwargs.setdefault('rm', True)
build_output = self.client.build(*args, **kwargs)
stream_output(build_output, open('/dev/null', 'w'))
def require_engine_version(self, minimum):
# Drop '-dev' or '-rcN' suffix
engine = self.client.version()['Version'].split('-', 1)[0]
if version_lt(engine, minimum):
skip(
"Engine version is too low ({} < {})"
.format(engine, minimum)
)

View file

@ -203,6 +203,26 @@ class ServiceTest(unittest.TestCase):
self.assertEqual(opts['hostname'], 'name.sub', 'hostname')
self.assertEqual(opts['domainname'], 'domain.tld', 'domainname')
def test_no_default_hostname_when_not_using_networking(self):
service = Service(
'foo',
image='foo',
use_networking=False,
client=self.mock_client,
)
opts = service._get_container_create_options({'image': 'foo'}, 1)
self.assertIsNone(opts.get('hostname'))
def test_hostname_defaults_to_service_name_when_using_networking(self):
service = Service(
'foo',
image='foo',
use_networking=True,
client=self.mock_client,
)
opts = service._get_container_create_options({'image': 'foo'}, 1)
self.assertEqual(opts['hostname'], 'foo')
def test_get_container_create_options_with_name_option(self):
service = Service(
'foo',