mirror of
https://github.com/apache/superset.git
synced 2026-04-14 13:44:46 +00:00
fix: validate DB-specific parameters (#15155)
* fix: validate DB-specific parameters * Fix lint * Update test * Fix lint/test * Fix lint * Update superset/databases/api.py
This commit is contained in:
@@ -1674,14 +1674,11 @@ class TestDatabaseApi(SupersetTestCase):
|
||||
assert response == {
|
||||
"errors": [
|
||||
{
|
||||
"message": "An error happened when validating the request",
|
||||
"message": "Missing data for required field.",
|
||||
"error_type": "INVALID_PAYLOAD_SCHEMA_ERROR",
|
||||
"level": "error",
|
||||
"extra": {
|
||||
"messages": {
|
||||
"engine": ["Missing data for required field."],
|
||||
"foo": ["Unknown field."],
|
||||
},
|
||||
"invalid": ["engine"],
|
||||
"issue_codes": [
|
||||
{
|
||||
"code": 1020,
|
||||
@@ -1689,7 +1686,21 @@ class TestDatabaseApi(SupersetTestCase):
|
||||
}
|
||||
],
|
||||
},
|
||||
}
|
||||
},
|
||||
{
|
||||
"message": "Unknown field.",
|
||||
"error_type": "INVALID_PAYLOAD_SCHEMA_ERROR",
|
||||
"level": "error",
|
||||
"extra": {
|
||||
"invalid": ["foo"],
|
||||
"issue_codes": [
|
||||
{
|
||||
"code": 1020,
|
||||
"message": "Issue 1020 - The submitted payload has the incorrect schema.",
|
||||
}
|
||||
],
|
||||
},
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1733,6 +1744,77 @@ class TestDatabaseApi(SupersetTestCase):
|
||||
]
|
||||
}
|
||||
|
||||
@mock.patch("superset.db_engine_specs.base.is_hostname_valid")
|
||||
@mock.patch("superset.db_engine_specs.base.is_port_open")
|
||||
@mock.patch("superset.databases.api.ValidateDatabaseParametersCommand")
|
||||
def test_validate_parameters_valid_payload(
|
||||
self, ValidateDatabaseParametersCommand, is_port_open, is_hostname_valid
|
||||
):
|
||||
is_hostname_valid.return_value = True
|
||||
is_port_open.return_value = True
|
||||
|
||||
self.login(username="admin")
|
||||
url = "api/v1/database/validate_parameters"
|
||||
payload = {
|
||||
"engine": "postgresql",
|
||||
"parameters": defaultdict(dict),
|
||||
}
|
||||
payload["parameters"].update(
|
||||
{
|
||||
"host": "localhost",
|
||||
"port": 6789,
|
||||
"username": "superset",
|
||||
"password": "XXX",
|
||||
"database": "test",
|
||||
"query": {},
|
||||
}
|
||||
)
|
||||
rv = self.client.post(url, json=payload)
|
||||
response = json.loads(rv.data.decode("utf-8"))
|
||||
|
||||
assert rv.status_code == 200
|
||||
assert response == {"message": "OK"}
|
||||
|
||||
def test_validate_parameters_invalid_port(self):
|
||||
self.login(username="admin")
|
||||
url = "api/v1/database/validate_parameters"
|
||||
payload = {
|
||||
"engine": "postgresql",
|
||||
"parameters": defaultdict(dict),
|
||||
}
|
||||
payload["parameters"].update(
|
||||
{
|
||||
"host": "localhost",
|
||||
"port": "string",
|
||||
"username": "superset",
|
||||
"password": "XXX",
|
||||
"database": "test",
|
||||
"query": {},
|
||||
}
|
||||
)
|
||||
rv = self.client.post(url, json=payload)
|
||||
response = json.loads(rv.data.decode("utf-8"))
|
||||
|
||||
assert rv.status_code == 422
|
||||
assert response == {
|
||||
"errors": [
|
||||
{
|
||||
"message": "Not a valid integer.",
|
||||
"error_type": "INVALID_PAYLOAD_SCHEMA_ERROR",
|
||||
"level": "error",
|
||||
"extra": {
|
||||
"invalid": ["port"],
|
||||
"issue_codes": [
|
||||
{
|
||||
"code": 1020,
|
||||
"message": "Issue 1020 - The submitted payload has the incorrect schema.",
|
||||
}
|
||||
],
|
||||
},
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@mock.patch("superset.db_engine_specs.base.is_hostname_valid")
|
||||
def test_validate_parameters_invalid_host(self, is_hostname_valid):
|
||||
is_hostname_valid.return_value = False
|
||||
|
||||
Reference in New Issue
Block a user