瀏覽代碼

Merge pull request #46 from orchardup/fix-port-syntax

Fix port syntax
Ben Firshman 11 年之前
父節點
當前提交
84667636a2
共有 2 個文件被更改,包括 11 次插入5 次删除
  1. 5 4
      fig/service.py
  2. 6 1
      tests/service_test.py

+ 5 - 4
fig/service.py

@@ -172,9 +172,10 @@ class Service(object):
                 port = str(port)
                 if ':' in port:
                     external_port, internal_port = port.split(':', 1)
-                    port_bindings[int(internal_port)] = int(external_port)
                 else:
-                    port_bindings[int(port)] = None
+                    external_port, internal_port = (None, port)
+
+                port_bindings[internal_port] = external_port
 
         volume_bindings = {}
 
@@ -225,8 +226,8 @@ class Service(object):
                 port = str(port)
                 if ':' in port:
                     port = port.split(':')[-1]
-                if '/' not in port:
-                    port = "%s/tcp" % port
+                if '/' in port:
+                    port = tuple(port.split('/'))
                 ports.append(port)
             container_options['ports'] = ports
 

+ 6 - 1
tests/service_test.py

@@ -184,9 +184,14 @@ class ServiceTest(DockerClientTestCase):
     def test_start_container_creates_ports(self):
         service = self.create_service('web', ports=[8000])
         container = service.start_container().inspect()
-        self.assertIn('8000/tcp', container['HostConfig']['PortBindings'])
+        self.assertEqual(container['HostConfig']['PortBindings'].keys(), ['8000/tcp'])
         self.assertNotEqual(container['HostConfig']['PortBindings']['8000/tcp'][0]['HostPort'], '8000')
 
+    def test_start_container_creates_port_with_explicit_protocol(self):
+        service = self.create_service('web', ports=['8000/udp'])
+        container = service.start_container().inspect()
+        self.assertEqual(container['HostConfig']['PortBindings'].keys(), ['8000/udp'])
+
     def test_start_container_creates_fixed_external_ports(self):
         service = self.create_service('web', ports=['8000:8000'])
         container = service.start_container().inspect()