mirror of
https://github.com/apache/superset.git
synced 2026-04-19 08:04:53 +00:00
feat: Add Ocient support (#22812)
Co-authored-by: jwilliams-ocient <60358443+jwilliams-ocient@users.noreply.github.com> Co-authored-by: Jordan Williams <jwilliams@ocient.com> Co-authored-by: rmasters1 <100157128+rmasters1@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
669e1802a6
commit
adde66785c
215
tests/unit_tests/db_engine_specs/test_ocient.py
Normal file
215
tests/unit_tests/db_engine_specs/test_ocient.py
Normal file
@@ -0,0 +1,215 @@
|
||||
# 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.
|
||||
|
||||
# pylint: disable=import-outside-toplevel
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Dict, List, Tuple
|
||||
|
||||
import pytest
|
||||
|
||||
from superset.errors import ErrorLevel, SupersetError, SupersetErrorType
|
||||
|
||||
# (msg,expected)
|
||||
MARSHALED_OCIENT_ERRORS: List[Tuple[str, SupersetError]] = [
|
||||
(
|
||||
"The referenced user does not exist (User 'mj' not found)",
|
||||
SupersetError(
|
||||
message='The username "mj" does not exist.',
|
||||
error_type=SupersetErrorType.CONNECTION_INVALID_USERNAME_ERROR,
|
||||
level=ErrorLevel.ERROR,
|
||||
extra={
|
||||
"engine_name": "Ocient",
|
||||
"issue_codes": [
|
||||
{
|
||||
"code": 1012,
|
||||
"message": "Issue 1012 - The username provided when connecting to a database is not valid.",
|
||||
}
|
||||
],
|
||||
},
|
||||
),
|
||||
),
|
||||
(
|
||||
"The userid/password combination was not valid (Incorrect password for user)",
|
||||
SupersetError(
|
||||
message="The user/password combination is not valid (Incorrect password for user).",
|
||||
error_type=SupersetErrorType.CONNECTION_INVALID_PASSWORD_ERROR,
|
||||
level=ErrorLevel.ERROR,
|
||||
extra={
|
||||
"engine_name": "Ocient",
|
||||
"issue_codes": [
|
||||
{
|
||||
"code": 1013,
|
||||
"message": "Issue 1013 - The password provided when connecting to a database is not valid.",
|
||||
}
|
||||
],
|
||||
},
|
||||
),
|
||||
),
|
||||
(
|
||||
"No database named 'bulls' exists",
|
||||
SupersetError(
|
||||
message='Could not connect to database: "bulls"',
|
||||
error_type=SupersetErrorType.CONNECTION_UNKNOWN_DATABASE_ERROR,
|
||||
level=ErrorLevel.ERROR,
|
||||
extra={
|
||||
"engine_name": "Ocient",
|
||||
"issue_codes": [
|
||||
{
|
||||
"code": 1015,
|
||||
"message": "Issue 1015 - Either the database is spelled incorrectly or does not exist.",
|
||||
}
|
||||
],
|
||||
},
|
||||
),
|
||||
),
|
||||
(
|
||||
"Unable to connect to unitedcenter.com:4050",
|
||||
SupersetError(
|
||||
message='Could not resolve hostname: "unitedcenter.com".',
|
||||
error_type=SupersetErrorType.CONNECTION_INVALID_HOSTNAME_ERROR,
|
||||
level=ErrorLevel.ERROR,
|
||||
extra={
|
||||
"engine_name": "Ocient",
|
||||
"issue_codes": [
|
||||
{
|
||||
"code": 1007,
|
||||
"message": "Issue 1007 - The hostname provided can't be resolved.",
|
||||
}
|
||||
],
|
||||
},
|
||||
),
|
||||
),
|
||||
(
|
||||
"Port out of range 0-65535",
|
||||
SupersetError(
|
||||
message="Port out of range 0-65535",
|
||||
error_type=SupersetErrorType.CONNECTION_INVALID_PORT_ERROR,
|
||||
level=ErrorLevel.ERROR,
|
||||
extra={
|
||||
"engine_name": "Ocient",
|
||||
"issue_codes": [
|
||||
{
|
||||
"code": 1034,
|
||||
"message": "Issue 1034 - The port number is invalid.",
|
||||
}
|
||||
],
|
||||
},
|
||||
),
|
||||
),
|
||||
(
|
||||
"An invalid connection string attribute was specified (failed to decrypt cipher text)",
|
||||
SupersetError(
|
||||
message="Invalid Connection String: Expecting String of the form 'ocient://user:pass@host:port/database'.",
|
||||
error_type=SupersetErrorType.GENERIC_DB_ENGINE_ERROR,
|
||||
level=ErrorLevel.ERROR,
|
||||
extra={
|
||||
"engine_name": "Ocient",
|
||||
"issue_codes": [
|
||||
{
|
||||
"code": 1002,
|
||||
"message": "Issue 1002 - The database returned an unexpected error.",
|
||||
}
|
||||
],
|
||||
},
|
||||
),
|
||||
),
|
||||
(
|
||||
"There is a syntax error in your statement (extraneous input 'foo bar baz' expecting {<EOF>, 'trace', 'using'})",
|
||||
SupersetError(
|
||||
message="Syntax Error: extraneous input \"foo bar baz\" expecting \"{<EOF>, 'trace', 'using'}",
|
||||
error_type=SupersetErrorType.SYNTAX_ERROR,
|
||||
level=ErrorLevel.ERROR,
|
||||
extra={
|
||||
"engine_name": "Ocient",
|
||||
"issue_codes": [
|
||||
{
|
||||
"code": 1030,
|
||||
"message": "Issue 1030 - The query has a syntax error.",
|
||||
}
|
||||
],
|
||||
},
|
||||
),
|
||||
),
|
||||
(
|
||||
"There is a syntax error in your statement (mismatched input 'to' expecting {<EOF>, 'trace', 'using'})",
|
||||
SupersetError(
|
||||
message="Syntax Error: mismatched input \"to\" expecting \"{<EOF>, 'trace', 'using'}",
|
||||
error_type=SupersetErrorType.SYNTAX_ERROR,
|
||||
level=ErrorLevel.ERROR,
|
||||
extra={
|
||||
"engine_name": "Ocient",
|
||||
"issue_codes": [
|
||||
{
|
||||
"code": 1030,
|
||||
"message": "Issue 1030 - The query has a syntax error.",
|
||||
}
|
||||
],
|
||||
},
|
||||
),
|
||||
),
|
||||
(
|
||||
"The referenced table or view 'goats' does not exist",
|
||||
SupersetError(
|
||||
message='Table or View "goats" does not exist.',
|
||||
error_type=SupersetErrorType.TABLE_DOES_NOT_EXIST_ERROR,
|
||||
level=ErrorLevel.ERROR,
|
||||
extra={
|
||||
"engine_name": "Ocient",
|
||||
"issue_codes": [
|
||||
{
|
||||
"code": 1003,
|
||||
"message": "Issue 1003 - There is a syntax error in the SQL query. Perhaps there was a misspelling or a typo.",
|
||||
},
|
||||
{
|
||||
"code": 1005,
|
||||
"message": "Issue 1005 - The table was deleted or renamed in the database.",
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
),
|
||||
(
|
||||
"The reference to column 'goats' is not valid",
|
||||
SupersetError(
|
||||
message='Invalid reference to column: "goats"',
|
||||
error_type=SupersetErrorType.COLUMN_DOES_NOT_EXIST_ERROR,
|
||||
level=ErrorLevel.ERROR,
|
||||
extra={
|
||||
"engine_name": "Ocient",
|
||||
"issue_codes": [
|
||||
{
|
||||
"code": 1003,
|
||||
"message": "Issue 1003 - There is a syntax error in the SQL query. Perhaps there was a misspelling or a typo.",
|
||||
},
|
||||
{
|
||||
"code": 1004,
|
||||
"message": "Issue 1004 - The column was deleted or renamed in the database.",
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
@pytest.mark.parametrize("msg,expected", MARSHALED_OCIENT_ERRORS)
|
||||
def test_connection_errors(msg: str, expected: SupersetError) -> None:
|
||||
from superset.db_engine_specs.ocient import OcientEngineSpec
|
||||
|
||||
result = OcientEngineSpec.extract_errors(Exception(msg))
|
||||
assert result == [expected]
|
||||
Reference in New Issue
Block a user