mirror of https://github.com/docker/docker-py.git
Allow for configurable timeout on all client requests
Signed-off-by: Maxime Petazzoni <max@signalfuse.com>
This commit is contained in:
parent
1345da7972
commit
a451119e4a
|
@ -8,7 +8,8 @@ An API client for docker written in Python
|
||||||
API
|
API
|
||||||
===
|
===
|
||||||
|
|
||||||
`docker.Client(base_url='unix://var/run/docker.sock', version="1.4")`
|
`docker.Client(base_url='unix://var/run/docker.sock', version="1.4",
|
||||||
|
timeout=60)`
|
||||||
Client class. `base_url` refers to the protocol+hostname+port where the docker
|
Client class. `base_url` refers to the protocol+hostname+port where the docker
|
||||||
server is hosted. Version is the version of the API the client will use.
|
server is hosted. Version is the version of the API the client will use.
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@ import docker.utils as utils
|
||||||
if not six.PY3:
|
if not six.PY3:
|
||||||
import websocket
|
import websocket
|
||||||
|
|
||||||
|
DEFAULT_TIMEOUT_SECONDS = 60
|
||||||
|
|
||||||
class APIError(requests.exceptions.HTTPError):
|
class APIError(requests.exceptions.HTTPError):
|
||||||
def __init__(self, message, response, explanation=None):
|
def __init__(self, message, response, explanation=None):
|
||||||
|
@ -61,13 +62,17 @@ class APIError(requests.exceptions.HTTPError):
|
||||||
|
|
||||||
|
|
||||||
class Client(requests.Session):
|
class Client(requests.Session):
|
||||||
def __init__(self, base_url="unix://var/run/docker.sock", version="1.4"):
|
|
||||||
|
def __init__(self, base_url="unix://var/run/docker.sock", version="1.4",
|
||||||
|
timeout=DEFAULT_TIMEOUT_SECONDS):
|
||||||
super(Client, self).__init__()
|
super(Client, self).__init__()
|
||||||
if base_url.startswith('unix:///'):
|
if base_url.startswith('unix:///'):
|
||||||
base_url = base_url.replace('unix:/', 'unix:')
|
base_url = base_url.replace('unix:/', 'unix:')
|
||||||
self.mount('unix://', unixconn.UnixAdapter(base_url))
|
|
||||||
self.base_url = base_url
|
self.base_url = base_url
|
||||||
self._version = version
|
self._version = version
|
||||||
|
self._timeout = timeout
|
||||||
|
|
||||||
|
self.mount('unix://', unixconn.UnixAdapter(base_url, timeout))
|
||||||
try:
|
try:
|
||||||
self._cfg = auth.load_config()
|
self._cfg = auth.load_config()
|
||||||
except Exception:
|
except Exception:
|
||||||
|
@ -143,7 +148,8 @@ class Client(requests.Session):
|
||||||
if 'headers' not in kwargs:
|
if 'headers' not in kwargs:
|
||||||
kwargs['headers'] = {}
|
kwargs['headers'] = {}
|
||||||
kwargs['headers']['Content-Type'] = 'application/json'
|
kwargs['headers']['Content-Type'] = 'application/json'
|
||||||
return self.post(url, json.dumps(data2), **kwargs)
|
return self.post(url, json.dumps(data2),
|
||||||
|
timeout=self._timeout, **kwargs)
|
||||||
|
|
||||||
def attach_socket(self, container, params=None, ws=False):
|
def attach_socket(self, container, params=None, ws=False):
|
||||||
if ws:
|
if ws:
|
||||||
|
@ -153,7 +159,7 @@ class Client(requests.Session):
|
||||||
container = container.get('Id')
|
container = container.get('Id')
|
||||||
u = self._url("/containers/{0}/attach".format(container))
|
u = self._url("/containers/{0}/attach".format(container))
|
||||||
res = self.post(u, None, params=self._attach_params(params),
|
res = self.post(u, None, params=self._attach_params(params),
|
||||||
stream=True)
|
stream=True, timeout=self._timeout)
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
# hijack the underlying socket from requests, icky
|
# hijack the underlying socket from requests, icky
|
||||||
# but for some reason requests.iter_contents and ilk
|
# but for some reason requests.iter_contents and ilk
|
||||||
|
@ -215,7 +221,8 @@ class Client(requests.Session):
|
||||||
if context is not None:
|
if context is not None:
|
||||||
headers = {'Content-Type': 'application/tar'}
|
headers = {'Content-Type': 'application/tar'}
|
||||||
res = self._result(self.post(u, context, params=params,
|
res = self._result(self.post(u, context, params=params,
|
||||||
headers=headers, stream=True))
|
headers=headers, stream=True,
|
||||||
|
timeout=self._timeout))
|
||||||
if context is not None:
|
if context is not None:
|
||||||
context.close()
|
context.close()
|
||||||
srch = r'Successfully built ([0-9a-f]+)'
|
srch = r'Successfully built ([0-9a-f]+)'
|
||||||
|
@ -246,7 +253,8 @@ class Client(requests.Session):
|
||||||
'before': before
|
'before': before
|
||||||
}
|
}
|
||||||
u = self._url("/containers/ps")
|
u = self._url("/containers/ps")
|
||||||
res = self._result(self.get(u, params=params), True)
|
res = self._result(self.get(u, params=params, timeout=self._timeout),
|
||||||
|
True)
|
||||||
if quiet:
|
if quiet:
|
||||||
return [{'Id': x['Id']} for x in res]
|
return [{'Id': x['Id']} for x in res]
|
||||||
return res
|
return res
|
||||||
|
@ -284,30 +292,33 @@ class Client(requests.Session):
|
||||||
if isinstance(container, dict):
|
if isinstance(container, dict):
|
||||||
container = container.get('Id')
|
container = container.get('Id')
|
||||||
return self._result(self.get(self._url("/containers/{0}/changes".
|
return self._result(self.get(self._url("/containers/{0}/changes".
|
||||||
format(container))), True)
|
format(container)), timeout=self._timeout), True)
|
||||||
|
|
||||||
def export(self, container):
|
def export(self, container):
|
||||||
if isinstance(container, dict):
|
if isinstance(container, dict):
|
||||||
container = container.get('Id')
|
container = container.get('Id')
|
||||||
res = self.get(self._url("/containers/{0}/export".format(container)),
|
res = self.get(self._url("/containers/{0}/export".format(container)),
|
||||||
stream=True)
|
stream=True, timeout=self._timeout)
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
return res.raw
|
return res.raw
|
||||||
|
|
||||||
def history(self, image):
|
def history(self, image):
|
||||||
res = self.get(self._url("/images/{0}/history".format(image)))
|
res = self.get(self._url("/images/{0}/history".format(image)),
|
||||||
|
timeout=self._timeout)
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
return self._result(res)
|
return self._result(res)
|
||||||
|
|
||||||
def images(self, name=None, quiet=False, all=False, viz=False):
|
def images(self, name=None, quiet=False, all=False, viz=False):
|
||||||
if viz:
|
if viz:
|
||||||
return self._result(self.get(self._url("images/viz")))
|
return self._result(self.get(self._url("images/viz"),
|
||||||
|
timeout=self._timeout))
|
||||||
params = {
|
params = {
|
||||||
'filter': name,
|
'filter': name,
|
||||||
'only_ids': 1 if quiet else 0,
|
'only_ids': 1 if quiet else 0,
|
||||||
'all': 1 if all else 0,
|
'all': 1 if all else 0,
|
||||||
}
|
}
|
||||||
res = self._result(self.get(self._url("/images/json"), params=params),
|
res = self._result(self.get(self._url("/images/json"), params=params,
|
||||||
|
timeout=self._timeout),
|
||||||
True)
|
True)
|
||||||
if quiet:
|
if quiet:
|
||||||
return [x['Id'] for x in res]
|
return [x['Id'] for x in res]
|
||||||
|
@ -331,12 +342,16 @@ class Client(requests.Session):
|
||||||
data = None
|
data = None
|
||||||
if isinstance(src, six.string_types):
|
if isinstance(src, six.string_types):
|
||||||
params['fromSrc'] = src
|
params['fromSrc'] = src
|
||||||
return self._result(self.post(u, data, params=params))
|
return self._result(self.post(u, data, params=params,
|
||||||
|
timeout=self._timeout))
|
||||||
|
|
||||||
return self._result(self.post(u, src, params=params))
|
return self._result(self.post(u, src, params=params,
|
||||||
|
timeout=self._timeout))
|
||||||
|
|
||||||
def info(self):
|
def info(self):
|
||||||
return self._result(self.get(self._url("/info")), True)
|
return self._result(self.get(self._url("/info"),
|
||||||
|
timeout=self._timeout),
|
||||||
|
True)
|
||||||
|
|
||||||
def insert(self, image, url, path):
|
def insert(self, image, url, path):
|
||||||
api_url = self._url("/images/" + image + "/insert")
|
api_url = self._url("/images/" + image + "/insert")
|
||||||
|
@ -344,25 +359,26 @@ class Client(requests.Session):
|
||||||
'url': url,
|
'url': url,
|
||||||
'path': path
|
'path': path
|
||||||
}
|
}
|
||||||
return self._result(self.post(api_url, None, params=params))
|
return self._result(self.post(api_url, None, params=params,
|
||||||
|
timeout=self._timeout))
|
||||||
|
|
||||||
def inspect_container(self, container):
|
def inspect_container(self, container):
|
||||||
if isinstance(container, dict):
|
if isinstance(container, dict):
|
||||||
container = container.get('Id')
|
container = container.get('Id')
|
||||||
return self._result(self.get(
|
return self._result(self.get(self._url("/containers/{0}/json".format(container)),
|
||||||
self._url("/containers/{0}/json".format(container))
|
timeout=self._timeout),
|
||||||
), True)
|
True)
|
||||||
|
|
||||||
def inspect_image(self, image_id):
|
def inspect_image(self, image_id):
|
||||||
return self._result(self.get(
|
return self._result(self.get(self._url("/images/{0}/json".format(image_id)),
|
||||||
self._url("/images/{0}/json".format(image_id))
|
timeout=self._timeout),
|
||||||
), True)
|
True)
|
||||||
|
|
||||||
def kill(self, container):
|
def kill(self, container):
|
||||||
if isinstance(container, dict):
|
if isinstance(container, dict):
|
||||||
container = container.get('Id')
|
container = container.get('Id')
|
||||||
url = self._url("/containers/{0}/kill".format(container))
|
url = self._url("/containers/{0}/kill".format(container))
|
||||||
res = self.post(url, None)
|
res = self.post(url, None, timeout=self._timeout)
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
|
|
||||||
def login(self, username, password=None, email=None, registry=None):
|
def login(self, username, password=None, email=None, registry=None):
|
||||||
|
@ -393,12 +409,14 @@ class Client(requests.Session):
|
||||||
'stderr': 1
|
'stderr': 1
|
||||||
}
|
}
|
||||||
u = self._url("/containers/{0}/attach".format(container))
|
u = self._url("/containers/{0}/attach".format(container))
|
||||||
return self._result(self.post(u, None, params=params))
|
return self._result(self.post(u, None, params=params,
|
||||||
|
timeout=self._timeout))
|
||||||
|
|
||||||
def port(self, container, private_port):
|
def port(self, container, private_port):
|
||||||
if isinstance(container, dict):
|
if isinstance(container, dict):
|
||||||
container = container.get('Id')
|
container = container.get('Id')
|
||||||
res = self.get(self._url("/containers/{0}/json".format(container)))
|
res = self.get(self._url("/containers/{0}/json".format(container)),
|
||||||
|
timeout=self._timeout)
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
json_ = res.json()
|
json_ = res.json()
|
||||||
s_port = str(private_port)
|
s_port = str(private_port)
|
||||||
|
@ -430,7 +448,8 @@ class Client(requests.Session):
|
||||||
if authcfg:
|
if authcfg:
|
||||||
headers['X-Registry-Auth'] = auth.encode_header(authcfg)
|
headers['X-Registry-Auth'] = auth.encode_header(authcfg)
|
||||||
u = self._url("/images/create")
|
u = self._url("/images/create")
|
||||||
return self._result(self.post(u, params=params, headers=headers))
|
return self._result(self.post(u, params=params, headers=headers,
|
||||||
|
timeout=self._timeout))
|
||||||
|
|
||||||
def push(self, repository):
|
def push(self, repository):
|
||||||
registry, repo_name = auth.resolve_repository_name(repository)
|
registry, repo_name = auth.resolve_repository_name(repository)
|
||||||
|
@ -451,11 +470,12 @@ class Client(requests.Session):
|
||||||
if isinstance(container, dict):
|
if isinstance(container, dict):
|
||||||
container = container.get('Id')
|
container = container.get('Id')
|
||||||
params = {'v': v}
|
params = {'v': v}
|
||||||
res = self.delete(self._url("/containers/" + container), params=params)
|
res = self.delete(self._url("/containers/" + container), params=params,
|
||||||
|
timeout=self._timeout)
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
|
|
||||||
def remove_image(self, image):
|
def remove_image(self, image):
|
||||||
res = self.delete(self._url("/images/" + image))
|
res = self.delete(self._url("/images/" + image), timeout=self._timeout)
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
|
|
||||||
def restart(self, container, timeout=10):
|
def restart(self, container, timeout=10):
|
||||||
|
@ -463,12 +483,14 @@ class Client(requests.Session):
|
||||||
container = container.get('Id')
|
container = container.get('Id')
|
||||||
params = {'t': timeout}
|
params = {'t': timeout}
|
||||||
url = self._url("/containers/{0}/restart".format(container))
|
url = self._url("/containers/{0}/restart".format(container))
|
||||||
res = self.post(url, None, params=params)
|
res = self.post(url, None, params=params, timeout=self._timeout)
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
|
|
||||||
def search(self, term):
|
def search(self, term):
|
||||||
return self._result(self.get(self._url("/images/search"),
|
return self._result(self.get(self._url("/images/search"),
|
||||||
params={'term': term}), True)
|
params={'term': term},
|
||||||
|
timeout=self._timeout),
|
||||||
|
True)
|
||||||
|
|
||||||
def start(self, container, binds=None, port_bindings=None, lxc_conf=None):
|
def start(self, container, binds=None, port_bindings=None, lxc_conf=None):
|
||||||
if isinstance(container, dict):
|
if isinstance(container, dict):
|
||||||
|
@ -501,7 +523,7 @@ class Client(requests.Session):
|
||||||
container = container.get('Id')
|
container = container.get('Id')
|
||||||
params = {'t': timeout}
|
params = {'t': timeout}
|
||||||
url = self._url("/containers/{0}/stop".format(container))
|
url = self._url("/containers/{0}/stop".format(container))
|
||||||
res = self.post(url, None, params=params)
|
res = self.post(url, None, params=params, timeout=self._timeout)
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
|
|
||||||
def tag(self, image, repository, tag=None, force=False):
|
def tag(self, image, repository, tag=None, force=False):
|
||||||
|
@ -511,16 +533,18 @@ class Client(requests.Session):
|
||||||
'force': 1 if force else 0
|
'force': 1 if force else 0
|
||||||
}
|
}
|
||||||
url = self._url("/images/{0}/tag".format(image))
|
url = self._url("/images/{0}/tag".format(image))
|
||||||
res = self.post(url, None, params=params)
|
res = self.post(url, None, params=params, timeout=self._timeout)
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
return res.status_code == 201
|
return res.status_code == 201
|
||||||
|
|
||||||
def top(self, container):
|
def top(self, container):
|
||||||
u = self._url("/containers/{0}/top".format(container))
|
u = self._url("/containers/{0}/top".format(container))
|
||||||
return self._result(self.get(u), True)
|
return self._result(self.get(u, timeout=self._timeout), True)
|
||||||
|
|
||||||
def version(self):
|
def version(self):
|
||||||
return self._result(self.get(self._url("/version")), True)
|
return self._result(self.get(self._url("/version"),
|
||||||
|
timeout=self._timeout),
|
||||||
|
True)
|
||||||
|
|
||||||
def wait(self, container):
|
def wait(self, container):
|
||||||
if isinstance(container, dict):
|
if isinstance(container, dict):
|
||||||
|
|
|
@ -25,15 +25,16 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
import urllib3.connectionpool as connectionpool
|
import urllib3.connectionpool as connectionpool
|
||||||
|
|
||||||
|
|
||||||
class UnixHTTPConnection(httplib.HTTPConnection, object):
|
class UnixHTTPConnection(httplib.HTTPConnection, object):
|
||||||
def __init__(self, base_url, unix_socket):
|
def __init__(self, base_url, unix_socket, timeout=60):
|
||||||
httplib.HTTPConnection.__init__(self, 'localhost')
|
httplib.HTTPConnection.__init__(self, 'localhost', timeout=timeout)
|
||||||
self.base_url = base_url
|
self.base_url = base_url
|
||||||
self.unix_socket = unix_socket
|
self.unix_socket = unix_socket
|
||||||
|
self.timeout = timeout
|
||||||
|
|
||||||
def connect(self):
|
def connect(self):
|
||||||
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||||
|
sock.settimeout(self.timeout)
|
||||||
sock.connect(self.base_url.replace("unix:/", ""))
|
sock.connect(self.base_url.replace("unix:/", ""))
|
||||||
self.sock = sock
|
self.sock = sock
|
||||||
|
|
||||||
|
@ -47,19 +48,22 @@ class UnixHTTPConnection(httplib.HTTPConnection, object):
|
||||||
|
|
||||||
|
|
||||||
class UnixHTTPConnectionPool(connectionpool.HTTPConnectionPool):
|
class UnixHTTPConnectionPool(connectionpool.HTTPConnectionPool):
|
||||||
def __init__(self, base_url, socket_path):
|
def __init__(self, base_url, socket_path, timeout=60):
|
||||||
self.socket_path = socket_path
|
connectionpool.HTTPConnectionPool.__init__(self, 'localhost',
|
||||||
|
timeout=timeout)
|
||||||
self.base_url = base_url
|
self.base_url = base_url
|
||||||
super(UnixHTTPConnectionPool, self).__init__(self, 'localhost')
|
self.socket_path = socket_path
|
||||||
|
self.timeout = timeout
|
||||||
|
|
||||||
def _new_conn(self):
|
def _new_conn(self):
|
||||||
return UnixHTTPConnection(self.base_url, self.socket_path)
|
return UnixHTTPConnection(self.base_url, self.socket_path, self.timeout)
|
||||||
|
|
||||||
|
|
||||||
class UnixAdapter(requests.adapters.HTTPAdapter):
|
class UnixAdapter(requests.adapters.HTTPAdapter):
|
||||||
def __init__(self, base_url):
|
def __init__(self, base_url, timeout=60):
|
||||||
self.base_url = base_url
|
self.base_url = base_url
|
||||||
|
self.timeout = timeout
|
||||||
super(UnixAdapter, self).__init__()
|
super(UnixAdapter, self).__init__()
|
||||||
|
|
||||||
def get_connection(self, socket_path, proxies=None):
|
def get_connection(self, socket_path, proxies=None):
|
||||||
return UnixHTTPConnectionPool(self.base_url, socket_path)
|
return UnixHTTPConnectionPool(self.base_url, socket_path, self.timeout)
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
|
import time
|
||||||
import base64
|
import base64
|
||||||
import io
|
import io
|
||||||
import os
|
import os
|
||||||
|
@ -73,9 +74,9 @@ class TestSearch(BaseTestCase):
|
||||||
def runTest(self):
|
def runTest(self):
|
||||||
res = self.client.search('busybox')
|
res = self.client.search('busybox')
|
||||||
self.assertTrue(len(res) >= 1)
|
self.assertTrue(len(res) >= 1)
|
||||||
base_img = [x for x in res if x['Name'] == 'busybox']
|
base_img = [x for x in res if x['name'] == 'busybox']
|
||||||
self.assertEqual(len(base_img), 1)
|
self.assertEqual(len(base_img), 1)
|
||||||
self.assertIn('Description', base_img[0])
|
self.assertIn('description', base_img[0])
|
||||||
|
|
||||||
###################
|
###################
|
||||||
## LISTING TESTS ##
|
## LISTING TESTS ##
|
||||||
|
@ -165,7 +166,10 @@ class TestCreateContainerPrivileged(BaseTestCase):
|
||||||
res = self.client.create_container('busybox', 'true', privileged=True)
|
res = self.client.create_container('busybox', 'true', privileged=True)
|
||||||
inspect = self.client.inspect_container(res['Id'])
|
inspect = self.client.inspect_container(res['Id'])
|
||||||
self.assertIn('Config', inspect)
|
self.assertIn('Config', inspect)
|
||||||
self.assertEqual(inspect['Config']['Privileged'], True)
|
# Since Nov 2013, the Privileged flag is no longer part of the
|
||||||
|
# container's config exposed via the API (safety concerns?).
|
||||||
|
#
|
||||||
|
# self.assertEqual(inspect['Config']['Privileged'], True)
|
||||||
|
|
||||||
|
|
||||||
class TestCreateContainerWithName(BaseTestCase):
|
class TestCreateContainerWithName(BaseTestCase):
|
||||||
|
@ -602,5 +606,23 @@ class TestLoadConfig(BaseTestCase):
|
||||||
self.assertEqual(cfg['Email'], 'sakuya@scarlet.net')
|
self.assertEqual(cfg['Email'], 'sakuya@scarlet.net')
|
||||||
self.assertEqual(cfg.get('Auth'), None)
|
self.assertEqual(cfg.get('Auth'), None)
|
||||||
|
|
||||||
|
|
||||||
|
class TestConnectionTimeout(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.timeout = 0.5
|
||||||
|
self.client = docker.client.Client(base_url='http://192.168.10.2:4243',
|
||||||
|
timeout=self.timeout)
|
||||||
|
|
||||||
|
def runTest(self):
|
||||||
|
start = time.time()
|
||||||
|
res = None
|
||||||
|
# This call isn't supposed to complete, and it should fail fast.
|
||||||
|
try: res = self.client.inspect_container('id')
|
||||||
|
except: pass
|
||||||
|
end = time.time()
|
||||||
|
self.assertTrue(res is None)
|
||||||
|
self.assertTrue(end - start < 2 * self.timeout)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -76,7 +76,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
self.fail('Command should not raise exception: {0}'.format(e))
|
self.fail('Command should not raise exception: {0}'.format(e))
|
||||||
|
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/version'
|
'unix://var/run/docker.sock/v1.4/version',
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_info(self):
|
def test_info(self):
|
||||||
|
@ -85,7 +86,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.fail('Command should not raise exception: {0}'.format(e))
|
self.fail('Command should not raise exception: {0}'.format(e))
|
||||||
|
|
||||||
fake_request.assert_called_with('unix://var/run/docker.sock/v1.4/info')
|
fake_request.assert_called_with('unix://var/run/docker.sock/v1.4/info',
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS)
|
||||||
|
|
||||||
def test_search(self):
|
def test_search(self):
|
||||||
try:
|
try:
|
||||||
|
@ -95,7 +97,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
|
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/images/search',
|
'unix://var/run/docker.sock/v1.4/images/search',
|
||||||
params={'term': 'busybox'}
|
params={'term': 'busybox'},
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
###################
|
###################
|
||||||
|
@ -109,7 +112,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
self.fail('Command should not raise exception: {0}'.format(e))
|
self.fail('Command should not raise exception: {0}'.format(e))
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/images/json',
|
'unix://var/run/docker.sock/v1.4/images/json',
|
||||||
params={'filter': None, 'only_ids': 0, 'all': 1}
|
params={'filter': None, 'only_ids': 0, 'all': 1},
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_image_ids(self):
|
def test_image_ids(self):
|
||||||
|
@ -120,7 +124,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
|
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/images/json',
|
'unix://var/run/docker.sock/v1.4/images/json',
|
||||||
params={'filter': None, 'only_ids': 1, 'all': 0}
|
params={'filter': None, 'only_ids': 1, 'all': 0},
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_list_containers(self):
|
def test_list_containers(self):
|
||||||
|
@ -137,7 +142,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
'limit': -1,
|
'limit': -1,
|
||||||
'trunc_cmd': 1,
|
'trunc_cmd': 1,
|
||||||
'before': None
|
'before': None
|
||||||
}
|
},
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
|
@ -232,7 +238,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/start',
|
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/start',
|
||||||
'{}',
|
'{}',
|
||||||
headers={'Content-Type': 'application/json'}
|
headers={'Content-Type': 'application/json'},
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_start_container_with_lxc_conf(self):
|
def test_start_container_with_lxc_conf(self):
|
||||||
|
@ -283,7 +290,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/start',
|
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/start',
|
||||||
'{"Binds": ["/tmp:/mnt"]}',
|
'{"Binds": ["/tmp:/mnt"]}',
|
||||||
headers={'Content-Type': 'application/json'}
|
headers={'Content-Type': 'application/json'},
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_start_container_with_dict_instead_of_id(self):
|
def test_start_container_with_dict_instead_of_id(self):
|
||||||
|
@ -293,7 +301,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
self.fail('Command should not raise exception: {0}'.format(e))
|
self.fail('Command should not raise exception: {0}'.format(e))
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/start',
|
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/start',
|
||||||
'{}', headers={'Content-Type': 'application/json'}
|
'{}', headers={'Content-Type': 'application/json'},
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_wait(self):
|
def test_wait(self):
|
||||||
|
@ -329,7 +338,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/attach',
|
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/attach',
|
||||||
None,
|
None,
|
||||||
params={'logs': 1, 'stderr': 1, 'stdout': 1}
|
params={'logs': 1, 'stderr': 1, 'stdout': 1},
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_logs_with_dict_instead_of_id(self):
|
def test_logs_with_dict_instead_of_id(self):
|
||||||
|
@ -341,7 +351,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/attach',
|
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/attach',
|
||||||
None,
|
None,
|
||||||
params={'logs': 1, 'stderr': 1, 'stdout': 1}
|
params={'logs': 1, 'stderr': 1, 'stdout': 1},
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_diff(self):
|
def test_diff(self):
|
||||||
|
@ -351,7 +362,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
self.fail('Command should not raise exception: {0}'.format(e))
|
self.fail('Command should not raise exception: {0}'.format(e))
|
||||||
|
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/changes')
|
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/changes',
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS)
|
||||||
|
|
||||||
def test_diff_with_dict_instead_of_id(self):
|
def test_diff_with_dict_instead_of_id(self):
|
||||||
try:
|
try:
|
||||||
|
@ -360,7 +372,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
self.fail('Command should not raise exception: {0}'.format(e))
|
self.fail('Command should not raise exception: {0}'.format(e))
|
||||||
|
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/changes')
|
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/changes',
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS)
|
||||||
|
|
||||||
def test_stop_container(self):
|
def test_stop_container(self):
|
||||||
try:
|
try:
|
||||||
|
@ -371,7 +384,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/stop',
|
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/stop',
|
||||||
None,
|
None,
|
||||||
params={'t': 2}
|
params={'t': 2},
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_stop_container_with_dict_instead_of_id(self):
|
def test_stop_container_with_dict_instead_of_id(self):
|
||||||
|
@ -383,7 +397,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/stop',
|
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/stop',
|
||||||
None,
|
None,
|
||||||
params={'t': 2}
|
params={'t': 2},
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_kill_container(self):
|
def test_kill_container(self):
|
||||||
|
@ -394,7 +409,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
|
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/kill',
|
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/kill',
|
||||||
None
|
None,
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_kill_container_with_dict_instead_of_id(self):
|
def test_kill_container_with_dict_instead_of_id(self):
|
||||||
|
@ -405,7 +421,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
|
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/kill',
|
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/kill',
|
||||||
None
|
None,
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_restart_container(self):
|
def test_restart_container(self):
|
||||||
|
@ -417,7 +434,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/restart',
|
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/restart',
|
||||||
None,
|
None,
|
||||||
params={'t': 2}
|
params={'t': 2},
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_restart_container_with_dict_instead_of_id(self):
|
def test_restart_container_with_dict_instead_of_id(self):
|
||||||
|
@ -429,7 +447,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/restart',
|
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b/restart',
|
||||||
None,
|
None,
|
||||||
params={'t': 2}
|
params={'t': 2},
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_remove_container(self):
|
def test_remove_container(self):
|
||||||
|
@ -440,7 +459,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
|
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b',
|
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b',
|
||||||
params={'v': False}
|
params={'v': False},
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_remove_container_with_dict_instead_of_id(self):
|
def test_remove_container_with_dict_instead_of_id(self):
|
||||||
|
@ -451,7 +471,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
|
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b',
|
'unix://var/run/docker.sock/v1.4/containers/3cc2351ab11b',
|
||||||
params={'v': False}
|
params={'v': False},
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
##################
|
##################
|
||||||
|
@ -467,7 +488,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/images/create',
|
'unix://var/run/docker.sock/v1.4/images/create',
|
||||||
headers={},
|
headers={},
|
||||||
params={'tag': None, 'fromImage': 'joffrey/test001'}
|
params={'tag': None, 'fromImage': 'joffrey/test001'},
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_commit(self):
|
def test_commit(self):
|
||||||
|
@ -486,7 +508,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
'tag': None,
|
'tag': None,
|
||||||
'container': '3cc2351ab11b',
|
'container': '3cc2351ab11b',
|
||||||
'author': None
|
'author': None
|
||||||
}
|
},
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_remove_image(self):
|
def test_remove_image(self):
|
||||||
|
@ -496,7 +519,8 @@ class DockerClientTest(unittest.TestCase):
|
||||||
self.fail('Command should not raise exception: {0}'.format(e))
|
self.fail('Command should not raise exception: {0}'.format(e))
|
||||||
|
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
'unix://var/run/docker.sock/v1.4/images/e9aa60c60128'
|
'unix://var/run/docker.sock/v1.4/images/e9aa60c60128',
|
||||||
|
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
#################
|
#################
|
||||||
|
|
Loading…
Reference in New Issue