Browse Source

Extract docker URL logic, use it in tests as well

Aanand Prasad 11 years ago
parent
commit
9ed6538693
4 changed files with 32 additions and 32 deletions
  1. 2 25
      fig/cli/command.py
  2. 27 0
      fig/cli/utils.py
  3. 1 2
      tests/project_test.py
  4. 2 5
      tests/testcases.py

+ 2 - 25
fig/cli/command.py

@@ -3,41 +3,18 @@ import logging
 import os
 import re
 import yaml
-import socket
 
 from ..project import Project
 from .docopt_command import DocoptCommand
 from .formatter import Formatter
-from .utils import cached_property
-from .errors import UserError
+from .utils import cached_property, docker_url
 
 log = logging.getLogger(__name__)
 
 class Command(DocoptCommand):
     @cached_property
     def client(self):
-        if os.environ.get('DOCKER_URL'):
-            return Client(os.environ['DOCKER_URL'])
-
-        socket_path = '/var/run/docker.sock'
-        tcp_host = '127.0.0.1'
-        tcp_port = 4243
-
-        if os.path.exists(socket_path):
-            return Client('unix://%s' % socket_path)
-
-        try:
-            s = socket.socket()
-            s.connect((tcp_host, tcp_port))
-            s.close()
-            return Client('http://%s:%s' % (tcp_host, tcp_port))
-        except:
-            pass
-
-        raise UserError("""
-        Couldn't find Docker daemon - tried %s and %s:%s.
-        If it's running elsewhere, specify a url with DOCKER_URL.
-        """ % (socket_path, tcp_host, tcp_port))
+        return Client(docker_url())
 
     @cached_property
     def project(self):

+ 27 - 0
fig/cli/utils.py

@@ -1,5 +1,7 @@
 import datetime
 import os
+import socket
+from .errors import UserError
 
 
 def cached_property(f):
@@ -74,3 +76,28 @@ def mkdir(path, permissions=0700):
     os.chmod(path, permissions)
 
     return path
+
+
+def docker_url():
+    if os.environ.get('DOCKER_URL'):
+        return os.environ['DOCKER_URL']
+
+    socket_path = '/var/run/docker.sock'
+    tcp_host = '127.0.0.1'
+    tcp_port = 4243
+
+    if os.path.exists(socket_path):
+        return 'unix://%s' % socket_path
+
+    try:
+        s = socket.socket()
+        s.connect((tcp_host, tcp_port))
+        s.close()
+        return 'http://%s:%s' % (tcp_host, tcp_port)
+    except:
+        pass
+
+    raise UserError("""
+    Couldn't find Docker daemon - tried %s and %s:%s.
+    If it's running elsewhere, specify a url with DOCKER_URL.
+    """ % (socket_path, tcp_host, tcp_port))

+ 1 - 2
tests/project_test.py

@@ -1,5 +1,4 @@
 from fig.project import Project
-from fig.service import Service
 from .testcases import DockerClientTestCase
 
 
@@ -57,7 +56,7 @@ class ProjectTest(DockerClientTestCase):
         self.assertEqual(len(unstarted), 2)
         self.assertEqual(unstarted[0][0], web)
         self.assertEqual(unstarted[1][0], db)
-        self.assertEqual(len(web.containers(stopped=True)), 2)
+        self.assertEqual(len(web.containers(stopped=True)), 1)
         self.assertEqual(len(db.containers(stopped=True)), 1)
 
     def test_up(self):

+ 2 - 5
tests/testcases.py

@@ -1,16 +1,13 @@
 from docker import Client
 from fig.service import Service
-import os
+from fig.cli.utils import docker_url
 from unittest import TestCase
 
 
 class DockerClientTestCase(TestCase):
     @classmethod
     def setUpClass(cls):
-        if os.environ.get('DOCKER_URL'):
-            cls.client = Client(os.environ['DOCKER_URL'])
-        else:
-            cls.client = Client()
+        cls.client = Client(docker_url())
         cls.client.pull('ubuntu')
 
     def setUp(self):