summaryrefslogtreecommitdiff
path: root/test/python/dockerpy/tests/test_images.py
diff options
context:
space:
mode:
authorJhon Honce <jhonce@redhat.com>2020-06-24 12:40:55 -0700
committerJhon Honce <jhonce@redhat.com>2020-06-24 12:40:55 -0700
commitd7770df5ef9f6085a5e31e3260f7dc1f0056f162 (patch)
treee4b6b381ff67448209f3787483e24ae960e3911e /test/python/dockerpy/tests/test_images.py
parent988fd27541dfa852ee9543c2d8a916896ef0c774 (diff)
downloadpodman-d7770df5ef9f6085a5e31e3260f7dc1f0056f162.tar.gz
podman-d7770df5ef9f6085a5e31e3260f7dc1f0056f162.tar.bz2
podman-d7770df5ef9f6085a5e31e3260f7dc1f0056f162.zip
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 <jhonce@redhat.com>
Diffstat (limited to 'test/python/dockerpy/tests/test_images.py')
-rw-r--r--test/python/dockerpy/tests/test_images.py162
1 files changed, 162 insertions, 0 deletions
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()