mirror of
https://github.com/apache/superset.git
synced 2026-04-20 08:34:37 +00:00
feat(bigquery): Custom message when Service Account doesnt have the correct Roles and Permissions (#21838)
This commit is contained in:
committed by
GitHub
parent
059e53a39f
commit
203b289021
@@ -525,11 +525,55 @@ class TestDatabaseApi(SupersetTestCase):
|
||||
self.login(username="admin")
|
||||
response = self.client.post(uri, json=database_data)
|
||||
response_data = json.loads(response.data.decode("utf-8"))
|
||||
expected_response = {
|
||||
"message": "Connection failed, please check your connection settings"
|
||||
superset_error_mysql = SupersetError(
|
||||
message='Either the username "superset" or the password is incorrect.',
|
||||
error_type="CONNECTION_ACCESS_DENIED_ERROR",
|
||||
level="error",
|
||||
extra={
|
||||
"engine_name": "MySQL",
|
||||
"invalid": ["username", "password"],
|
||||
"issue_codes": [
|
||||
{
|
||||
"code": 1014,
|
||||
"message": (
|
||||
"Issue 1014 - Either the username or the password is wrong."
|
||||
),
|
||||
},
|
||||
{
|
||||
"code": 1015,
|
||||
"message": (
|
||||
"Issue 1015 - Issue 1015 - Either the database is spelled incorrectly or does not exist."
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
)
|
||||
superset_error_postgres = SupersetError(
|
||||
message='The password provided for username "superset" is incorrect.',
|
||||
error_type="CONNECTION_INVALID_PASSWORD_ERROR",
|
||||
level="error",
|
||||
extra={
|
||||
"engine_name": "PostgreSQL",
|
||||
"invalid": ["username", "password"],
|
||||
"issue_codes": [
|
||||
{
|
||||
"code": 1013,
|
||||
"message": (
|
||||
"Issue 1013 - The password provided when connecting to a database is not valid."
|
||||
),
|
||||
}
|
||||
],
|
||||
},
|
||||
)
|
||||
expected_response_mysql = {"errors": [dataclasses.asdict(superset_error_mysql)]}
|
||||
expected_response_postgres = {
|
||||
"errors": [dataclasses.asdict(superset_error_postgres)]
|
||||
}
|
||||
self.assertEqual(response.status_code, 422)
|
||||
self.assertEqual(response_data, expected_response)
|
||||
self.assertEqual(response.status_code, 500)
|
||||
if example_db.backend == "mysql":
|
||||
self.assertEqual(response_data, expected_response_mysql)
|
||||
else:
|
||||
self.assertEqual(response_data, expected_response_postgres)
|
||||
|
||||
def test_update_database(self):
|
||||
"""
|
||||
@@ -1516,7 +1560,7 @@ class TestDatabaseApi(SupersetTestCase):
|
||||
url = "api/v1/database/test_connection/"
|
||||
rv = self.post_assert_metric(url, data, "test_connection")
|
||||
|
||||
assert rv.status_code == 422
|
||||
assert rv.status_code == 500
|
||||
assert rv.headers["Content-Type"] == "application/json; charset=utf-8"
|
||||
response = json.loads(rv.data.decode("utf-8"))
|
||||
expected_response = {"errors": [dataclasses.asdict(superset_error)]}
|
||||
|
||||
@@ -32,7 +32,6 @@ from superset.databases.commands.exceptions import (
|
||||
DatabaseNotFoundError,
|
||||
DatabaseSecurityUnsafeError,
|
||||
DatabaseTestConnectionDriverError,
|
||||
DatabaseTestConnectionFailedError,
|
||||
DatabaseTestConnectionUnexpectedError,
|
||||
)
|
||||
from superset.databases.commands.export import ExportDatabasesCommand
|
||||
@@ -683,7 +682,7 @@ class TestTestConnectionDatabaseCommand(SupersetTestCase):
|
||||
json_payload = {"sqlalchemy_uri": db_uri}
|
||||
command_without_db_name = TestConnectionDatabaseCommand(json_payload)
|
||||
|
||||
with pytest.raises(DatabaseTestConnectionFailedError) as excinfo:
|
||||
with pytest.raises(SupersetErrorsException) as excinfo:
|
||||
command_without_db_name.run()
|
||||
assert (
|
||||
excinfo.value.errors[0].error_type
|
||||
@@ -757,7 +756,7 @@ class TestTestConnectionDatabaseCommand(SupersetTestCase):
|
||||
json_payload = {"sqlalchemy_uri": db_uri}
|
||||
command_without_db_name = TestConnectionDatabaseCommand(json_payload)
|
||||
|
||||
with pytest.raises(DatabaseTestConnectionFailedError) as excinfo:
|
||||
with pytest.raises(SupersetErrorsException) as excinfo:
|
||||
command_without_db_name.run()
|
||||
assert str(excinfo.value) == (
|
||||
"Connection failed, please check your connection settings"
|
||||
|
||||
@@ -246,11 +246,11 @@ class TestBigQueryDbEngineSpec(TestDbEngineSpec):
|
||||
)
|
||||
|
||||
def test_extract_errors(self):
|
||||
msg = "403 POST https://bigquery.googleapis.com/bigquery/v2/projects/test-keel-310804/jobs?prettyPrint=false: Access Denied: Project User does not have bigquery.jobs.create permission in project profound-keel-310804"
|
||||
msg = "403 POST https://bigquery.googleapis.com/bigquery/v2/projects/test-keel-310804/jobs?prettyPrint=false: Access Denied: Project profound-keel-310804: User does not have bigquery.jobs.create permission in project profound-keel-310804"
|
||||
result = BigQueryEngineSpec.extract_errors(Exception(msg))
|
||||
assert result == [
|
||||
SupersetError(
|
||||
message="We were unable to connect to your database. Please confirm that your service account has the Viewer and Job User roles on the project.",
|
||||
message='Unable to connect. Verify that the following roles are set on the service account: "BigQuery Data Viewer", "BigQuery Metadata Viewer", "BigQuery Job User" and the following permissions are set "bigquery.readsessions.create", "bigquery.readsessions.getData"',
|
||||
error_type=SupersetErrorType.CONNECTION_DATABASE_PERMISSIONS_ERROR,
|
||||
level=ErrorLevel.ERROR,
|
||||
extra={
|
||||
|
||||
Reference in New Issue
Block a user