Merge pull request #6417 from sujil02/py-test

Adds docker py regression test.
This commit is contained in:
OpenShift Merge Robot
2020-06-06 05:40:03 -04:00
committed by GitHub
4 changed files with 183 additions and 0 deletions

35
test/dockerpy/README.md Normal file
View File

@ -0,0 +1,35 @@
# Dockerpy regression test
Python test suite to validate Podman endpoints using dockerpy library
Running tests
=============
To run the tests locally in your sandbox:
#### Make sure that the Podman system service is running to do so
```
sudo podman --log-level=debug system service -t0 unix:/run/podman/podman.sock
```
#### Run the entire test
```
sudo PYTHONPATH=/usr/bin/python python -m dockerpy.images
```
Passing the -v option to your test script will instruct unittest.main() to enable a higher level of verbosity, and produce detailed output:
```
sudo PYTHONPATH=/usr/bin/python python -m unittest -v dockerpy.images
```
#### Run a specific test class
```
sudo PYTHONPATH=/usr/bin/python python -m unittest -v dockerpy.images.TestImages
```
#### Run a specific test within the test class
```
sudo PYTHONPATH=/usr/bin/python python -m unittest -v dockerpy.images.TestImages.test_list_images
```

6
test/dockerpy/common.py Normal file
View File

@ -0,0 +1,6 @@
import docker
from docker import Client
def get_client():
return docker.Client(base_url="unix:/run/podman/podman.sock")

11
test/dockerpy/constant.py Normal file
View File

@ -0,0 +1,11 @@
BB = "docker.io/library/busybox:latest"
NGINX = "docker.io/library/nginx:latest"
ALPINE = "docker.io/library/alpine:latest"
ALPINE_SHORTNAME = "alpine"
ALPINELISTTAG = "docker.io/library/alpine:3.10.2"
ALPINELISTDIGEST = "docker.io/library/alpine@sha256:72c42ed48c3a2db31b7dafe17d275b634664a708d901ec9fd57b1529280f01fb"
ALPINEAMD64DIGEST = "docker.io/library/alpine@sha256:acd3ca9941a85e8ed16515bfc5328e4e2f8c128caa72959a58a127b7801ee01f"
ALPINEAMD64ID = "961769676411f082461f9ef46626dd7a2d1e2b2a38e6a44364bcbecf51e66dd4"
ALPINEARM64DIGEST = "docker.io/library/alpine@sha256:db7f3dcef3d586f7dd123f107c93d7911515a5991c4b9e51fa2a43e46335a43e"
ALPINEARM64ID = "915beeae46751fc564998c79e73a1026542e945ca4f73dc841d09ccc6c2c0672"
infra = "k8s.gcr.io/pause:3.2"

131
test/dockerpy/images.py Normal file
View File

@ -0,0 +1,131 @@
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):
def setUp(self):
super().setUp()
client.pull(constant.ALPINE)
def tearDown(self):
allImages = client.images()
for image in allImages:
client.remove_image(image,force=True)
return super().tearDown()
# 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(True, msg="Image found")
self.assertFalse(False,msg="Image not found")
# 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(True,msg="Image History validated")
self.assertFalse(False,msg="Unable to get image history")
# Prune Image (No docker-py support yet)
# Export Image
def test_export_image(self):
file = "/tmp/alpine-latest.tar"
# Check for error with wrong image name
with self.assertRaises(requests.HTTPError):
client.get_image("dummy")
response = client.get_image(constant.ALPINE)
image_tar = open(file,mode="wb")
image_tar.write(response.data)
image_tar.close()
os.stat(file)
# Import|Load Image
if __name__ == '__main__':
# Setup temporary space
unittest.main()