From 56069b05f9cf4d0c725d1b4b0ad6038b50837cd4 Mon Sep 17 00:00:00 2001 From: Usiel Riedl Date: Thu, 1 Feb 2024 07:34:07 -0800 Subject: [PATCH] fix(cache): remove unused webserver config & handle trailing slashes (#22849) --- superset/config.py | 4 -- superset/tasks/cache.py | 4 +- .../integration_tests/superset_test_config.py | 1 - .../superset_test_config_thumbnails.py | 1 - tests/integration_tests/tasks/test_cache.py | 58 +++++++++++++++++++ 5 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 tests/integration_tests/tasks/test_cache.py diff --git a/superset/config.py b/superset/config.py index d0d519236a712..e8d98dbd1b567 100644 --- a/superset/config.py +++ b/superset/config.py @@ -154,10 +154,6 @@ def _try_json_readsha(filepath: str, length: int) -> str | None: # values may be "Last day", "Last week", " : now", etc. DEFAULT_TIME_FILTER = NO_TIME_RANGE -SUPERSET_WEBSERVER_PROTOCOL = "http" -SUPERSET_WEBSERVER_ADDRESS = "0.0.0.0" -SUPERSET_WEBSERVER_PORT = 8088 - # This is an important setting, and should be lower than your # [load balancer / proxy / envoy / kong / ...] timeout settings. # You should also make sure to configure your WSGI server diff --git a/superset/tasks/cache.py b/superset/tasks/cache.py index aeeb86aab3bbe..d2757aa22c4a2 100644 --- a/superset/tasks/cache.py +++ b/superset/tasks/cache.py @@ -32,6 +32,7 @@ from superset.tags.models import Tag, TaggedObject from superset.utils.date_parser import parse_human_datetime from superset.utils.machine_auth import MachineAuthProvider +from superset.utils.urls import get_url_path logger = get_task_logger(__name__) logger.setLevel(logging.INFO) @@ -218,8 +219,7 @@ def fetch_url(data: str, headers: dict[str, str]) -> dict[str, str]: """ result = {} try: - baseurl = app.config["WEBDRIVER_BASEURL"] - url = f"{baseurl}api/v1/chart/warm_up_cache" + url = get_url_path("Superset.warm_up_cache") logger.info("Fetching %s with payload %s", url, data) req = request.Request( url, data=bytes(data, "utf-8"), headers=headers, method="PUT" diff --git a/tests/integration_tests/superset_test_config.py b/tests/integration_tests/superset_test_config.py index 62e0985638844..b0461e79fcfa5 100644 --- a/tests/integration_tests/superset_test_config.py +++ b/tests/integration_tests/superset_test_config.py @@ -37,7 +37,6 @@ DATA_DIR, "unittests.integration_tests.db" ) DEBUG = False -SUPERSET_WEBSERVER_PORT = 8081 SILENCE_FAB = False # Allowing SQLALCHEMY_DATABASE_URI and SQLALCHEMY_EXAMPLES_URI to be defined as an env vars for # continuous integration diff --git a/tests/integration_tests/superset_test_config_thumbnails.py b/tests/integration_tests/superset_test_config_thumbnails.py index 245d91382eaac..e1b17998ca8c1 100644 --- a/tests/integration_tests/superset_test_config_thumbnails.py +++ b/tests/integration_tests/superset_test_config_thumbnails.py @@ -25,7 +25,6 @@ DATA_DIR, "unittests.integration_tests.db" ) DEBUG = True -SUPERSET_WEBSERVER_PORT = 8081 # Allowing SQLALCHEMY_DATABASE_URI to be defined as an env var for # continuous integration diff --git a/tests/integration_tests/tasks/test_cache.py b/tests/integration_tests/tasks/test_cache.py new file mode 100644 index 0000000000000..943b444f76936 --- /dev/null +++ b/tests/integration_tests/tasks/test_cache.py @@ -0,0 +1,58 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +from unittest import mock + +import pytest + +from tests.integration_tests.test_app import app + + +@pytest.mark.parametrize( + "base_url", + [ + "http://base-url", + "http://base-url/", + ], + ids=["Without trailing slash", "With trailing slash"], +) +@mock.patch("superset.tasks.cache.request.Request") +@mock.patch("superset.tasks.cache.request.urlopen") +def test_fetch_url(mock_urlopen, mock_request_cls, base_url): + from superset.tasks.cache import fetch_url + + mock_request = mock.MagicMock() + mock_request_cls.return_value = mock_request + + mock_urlopen.return_value = mock.MagicMock() + mock_urlopen.return_value.code = 200 + + app.config["WEBDRIVER_BASEURL"] = base_url + headers = {"key": "value"} + data = "data" + data_encoded = b"data" + + result = fetch_url(data, headers) + + assert data == result["success"] + mock_request_cls.assert_called_once_with( + "http://base-url/superset/warm_up_cache/", + data=data_encoded, + headers=headers, + method="PUT", + ) + # assert the same Request object is used + mock_urlopen.assert_called_once_with(mock_request, timeout=mock.ANY)