Files
podman/test/dockerpy/images.py
Sujil02 37428df4c2 Modify py test to start stop system service for each test
Start stop system service for each test class to make it east to integrate to CI
Adds more tests
Add some common methods shared between images and containers test.

Signed-off-by: Sujil02 <sushah@redhat.com>
2020-06-07 22:27:01 -04:00

152 lines
4.5 KiB
Python

import unittest
import docker
import requests
import os
from docker import Client
from . import constant
from . import common
client = common.get_client()
class TestImages(unittest.TestCase):
podman = None
def setUp(self):
super().setUp()
client.pull(constant.ALPINE)
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)
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)
client.pull(constant.NGINX)
allImages = client.images()
self.assertEqual(len(allImages) , 3)
# 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.remove_image("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)
# Export Image
def test_export_image(self):
client.pull(constant.BB)
file = os.path.join(constant.ImageCacheDir , "busybox.tar")
if not os.path.exists(constant.ImageCacheDir):
os.makedirs(constant.ImageCacheDir)
# Check for error with wrong image name
with self.assertRaises(requests.HTTPError):
client.get_image("dummy")
response = client.get_image(constant.BB)
image_tar = open(file,mode="wb")
image_tar.write(response.data)
image_tar.close()
os.stat(file)
# Import|Load Image
def test_import_image(self):
allImages = client.images()
self.assertEqual(len(allImages), 1)
file = os.path.join(constant.ImageCacheDir , "busybox.tar")
client.import_image_from_file(filename=file)
allImages = client.images()
self.assertEqual(len(allImages), 2)
if __name__ == '__main__':
# Setup temporary space
unittest.main()