mirror of https://github.com/containers/podman.git
Merge pull request #6417 from sujil02/py-test
Adds docker py regression test.
This commit is contained in:
commit
1fcb6788a5
|
@ -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
|
||||||
|
```
|
|
@ -0,0 +1,6 @@
|
||||||
|
import docker
|
||||||
|
from docker import Client
|
||||||
|
|
||||||
|
|
||||||
|
def get_client():
|
||||||
|
return docker.Client(base_url="unix:/run/podman/podman.sock")
|
|
@ -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"
|
|
@ -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()
|
Loading…
Reference in New Issue