diff options
author | Joffrey F <joffrey@docker.com> | 2015-11-17 11:19:40 -0800 |
---|---|---|
committer | Joffrey F <joffrey@docker.com> | 2015-11-18 15:40:54 -0800 |
commit | de617375f1fb37eae60a5af6b4a2d7ef1f8fd70a (patch) | |
tree | 6f3658cd5859d435dd524bd3c564392d7e67b9a6 /tests/helpers.py | |
parent | e1eefce7f9152f33ae7c49a6d7c028ef5eacfb57 (diff) | |
download | docker-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.py | 87 |
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 |