From 92a8d69a70ce38ab107828d35dead106a1cc0437 Mon Sep 17 00:00:00 2001
From: Jhon Honce <jhonce@redhat.com>
Date: Thu, 11 Mar 2021 14:24:57 -0700
Subject: [PATCH] Delete all containers and pods between tests

New tearDown() deletes all pods and containers between tests

Signed-off-by: Jhon Honce <jhonce@redhat.com>
---
 test/apiv2/rest_api/__init__.py         | 26 +++++++----
 test/apiv2/rest_api/test_rest_v2_0_0.py | 59 ++++++++-----------------
 2 files changed, 36 insertions(+), 49 deletions(-)

diff --git a/test/apiv2/rest_api/__init__.py b/test/apiv2/rest_api/__init__.py
index b7b8a76492..0ad6b51b3c 100644
--- a/test/apiv2/rest_api/__init__.py
+++ b/test/apiv2/rest_api/__init__.py
@@ -3,6 +3,7 @@ import json
 import os
 import shutil
 import subprocess
+import sys
 import tempfile
 
 
@@ -27,7 +28,9 @@ class Podman(object):
         self.cmd.append("--root=" + os.path.join(self.anchor_directory, "crio"))
         self.cmd.append("--runroot=" + os.path.join(self.anchor_directory, "crio-run"))
 
-        os.environ["CONTAINERS_REGISTRIES_CONF"] = os.path.join(self.anchor_directory, "registry.conf")
+        os.environ["CONTAINERS_REGISTRIES_CONF"] = os.path.join(
+            self.anchor_directory, "registry.conf"
+        )
         p = configparser.ConfigParser()
         p.read_dict(
             {
@@ -114,13 +117,20 @@ class Podman(object):
         check = kwargs.get("check", False)
         shell = kwargs.get("shell", False)
 
-        return subprocess.run(
-            cmd,
-            shell=shell,
-            check=check,
-            stdout=subprocess.PIPE,
-            stderr=subprocess.PIPE,
-        )
+        try:
+            return subprocess.run(
+                cmd,
+                shell=shell,
+                check=check,
+                stdout=subprocess.PIPE,
+                stderr=subprocess.PIPE,
+            )
+        except subprocess.CalledProcessError as e:
+            if e.stdout:
+                sys.stdout.write("\nRun Stdout:\n" + e.stdout.decode("utf-8"))
+            if e.stderr:
+                sys.stderr.write("\nRun Stderr:\n" + e.stderr.decode("utf-8"))
+            raise
 
     def tear_down(self):
         shutil.rmtree(self.anchor_directory, ignore_errors=True)
diff --git a/test/apiv2/rest_api/test_rest_v2_0_0.py b/test/apiv2/rest_api/test_rest_v2_0_0.py
index 8a78f51858..c0b61ea859 100644
--- a/test/apiv2/rest_api/test_rest_v2_0_0.py
+++ b/test/apiv2/rest_api/test_rest_v2_0_0.py
@@ -50,23 +50,20 @@ class TestApi(unittest.TestCase):
     def setUp(self):
         super().setUp()
 
-        try:
-            TestApi.podman.run("run", "alpine", "/bin/ls", check=True)
-        except subprocess.CalledProcessError as e:
-            if e.stdout:
-                sys.stdout.write("\nRun Stdout:\n" + e.stdout.decode("utf-8"))
-            if e.stderr:
-                sys.stderr.write("\nRun Stderr:\n" + e.stderr.decode("utf-8"))
-            raise
+        TestApi.podman.run("run", "alpine", "/bin/ls", check=True)
+
+    def tearDown(self) -> None:
+        super().tearDown()
+
+        TestApi.podman.run("pod", "rm", "--all", "--force", check=True)
+        TestApi.podman.run("rm", "--all", "--force", check=True)
 
     @classmethod
     def setUpClass(cls):
         super().setUpClass()
 
         TestApi.podman = Podman()
-        TestApi.service = TestApi.podman.open(
-            "system", "service", "tcp:localhost:8080", "--time=0"
-        )
+        TestApi.service = TestApi.podman.open("system", "service", "tcp:localhost:8080", "--time=0")
         # give the service some time to be ready...
         time.sleep(2)
 
@@ -243,9 +240,7 @@ class TestApi(unittest.TestCase):
 
     def test_post_create_compat(self):
         """Create network and connect container during create"""
-        net = requests.post(
-            PODMAN_URL + "/v1.40/networks/create", json={"Name": "TestNetwork"}
-        )
+        net = requests.post(PODMAN_URL + "/v1.40/networks/create", json={"Name": "TestNetwork"})
         self.assertEqual(net.status_code, 201, net.text)
 
         create = requests.post(
@@ -454,15 +449,11 @@ class TestApi(unittest.TestCase):
                 self.assertIn(k, o)
 
     def test_network_compat(self):
-        name = "Network_" + "".join(
-            random.choice(string.ascii_letters) for i in range(10)
-        )
+        name = "Network_" + "".join(random.choice(string.ascii_letters) for i in range(10))
 
         # Cannot test for 0 existing networks because default "podman" network always exists
 
-        create = requests.post(
-            PODMAN_URL + "/v1.40/networks/create", json={"Name": name}
-        )
+        create = requests.post(PODMAN_URL + "/v1.40/networks/create", json={"Name": name})
         self.assertEqual(create.status_code, 201, create.content)
         obj = json.loads(create.content)
         self.assertIn(type(obj), (dict,))
@@ -492,9 +483,7 @@ class TestApi(unittest.TestCase):
         self.assertEqual(inspect.status_code, 404, inspect.content)
 
         # network prune
-        prune_name = "Network_" + "".join(
-            random.choice(string.ascii_letters) for i in range(10)
-        )
+        prune_name = "Network_" + "".join(random.choice(string.ascii_letters) for i in range(10))
         prune_create = requests.post(
             PODMAN_URL + "/v1.40/networks/create", json={"Name": prune_name}
         )
@@ -506,9 +495,7 @@ class TestApi(unittest.TestCase):
         self.assertTrue(prune_name in obj["NetworksDeleted"])
 
     def test_volumes_compat(self):
-        name = "Volume_" + "".join(
-            random.choice(string.ascii_letters) for i in range(10)
-        )
+        name = "Volume_" + "".join(random.choice(string.ascii_letters) for i in range(10))
 
         ls = requests.get(PODMAN_URL + "/v1.40/volumes")
         self.assertEqual(ls.status_code, 200, ls.content)
@@ -524,9 +511,7 @@ class TestApi(unittest.TestCase):
         for k in required_keys:
             self.assertIn(k, obj)
 
-        create = requests.post(
-            PODMAN_URL + "/v1.40/volumes/create", json={"Name": name}
-        )
+        create = requests.post(PODMAN_URL + "/v1.40/volumes/create", json={"Name": name})
         self.assertEqual(create.status_code, 201, create.content)
 
         # See https://docs.docker.com/engine/api/v1.40/#operation/VolumeCreate
@@ -703,21 +688,15 @@ class TestApi(unittest.TestCase):
         """Verify issue #8865"""
 
         pod_name = list()
-        pod_name.append(
-            "Pod_" + "".join(random.choice(string.ascii_letters) for i in range(10))
-        )
-        pod_name.append(
-            "Pod_" + "".join(random.choice(string.ascii_letters) for i in range(10))
-        )
+        pod_name.append("Pod_" + "".join(random.choice(string.ascii_letters) for i in range(10)))
+        pod_name.append("Pod_" + "".join(random.choice(string.ascii_letters) for i in range(10)))
 
         r = requests.post(
             _url("/pods/create"),
             json={
                 "name": pod_name[0],
                 "no_infra": False,
-                "portmappings": [
-                    {"host_ip": "127.0.0.1", "host_port": 8889, "container_port": 89}
-                ],
+                "portmappings": [{"host_ip": "127.0.0.1", "host_port": 8889, "container_port": 89}],
             },
         )
         self.assertEqual(r.status_code, 201, r.text)
@@ -736,9 +715,7 @@ class TestApi(unittest.TestCase):
             json={
                 "name": pod_name[1],
                 "no_infra": False,
-                "portmappings": [
-                    {"host_ip": "127.0.0.1", "host_port": 8889, "container_port": 89}
-                ],
+                "portmappings": [{"host_ip": "127.0.0.1", "host_port": 8889, "container_port": 89}],
             },
         )
         self.assertEqual(r.status_code, 201, r.text)