github.com/containers/podman/v5@v5.1.0-rc1/test/apiv2/python/rest_api/test_v2_0_0_volume.py (about)

     1  import os
     2  import random
     3  import unittest
     4  
     5  import requests
     6  from .fixtures import APITestCase
     7  
     8  
     9  class VolumeTestCase(APITestCase):
    10      def test_volume_crud(self):
    11          name = f"Volume_{random.getrandbits(160):x}"
    12  
    13          ls = requests.get(self.podman_url + "/v1.40/volumes")
    14          self.assertEqual(ls.status_code, 200, ls.text)
    15  
    16          # See https://docs.docker.com/engine/api/v1.40/#operation/VolumeList
    17          required_keys = (
    18              "Volumes",
    19              "Warnings",
    20          )
    21  
    22          volumes = ls.json()
    23          self.assertIsInstance(volumes, dict)
    24          for key in required_keys:
    25              self.assertIn(key, volumes)
    26  
    27          create = requests.post(self.podman_url + "/v1.40/volumes/create", json={"Name": name})
    28          self.assertEqual(create.status_code, 201, create.text)
    29  
    30          # See https://docs.docker.com/engine/api/v1.40/#operation/VolumeCreate
    31          # and https://docs.docker.com/engine/api/v1.40/#operation/VolumeInspect
    32          required_keys = (
    33              "Name",
    34              "Driver",
    35              "Mountpoint",
    36              "Labels",
    37              "Scope",
    38              "Options",
    39          )
    40  
    41          volume = create.json()
    42          self.assertIsInstance(volume, dict)
    43          for k in required_keys:
    44              self.assertIn(k, volume)
    45          self.assertEqual(volume["Name"], name)
    46  
    47          inspect = requests.get(self.podman_url + f"/v1.40/volumes/{name}")
    48          self.assertEqual(inspect.status_code, 200, inspect.text)
    49  
    50          volume = inspect.json()
    51          self.assertIsInstance(volume, dict)
    52          for k in required_keys:
    53              self.assertIn(k, volume)
    54  
    55          rm = requests.delete(self.podman_url + f"/v1.40/volumes/{name}")
    56          self.assertEqual(rm.status_code, 204, rm.text)
    57  
    58          # recreate volume with data and then prune it
    59          r = requests.post(self.podman_url + "/v1.40/volumes/create", json={"Name": name})
    60          self.assertEqual(create.status_code, 201, create.text)
    61  
    62          create = r.json()
    63          with open(os.path.join(create["Mountpoint"], "test_prune"), "w") as file:
    64              file.writelines(["This is a test\n", "This is a good test\n"])
    65  
    66          prune = requests.post(self.podman_url + "/v1.40/volumes/prune")
    67          self.assertEqual(prune.status_code, 200, prune.text)
    68  
    69          payload = prune.json()
    70          self.assertIn(name, payload["VolumesDeleted"])
    71          self.assertGreater(payload["SpaceReclaimed"], 0)
    72  
    73      def test_volume_label(self):
    74          name = f"Volume_{random.getrandbits(160):x}"
    75          expected = {
    76              "Production": "False",
    77              "Database": "Foxbase",
    78          }
    79  
    80          create = requests.post(
    81              self.podman_url + "/v4.0.0/libpod/volumes/create",
    82              json={"name": name, "label": expected},
    83          )
    84          self.assertEqual(create.status_code, 201, create.text)
    85  
    86          inspect = requests.get(self.podman_url + f"/v4.0.0/libpod/volumes/{name}/json")
    87          self.assertEqual(inspect.status_code, 200, inspect.text)
    88  
    89          volume = inspect.json()
    90          self.assertIn("Labels", volume)
    91          self.assertNotIn("Label", volume)
    92          self.assertDictEqual(expected, volume["Labels"])
    93  
    94      def test_volume_labels(self):
    95          name = f"Volume_{random.getrandbits(160):x}"
    96          expected = {
    97              "Production": "False",
    98              "Database": "Foxbase",
    99          }
   100  
   101          create = requests.post(
   102              self.podman_url + "/v4.0.0/libpod/volumes/create",
   103              json={"name": name, "labels": expected},
   104          )
   105          self.assertEqual(create.status_code, 201, create.text)
   106  
   107          inspect = requests.get(self.podman_url + f"/v4.0.0/libpod/volumes/{name}/json")
   108          self.assertEqual(inspect.status_code, 200, inspect.text)
   109  
   110          volume = inspect.json()
   111          self.assertIn("Labels", volume)
   112          self.assertDictEqual(expected, volume["Labels"])
   113  
   114      def test_volume_label_override(self):
   115          name = f"Volume_{random.getrandbits(160):x}"
   116          create = requests.post(
   117              self.podman_url + "/v4.0.0/libpod/volumes/create",
   118              json={
   119                  "Name": name,
   120                  "Label": {
   121                      "Database": "dbase",
   122                  },
   123                  "Labels": {
   124                      "Database": "sqlserver",
   125                  },
   126              },
   127          )
   128          self.assertEqual(create.status_code, 201, create.text)
   129  
   130          inspect = requests.get(self.podman_url + f"/v4.0.0/libpod/volumes/{name}/json")
   131          self.assertEqual(inspect.status_code, 200, inspect.text)
   132  
   133          volume = inspect.json()
   134          self.assertIn("Labels", volume)
   135          self.assertNotIn("Label", volume)
   136          self.assertDictEqual({"Database": "sqlserver"}, volume["Labels"])
   137  
   138  
   139  if __name__ == "__main__":
   140      unittest.main()