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()