summaryrefslogtreecommitdiff
path: root/tests/helpers.py
diff options
context:
space:
mode:
authorJoffrey F <joffrey@docker.com>2015-11-17 11:19:40 -0800
committerJoffrey F <joffrey@docker.com>2015-11-18 15:40:54 -0800
commitde617375f1fb37eae60a5af6b4a2d7ef1f8fd70a (patch)
tree6f3658cd5859d435dd524bd3c564392d7e67b9a6 /tests/helpers.py
parente1eefce7f9152f33ae7c49a6d7c028ef5eacfb57 (diff)
downloaddocker-py-de617375f1fb37eae60a5af6b4a2d7ef1f8fd70a.tar.gz
Move methods/classes used by all integration tests to helpers.py
Ensure setup_module is called at session level, making the test suite not order dependent. Test files can be invoked independently. Signed-off-by: Joffrey F <joffrey@docker.com>
Diffstat (limited to 'tests/helpers.py')
-rw-r--r--tests/helpers.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/tests/helpers.py b/tests/helpers.py
index 392be3b..01083e3 100644
--- a/tests/helpers.py
+++ b/tests/helpers.py
@@ -1,7 +1,15 @@
import os
import os.path
+import shutil
import tarfile
import tempfile
+import unittest
+
+import docker
+import six
+
+BUSYBOX = 'busybox:buildroot-2014.02'
+EXEC_DRIVER = []
def make_tree(dirs, files):
@@ -35,3 +43,82 @@ def untar_file(tardata, filename):
result = f.read()
f.close()
return result
+
+
+def exec_driver_is_native():
+ global EXEC_DRIVER
+ if not EXEC_DRIVER:
+ c = docker_client()
+ EXEC_DRIVER = c.info()['ExecutionDriver']
+ c.close()
+ return EXEC_DRIVER.startswith('native')
+
+
+def docker_client(**kwargs):
+ return docker.Client(**docker_client_kwargs(**kwargs))
+
+
+def docker_client_kwargs(**kwargs):
+ client_kwargs = docker.utils.kwargs_from_env(assert_hostname=False)
+ client_kwargs.update(kwargs)
+ return client_kwargs
+
+
+class BaseTestCase(unittest.TestCase):
+ tmp_imgs = []
+ tmp_containers = []
+ tmp_folders = []
+ tmp_volumes = []
+
+ def setUp(self):
+ if six.PY2:
+ self.assertRegex = self.assertRegexpMatches
+ self.assertCountEqual = self.assertItemsEqual
+ self.client = docker_client(timeout=60)
+ self.tmp_imgs = []
+ self.tmp_containers = []
+ self.tmp_folders = []
+ self.tmp_volumes = []
+ self.tmp_networks = []
+
+ def tearDown(self):
+ for img in self.tmp_imgs:
+ try:
+ self.client.remove_image(img)
+ except docker.errors.APIError:
+ pass
+ for container in self.tmp_containers:
+ try:
+ self.client.stop(container, timeout=1)
+ self.client.remove_container(container)
+ except docker.errors.APIError:
+ pass
+ for network in self.tmp_networks:
+ try:
+ self.client.remove_network(network)
+ except docker.errors.APIError:
+ pass
+ for folder in self.tmp_folders:
+ shutil.rmtree(folder)
+
+ for volume in self.tmp_volumes:
+ try:
+ self.client.remove_volume(volume)
+ except docker.errors.APIError:
+ pass
+
+ self.client.close()
+
+ def run_container(self, *args, **kwargs):
+ container = self.client.create_container(*args, **kwargs)
+ self.tmp_containers.append(container)
+ self.client.start(container)
+ exitcode = self.client.wait(container)
+
+ if exitcode != 0:
+ output = self.client.logs(container)
+ raise Exception(
+ "Container exited with code {}:\n{}"
+ .format(exitcode, output))
+
+ return container