summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJoffrey F <joffrey@docker.com>2018-01-31 12:29:26 -0800
committerJoffrey F <joffrey@docker.com>2018-01-31 12:42:11 -0800
commit5347c168d022836bd19f63c5527c59169ae22f53 (patch)
treea89da7f120f21332ab645995d97de70fc594d056 /tests
parent0750337f6a77bdfb46579184ac4950a212e5d048 (diff)
downloaddocker-py-1878-publishmode.tar.gz
Add support for publish mode for endpointspec ports1878-publishmode
Signed-off-by: Joffrey F <joffrey@docker.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/integration/api_service_test.py21
-rw-r--r--tests/unit/dockertypes_test.py75
2 files changed, 95 insertions, 1 deletions
diff --git a/tests/integration/api_service_test.py b/tests/integration/api_service_test.py
index 7620cb4..5cc3fc1 100644
--- a/tests/integration/api_service_test.py
+++ b/tests/integration/api_service_test.py
@@ -353,7 +353,6 @@ class ServiceTest(BaseAPIIntegrationTest):
task_tmpl, name=name, endpoint_spec=endpoint_spec
)
svc_info = self.client.inspect_service(svc_id)
- print(svc_info)
ports = svc_info['Spec']['EndpointSpec']['Ports']
for port in ports:
if port['PublishedPort'] == 12562:
@@ -370,6 +369,26 @@ class ServiceTest(BaseAPIIntegrationTest):
assert len(ports) == 3
+ @requires_api_version('1.32')
+ def test_create_service_with_endpoint_spec_host_publish_mode(self):
+ container_spec = docker.types.ContainerSpec(BUSYBOX, ['true'])
+ task_tmpl = docker.types.TaskTemplate(container_spec)
+ name = self.get_service_name()
+ endpoint_spec = docker.types.EndpointSpec(ports={
+ 12357: (1990, None, 'host'),
+ })
+ svc_id = self.client.create_service(
+ task_tmpl, name=name, endpoint_spec=endpoint_spec
+ )
+ svc_info = self.client.inspect_service(svc_id)
+ ports = svc_info['Spec']['EndpointSpec']['Ports']
+ assert len(ports) == 1
+ port = ports[0]
+ assert port['PublishedPort'] == 12357
+ assert port['TargetPort'] == 1990
+ assert port['Protocol'] == 'tcp'
+ assert port['PublishMode'] == 'host'
+
def test_create_service_with_env(self):
container_spec = docker.types.ContainerSpec(
BUSYBOX, ['true'], env={'DOCKER_PY_TEST': 1}
diff --git a/tests/unit/dockertypes_test.py b/tests/unit/dockertypes_test.py
index 93c1397..71dae7e 100644
--- a/tests/unit/dockertypes_test.py
+++ b/tests/unit/dockertypes_test.py
@@ -11,6 +11,7 @@ from docker.types import (
ContainerConfig, ContainerSpec, EndpointConfig, HostConfig, IPAMConfig,
IPAMPool, LogConfig, Mount, ServiceMode, Ulimit,
)
+from docker.types.services import convert_service_ports
try:
from unittest import mock
@@ -423,3 +424,77 @@ class MountTest(unittest.TestCase):
assert mount['Source'] == "C:/foo/bar"
assert mount['Target'] == "/baz"
assert mount['Type'] == 'bind'
+
+
+class ServicePortsTest(unittest.TestCase):
+ def test_convert_service_ports_simple(self):
+ ports = {8080: 80}
+ assert convert_service_ports(ports) == [{
+ 'Protocol': 'tcp',
+ 'PublishedPort': 8080,
+ 'TargetPort': 80,
+ }]
+
+ def test_convert_service_ports_with_protocol(self):
+ ports = {8080: (80, 'udp')}
+
+ assert convert_service_ports(ports) == [{
+ 'Protocol': 'udp',
+ 'PublishedPort': 8080,
+ 'TargetPort': 80,
+ }]
+
+ def test_convert_service_ports_with_protocol_and_mode(self):
+ ports = {8080: (80, 'udp', 'ingress')}
+
+ assert convert_service_ports(ports) == [{
+ 'Protocol': 'udp',
+ 'PublishedPort': 8080,
+ 'TargetPort': 80,
+ 'PublishMode': 'ingress',
+ }]
+
+ def test_convert_service_ports_invalid(self):
+ ports = {8080: ('way', 'too', 'many', 'items', 'here')}
+
+ with pytest.raises(ValueError):
+ convert_service_ports(ports)
+
+ def test_convert_service_ports_no_protocol_and_mode(self):
+ ports = {8080: (80, None, 'host')}
+
+ assert convert_service_ports(ports) == [{
+ 'Protocol': 'tcp',
+ 'PublishedPort': 8080,
+ 'TargetPort': 80,
+ 'PublishMode': 'host',
+ }]
+
+ def test_convert_service_ports_multiple(self):
+ ports = {
+ 8080: (80, None, 'host'),
+ 9999: 99,
+ 2375: (2375,)
+ }
+
+ converted_ports = convert_service_ports(ports)
+ assert {
+ 'Protocol': 'tcp',
+ 'PublishedPort': 8080,
+ 'TargetPort': 80,
+ 'PublishMode': 'host',
+ } in converted_ports
+
+ assert {
+ 'Protocol': 'tcp',
+ 'PublishedPort': 9999,
+ 'TargetPort': 99,
+ } in converted_ports
+
+ assert {
+ 'Protocol': 'tcp',
+ 'PublishedPort': 2375,
+ 'TargetPort': 2375,
+ } in converted_ports
+
+ assert len(converted_ports) == 3