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