mirror of
https://github.com/apache/superset.git
synced 2026-04-12 20:57:55 +00:00
feat: better error message when adding DBs (#13601)
* WIP * Adding tests * Add unit tests * Show error message * Fix lint * Fix after rebase
This commit is contained in:
@@ -26,6 +26,7 @@ import prison
|
||||
import pytest
|
||||
import yaml
|
||||
|
||||
from sqlalchemy.engine.url import make_url
|
||||
from sqlalchemy.sql import func
|
||||
|
||||
from superset import db, security_manager
|
||||
@@ -866,6 +867,93 @@ class TestDatabaseApi(SupersetTestCase):
|
||||
|
||||
app.config["PREVENT_UNSAFE_DB_CONNECTIONS"] = False
|
||||
|
||||
@mock.patch("superset.databases.commands.test_connection.is_hostname_valid",)
|
||||
def test_test_connection_failed_invalid_hostname(self, mock_is_hostname_valid):
|
||||
"""
|
||||
Database API: Test test connection failed due to invalid hostname
|
||||
"""
|
||||
mock_is_hostname_valid.return_value = False
|
||||
|
||||
self.login("admin")
|
||||
data = {
|
||||
"sqlalchemy_uri": "postgres://username:password@invalidhostname:12345/db",
|
||||
"database_name": "examples",
|
||||
"impersonate_user": False,
|
||||
"server_cert": None,
|
||||
}
|
||||
url = "api/v1/database/test_connection"
|
||||
rv = self.post_assert_metric(url, data, "test_connection")
|
||||
|
||||
assert rv.status_code == 400
|
||||
assert rv.headers["Content-Type"] == "application/json; charset=utf-8"
|
||||
response = json.loads(rv.data.decode("utf-8"))
|
||||
expected_response = {
|
||||
"message": 'Unable to resolve hostname "invalidhostname".',
|
||||
}
|
||||
assert response == expected_response
|
||||
|
||||
@mock.patch("superset.databases.commands.test_connection.is_hostname_valid")
|
||||
@mock.patch("superset.databases.commands.test_connection.is_port_open")
|
||||
@mock.patch("superset.databases.commands.test_connection.is_host_up")
|
||||
def test_test_connection_failed_closed_port(
|
||||
self, mock_is_host_up, mock_is_port_open, mock_is_hostname_valid
|
||||
):
|
||||
"""
|
||||
Database API: Test test connection failed due to closed port.
|
||||
"""
|
||||
mock_is_hostname_valid.return_value = True
|
||||
mock_is_port_open.return_value = False
|
||||
mock_is_host_up.return_value = True
|
||||
|
||||
self.login("admin")
|
||||
data = {
|
||||
"sqlalchemy_uri": "postgres://username:password@localhost:12345/db",
|
||||
"database_name": "examples",
|
||||
"impersonate_user": False,
|
||||
"server_cert": None,
|
||||
}
|
||||
url = "api/v1/database/test_connection"
|
||||
rv = self.post_assert_metric(url, data, "test_connection")
|
||||
|
||||
assert rv.status_code == 400
|
||||
assert rv.headers["Content-Type"] == "application/json; charset=utf-8"
|
||||
response = json.loads(rv.data.decode("utf-8"))
|
||||
expected_response = {
|
||||
"message": "The host localhost is up, but the port 12345 is closed.",
|
||||
}
|
||||
assert response == expected_response
|
||||
|
||||
@mock.patch("superset.databases.commands.test_connection.is_hostname_valid")
|
||||
@mock.patch("superset.databases.commands.test_connection.is_port_open")
|
||||
@mock.patch("superset.databases.commands.test_connection.is_host_up")
|
||||
def test_test_connection_failed_host_down(
|
||||
self, mock_is_host_up, mock_is_port_open, mock_is_hostname_valid
|
||||
):
|
||||
"""
|
||||
Database API: Test test connection failed due to host being down.
|
||||
"""
|
||||
mock_is_hostname_valid.return_value = True
|
||||
mock_is_port_open.return_value = False
|
||||
mock_is_host_up.return_value = False
|
||||
|
||||
self.login("admin")
|
||||
data = {
|
||||
"sqlalchemy_uri": "postgres://username:password@localhost:12345/db",
|
||||
"database_name": "examples",
|
||||
"impersonate_user": False,
|
||||
"server_cert": None,
|
||||
}
|
||||
url = "api/v1/database/test_connection"
|
||||
rv = self.post_assert_metric(url, data, "test_connection")
|
||||
|
||||
assert rv.status_code == 400
|
||||
assert rv.headers["Content-Type"] == "application/json; charset=utf-8"
|
||||
response = json.loads(rv.data.decode("utf-8"))
|
||||
expected_response = {
|
||||
"message": "The host localhost might be down, ond can't be reached on port 12345.",
|
||||
}
|
||||
assert response == expected_response
|
||||
|
||||
@pytest.mark.usefixtures(
|
||||
"load_unicode_dashboard_with_position",
|
||||
"load_energy_table_with_slice",
|
||||
|
||||
Reference in New Issue
Block a user