mirror of
https://github.com/containers/podman.git
synced 2025-07-31 04:12:40 +08:00
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>
This commit is contained in:
162
test/python/dockerpy/tests/test_images.py
Normal file
162
test/python/dockerpy/tests/test_images.py
Normal file
@ -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()
|
Reference in New Issue
Block a user