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