code: def test_run_info_api(self):
      run = self._find_run_by_name("Run # 1")
  
      self.assertEqual("Run # 1", run.name)
      client = self.client
      response = client.get(f"/api/runs/{run.hash}/info/")
      self.assertEqual(200, response.status_code)
  
      data = response.json()
      run_params = data["params"]
      self.assertEqual(1, run_params["run_index"])
      self.assertEqual(0.001, run_params["hparams"]["lr"])
  
      run_traces_overview = data["traces"]["metric"]
      self.assertEqual(4, len(run_traces_overview))
      for trc_overview in run_traces_overview:
          self.assertIn(trc_overview["name"], ["loss", "accuracy"])
  
      run_props = data["props"]
  
      self.assertLess(run_props["creation_time"], run_props["end_time"])
      self.assertEqual("Run # 1", run_props["name"])
      self.assertEqual("default", run_props["experiment"]["name"])
      self.assertEqual(0, len(run_props["tags"]))
  
imports: import pytest
  import numpy
  from parameterized import parameterized
  from tests.base import PrefilledDataApiTestBase, ApiTestBase
  from tests.utils import decode_encoded_tree_stream
  from aim.storage.treeutils import decode_tree
  from aim.sdk.run import Run
label_desc: Use image node_id 7 for calling the TestRunApi obj's underlying member method code with example usage: obj.test_run_info_api() without return types