From c53408f73961daa0ad49f5def61344c845343ca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Palancher?= Date: Fri, 17 Jan 2025 18:44:09 +0100 Subject: [PATCH] tests(agent): racksdb routes when disabled/enabled --- slurmweb/tests/lib/agent.py | 6 ++- slurmweb/tests/lib/utils.py | 26 +++++++++++ slurmweb/tests/views/test_agent_racksdb.py | 53 ++++++++++++++++++++++ 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 slurmweb/tests/views/test_agent_racksdb.py diff --git a/slurmweb/tests/lib/agent.py b/slurmweb/tests/lib/agent.py index 54f85301..0af21f68 100644 --- a/slurmweb/tests/lib/agent.py +++ b/slurmweb/tests/lib/agent.py @@ -11,7 +11,7 @@ import werkzeug -from flask import Blueprint +from flask import Blueprint, jsonify from rfl.authentication.user import AuthenticatedUser from slurmweb.apps import SlurmwebConfSeed @@ -42,6 +42,10 @@ class FakeRacksDBWebBlueprint(Blueprint): def __init__(self, **kwargs): super().__init__("Fake RacksDB web blueprint", __name__) + self.add_url_rule("/fake", view_func=self.basic) + + def basic(self): + return jsonify({"test": "ok"}) class TestAgentBase(unittest.TestCase): diff --git a/slurmweb/tests/lib/utils.py b/slurmweb/tests/lib/utils.py index 11ceb2e1..63d51458 100644 --- a/slurmweb/tests/lib/utils.py +++ b/slurmweb/tests/lib/utils.py @@ -45,6 +45,32 @@ def inner(self, *args, **kwargs): return inner +def flask_version(): + """Return version of Flask package as a tuple of integers.""" + import importlib + + try: + version = importlib.metadata.version("flask") + except AttributeError: + version = flask.__version__ + return tuple([int(digit) for digit in version.split(".")]) + + +# Flask 404 description message has changed in recent versions (one space has been +# removed). Some tests check this message is used, they use this variable which is +# defined depending on the version of Flask package found in the environment. +if flask_version() < (1, 0, 0): + flask_404_description = ( + "The requested URL was not found on the server. If you entered the URL " + "manually please check your spelling and try again." + ) +else: + flask_404_description = ( + "The requested URL was not found on the server. If you entered the URL " + "manually please check your spelling and try again." + ) + + class SlurmwebAssetUnavailable(Exception): pass diff --git a/slurmweb/tests/views/test_agent_racksdb.py b/slurmweb/tests/views/test_agent_racksdb.py new file mode 100644 index 00000000..149989d2 --- /dev/null +++ b/slurmweb/tests/views/test_agent_racksdb.py @@ -0,0 +1,53 @@ +# Copyright (c) 2025 Rackslab +# +# This file is part of Slurm-web. +# +# SPDX-License-Identifier: GPL-3.0-or-later + + +import textwrap + +from ..lib.agent import TestAgentBase +from ..lib.utils import flask_404_description + + +class TestAgentRacksDBEnabledRequest(TestAgentBase): + + def setUp(self): + self.setup_client() + + def test_request_racksdb(self): + # Check FakeRacksDBWebBlueprint is called when racksdb is enabled (by default). + response = self.client.get("/racksdb/fake") + self.assertEqual(response.status_code, 200) + self.assertEqual( + response.json, + {"test": "ok"}, + ) + + +class TestAgentRacksDBDisabledRequest(TestAgentBase): + + def setUp(self): + self.setup_client( + additional_conf=textwrap.dedent( + """ + + [racksdb] + enabled=no + """ + ) + ) + + def test_request_racksdb(self): + # Check FakeRacksDBWebBlueprint is not registered when racksdb is disabled. + response = self.client.get("/racksdb/fake") + self.assertEqual(response.status_code, 404) + self.assertEqual( + response.json, + { + "code": 404, + "description": flask_404_description, + "name": "Not Found", + }, + )