From 4d7238d538f7dde0493238c588c1c27ed52f51cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Palancher?= Date: Wed, 13 Nov 2024 15:25:59 +0100 Subject: [PATCH] tests: refactor mock_{agent,prometheus}_response() --- slurmweb/tests/metrics/test_db.py | 6 ++--- slurmweb/tests/test_agent.py | 8 +++--- slurmweb/tests/utils.py | 43 +++++++++---------------------- 3 files changed, 19 insertions(+), 38 deletions(-) diff --git a/slurmweb/tests/metrics/test_db.py b/slurmweb/tests/metrics/test_db.py index 20c7c1e5..af690ca1 100644 --- a/slurmweb/tests/metrics/test_db.py +++ b/slurmweb/tests/metrics/test_db.py @@ -25,12 +25,12 @@ def setUp(self): @mock.patch("slurmweb.metrics.db.requests.get") def test_request(self, mock_requests_get): - mock_requests_get.return_value = mock_prometheus_response("nodes-hour") + _, mock_requests_get.return_value = mock_prometheus_response("nodes-hour") self.db.request("nodes", "hour") @mock.patch("slurmweb.metrics.db.requests.get") def test_request_empty_result(self, mock_requests_get): - mock_requests_get.return_value = mock_prometheus_response("unknown-metric") + _, mock_requests_get.return_value = mock_prometheus_response("unknown-metric") with self.assertRaisesRegex( SlurmwebMetricsDBError, "^Empty result for query .*$" ): @@ -38,7 +38,7 @@ def test_request_empty_result(self, mock_requests_get): @mock.patch("slurmweb.metrics.db.requests.get") def test_request_unknown_path(self, mock_requests_get): - mock_requests_get.return_value = mock_prometheus_response("unknown-path") + _, mock_requests_get.return_value = mock_prometheus_response("unknown-path") with self.assertRaisesRegex( SlurmwebMetricsDBError, "^Prometheus error for query .*$" ): diff --git a/slurmweb/tests/test_agent.py b/slurmweb/tests/test_agent.py index ff25dfca..50edd931 100644 --- a/slurmweb/tests/test_agent.py +++ b/slurmweb/tests/test_agent.py @@ -803,7 +803,7 @@ def test_request_metrics_error(self): @mock.patch("slurmweb.metrics.db.requests.get") def test_request_metrics_nodes(self, mock_requests_get): - mock_requests_get.return_value = mock_prometheus_response("nodes-hour") + _, mock_requests_get.return_value = mock_prometheus_response("nodes-hour") response = self.client.get(f"/v{get_version()}/metrics/nodes") self.assertEqual(response.status_code, 200) self.assertCountEqual( @@ -813,7 +813,7 @@ def test_request_metrics_nodes(self, mock_requests_get): @mock.patch("slurmweb.metrics.db.requests.get") def test_request_metrics_cores(self, mock_requests_get): - mock_requests_get.return_value = mock_prometheus_response("cores-hour") + _, mock_requests_get.return_value = mock_prometheus_response("cores-hour") response = self.client.get(f"/v{get_version()}/metrics/cores") self.assertEqual(response.status_code, 200) self.assertCountEqual( @@ -823,7 +823,7 @@ def test_request_metrics_cores(self, mock_requests_get): @mock.patch("slurmweb.metrics.db.requests.get") def test_request_metrics_jobs(self, mock_requests_get): - mock_requests_get.return_value = mock_prometheus_response("jobs-hour") + _, mock_requests_get.return_value = mock_prometheus_response("jobs-hour") response = self.client.get(f"/v{get_version()}/metrics/jobs") self.assertEqual(response.status_code, 200) self.assertCountEqual( @@ -896,7 +896,7 @@ def test_request_metrics_jobs_denied(self): @mock.patch("slurmweb.metrics.db.requests.get") def test_request_metrics_unexpected(self, mock_requests_get): - mock_requests_get.return_value = mock_prometheus_response("unknown-metric") + _, mock_requests_get.return_value = mock_prometheus_response("unknown-metric") response = self.client.get(f"/v{get_version()}/metrics/jobs") self.assertEqual(response.status_code, 500) self.assertRegex(response.json["description"], "^Empty result for query .*$") diff --git a/slurmweb/tests/utils.py b/slurmweb/tests/utils.py index 75304c60..03d51a3c 100644 --- a/slurmweb/tests/utils.py +++ b/slurmweb/tests/utils.py @@ -119,23 +119,23 @@ def fake_text_response(): return text, response -def mock_agent_response(asset_name, remove_key=None): - """Return mocked requests Response corresponding to the given agent asset.""" - with open(ASSETS / "agent/status.json") as fh: +def mock_component_response(component, asset_name, remove_key=None): + """Return mocked requests Response corresponding to the given component asset.""" + with open(ASSETS / component / "status.json") as fh: requests_statuses = json.load(fh) if asset_name not in requests_statuses: warnings.warn( - f"Unable to find asset {asset_name} in agent requests status file" + f"Unable to find asset {asset_name} in {component} requests status file" ) raise SlurmwebAssetUnavailable() is_json = True if requests_statuses[asset_name]["content-type"] == "application/json": - asset = load_json_asset(f"agent/{asset_name}.json") + asset = load_json_asset(f"{component}/{asset_name}.json") else: is_json = False - asset = load_asset(f"agent/{asset_name}.txt") + asset = load_asset(f"{component}/{asset_name}.txt") # Remove specific key from asset, if JSON asset and key to remove is specified. This # is useful to test some error case. @@ -154,33 +154,14 @@ def mock_agent_response(asset_name, remove_key=None): return asset, response -def mock_prometheus_response(asset_name): - """Return mocked requests Response corresponding to the given Prometheus asset.""" - with open(ASSETS / "prometheus/status.json") as fh: - requests_statuses = json.load(fh) - - if asset_name not in requests_statuses: - warnings.warn( - f"Unable to find asset {asset_name} in Prometheus requests status file" - ) - raise SlurmwebAssetUnavailable() +def mock_agent_response(asset_name, remove_key=None): + """Return mocked requests Response corresponding to the given agent asset.""" + return mock_component_response("agent", asset_name, remove_key) - is_json = True - if requests_statuses[asset_name]["content-type"] == "application/json": - asset = load_json_asset(f"prometheus/{asset_name}.json") - else: - is_json = False - asset = load_asset(f"prometheus/{asset_name}.txt") - response = mock.create_autospec(requests.Response) - response.url = "/mocked/query" - response.status_code = requests_statuses[asset_name]["status"] - response.headers = {"content-type": requests_statuses[asset_name]["content-type"]} - if is_json: - response.json = mock.Mock(return_value=asset) - else: - response.text = mock.PropertyMock(return_value=asset) - return response +def mock_prometheus_response(asset_name): + """Return mocked requests Response corresponding to the given Prometheus asset.""" + return mock_component_response("prometheus", asset_name) class RemoveActionInPolicy: