From d7770df5ef9f6085a5e31e3260f7dc1f0056f162 Mon Sep 17 00:00:00 2001 From: Jhon Honce Date: Wed, 24 Jun 2020 12:40:55 -0700 Subject: Fix python dockerpy tests * Refactor packaging so unittest discovery works * Refactor tests to use python3-docker.rpm that ships with Fedora32 * Flush image cache between tests suites * Update documentation to reflect changes Outstanding issue: * client.get_image() does not fail if image does not exist Signed-off-by: Jhon Honce --- test/python/dockerpy/tests/test_images.py | 162 ++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 test/python/dockerpy/tests/test_images.py (limited to 'test/python/dockerpy/tests/test_images.py') diff --git a/test/python/dockerpy/tests/test_images.py b/test/python/dockerpy/tests/test_images.py new file mode 100644 index 000000000..5eae61c2f --- /dev/null +++ b/test/python/dockerpy/tests/test_images.py @@ -0,0 +1,162 @@ +import os +import stat +import unittest +from os import remove +from stat import ST_SIZE + +import docker +import requests + +from . import common, constant + +client = common.get_client() + + +class TestImages(unittest.TestCase): + def setUp(self): + super().setUp() + common.restore_image_from_cache(self) + + def tearDown(self): + common.remove_all_images() + return super().tearDown() + + @classmethod + def setUpClass(cls): + super().setUpClass() + common.enable_sock(cls) + + @classmethod + def tearDownClass(cls): + common.terminate_connection(cls) + common.flush_image_cache(cls) + return super().tearDownClass() + +# Inspect Image + + def test_inspect_image(self): + # Check for error with wrong image name + with self.assertRaises(requests.HTTPError): + client.inspect_image("dummy") + alpine_image = client.inspect_image(constant.ALPINE) + self.assertIn(constant.ALPINE, alpine_image["RepoTags"]) + +# Tag Image + +# Validates if invalid image name is given a bad response is encountered. + + def test_tag_invalid_image(self): + with self.assertRaises(requests.HTTPError): + client.tag("dummy", "demo") + + # Validates if the image is tagged successfully. + def test_tag_valid_image(self): + client.tag(constant.ALPINE, "demo", constant.ALPINE_SHORTNAME) + alpine_image = client.inspect_image(constant.ALPINE) + for x in alpine_image["RepoTags"]: + if ("demo:alpine" in x): + self.assertTrue + self.assertFalse + + # Validates if name updates when the image is retagged. + @unittest.skip("dosent work now") + def test_retag_valid_image(self): + client.tag(constant.ALPINE_SHORTNAME, "demo", "rename") + alpine_image = client.inspect_image(constant.ALPINE) + self.assertNotIn("demo:test", alpine_image["RepoTags"]) + +# List Image +# List All Images + + def test_list_images(self): + allImages = client.images() + self.assertEqual(len(allImages), 1) + # Add more images + client.pull(constant.BB) + allImages = client.images() + self.assertEqual(len(allImages), 2) + + # List images with filter + filters = {'reference': 'alpine'} + allImages = client.images(filters=filters) + self.assertEqual(len(allImages), 1) + +# Search Image + + def test_search_image(self): + response = client.search("alpine") + for i in response: + # Alpine found + if "docker.io/library/alpine" in i["Name"]: + self.assertTrue + self.assertFalse + +# Image Exist (No docker-py support yet) + +# Remove Image + + def test_remove_image(self): + # Check for error with wrong image name + with self.assertRaises(requests.HTTPError): + client.remove_image("dummy") + allImages = client.images() + self.assertEqual(len(allImages), 1) + alpine_image = client.inspect_image(constant.ALPINE) + client.remove_image(alpine_image) + allImages = client.images() + self.assertEqual(len(allImages), 0) + +# Image History + + def test_image_history(self): + # Check for error with wrong image name + with self.assertRaises(requests.HTTPError): + client.history("dummy") + + imageHistory = client.history(constant.ALPINE) + alpine_image = client.inspect_image(constant.ALPINE) + for h in imageHistory: + if h["Id"] in alpine_image["Id"]: + self.assertTrue + self.assertFalse + +# Prune Image (No docker-py support yet) + + def test_get_image_dummy(self): + # FIXME: seems to be an error in the library + self.skipTest("Documentation and library do not match") + # Check for error with wrong image name + with self.assertRaises(docker.errors.ImageNotFound): + client.get_image("dummy") + +# Export Image + + def test_export_image(self): + client.pull(constant.BB) + if not os.path.exists(constant.ImageCacheDir): + os.makedirs(constant.ImageCacheDir) + + image = client.get_image(constant.BB) + + file = os.path.join(constant.ImageCacheDir, "busybox.tar") + tarball = open(file, mode="wb") + for frame in image: + tarball.write(frame) + tarball.close() + sz = os.path.getsize(file) + self.assertGreater(sz, 0) + + +# Import|Load Image + + def test_import_image(self): + allImages = client.images() + self.assertEqual(len(allImages), 1) + file = os.path.join(constant.ImageCacheDir, "alpine.tar") + client.import_image_from_file(filename=file) + allImages = client.images() + self.assertEqual(len(allImages), 2) + +if __name__ == '__main__': + # Setup temporary space + unittest.main() -- cgit v1.2.3-54-g00ecf