github.com/containers/podman/v5@v5.1.0-rc1/test/apiv2/python/rest_api/test_v2_0_0_system.py (about) 1 import json 2 import unittest 3 import uuid 4 5 import requests 6 import yaml 7 from .fixtures import APITestCase 8 9 10 class SystemTestCase(APITestCase): 11 def test_info(self): 12 r = requests.get(self.uri("/info")) 13 self.assertEqual(r.status_code, 200, r.text) 14 self.assertIsNotNone(r.content) 15 _ = r.json() 16 17 r = requests.get(self.podman_url + "/v1.40/info") 18 self.assertEqual(r.status_code, 200, r.text) 19 self.assertIsNotNone(r.content) 20 response = r.json() 21 22 info_status = yaml.load(self.podman.run("info").stdout, Loader=yaml.FullLoader) 23 if info_status["host"]["security"]["rootless"]: 24 self.assertIn("name=rootless", response["SecurityOptions"]) 25 else: 26 self.assertNotIn("name=rootless", response["SecurityOptions"]) 27 28 if info_status["host"]["security"]["selinuxEnabled"]: 29 self.assertIn("name=selinux", response["SecurityOptions"]) 30 else: 31 self.assertNotIn("name=selinux", response["SecurityOptions"]) 32 33 def test_events(self): 34 r = requests.get(self.uri("/events?stream=false")) 35 self.assertEqual(r.status_code, 200, r.text) 36 self.assertIsNotNone(r.content) 37 38 report = r.text.splitlines() 39 self.assertGreater(len(report), 0, "No events found!") 40 for line in report: 41 obj = json.loads(line) 42 # Actor.ID is uppercase for compatibility 43 self.assertIn("ID", obj["Actor"]) 44 # Verify 1.22+ deprecated variants are present if current originals are 45 if obj["Actor"]["ID"]: 46 self.assertEqual(obj["Actor"]["ID"], obj["id"]) 47 if obj["Action"]: 48 self.assertEqual(obj["Action"], obj["status"]) 49 if obj["Actor"].get("Attributes") and obj["Actor"]["Attributes"].get("image"): 50 self.assertEqual(obj["Actor"]["Attributes"]["image"], obj["from"]) 51 52 def test_ping(self): 53 required_headers = ( 54 "API-Version", 55 "Builder-Version", 56 "Docker-Experimental", 57 "Cache-Control", 58 "Pragma", 59 "Pragma", 60 ) 61 62 def check_headers(req): 63 for k in required_headers: 64 self.assertIn(k, req.headers) 65 66 r = requests.get(self.podman_url + "/_ping") 67 self.assertEqual(r.status_code, 200, r.text) 68 self.assertEqual(r.text, "OK") 69 check_headers(r) 70 71 r = requests.head(self.podman_url + "/_ping") 72 self.assertEqual(r.status_code, 200, r.text) 73 self.assertEqual(r.text, "") 74 check_headers(r) 75 76 r = requests.get(self.uri("/_ping")) 77 self.assertEqual(r.status_code, 200, r.text) 78 self.assertEqual(r.text, "OK") 79 check_headers(r) 80 81 r = requests.head(self.uri("/_ping")) 82 self.assertEqual(r.status_code, 200, r.text) 83 self.assertEqual(r.text, "") 84 check_headers(r) 85 86 def test_version(self): 87 r = requests.get(self.podman_url + "/v1.40/version") 88 self.assertEqual(r.status_code, 200, r.text) 89 90 r = requests.get(self.uri("/version")) 91 self.assertEqual(r.status_code, 200, r.text) 92 93 body = r.json() 94 names = [d.get("Name", "") for d in body["Components"]] 95 96 self.assertIn("Conmon", names) 97 for n in names: 98 if n.startswith("OCI Runtime"): 99 oci_name = n 100 self.assertIsNotNone(oci_name, "OCI Runtime not found in version components.") 101 102 def test_df(self): 103 r = requests.get(self.podman_url + "/v1.40/system/df") 104 self.assertEqual(r.status_code, 200, r.text) 105 106 obj = r.json() 107 self.assertIn("Images", obj) 108 self.assertIn("Containers", obj) 109 self.assertIn("Volumes", obj) 110 self.assertIn("BuildCache", obj) 111 112 r = requests.get(self.uri("/system/df")) 113 self.assertEqual(r.status_code, 200, r.text) 114 115 def test_reference_id(self): 116 rid = str(uuid.uuid4()) 117 r = requests.get(self.uri("/info"), headers={"X-Reference-Id": rid}) 118 self.assertEqual(r.status_code, 200, r.text) 119 120 self.assertIn("X-Reference-Id", r.headers) 121 self.assertEqual(r.headers["X-Reference-Id"], rid) 122 123 r = requests.get(self.uri("/info")) 124 self.assertIn("X-Reference-Id", r.headers) 125 self.assertNotEqual(r.headers["X-Reference-Id"], rid) 126 127 128 if __name__ == "__main__": 129 unittest.main()