This is an automated email from the ASF dual-hosted git repository.

dpgaspar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git


The following commit(s) were added to refs/heads/master by this push:
     new f0545bf  fix(databases): test connection api endpoint (#10824)
f0545bf is described below

commit f0545bfe50a42028b5d351753bac86a1512bb188
Author: Lily Kuang <[email protected]>
AuthorDate: Thu Sep 10 13:49:14 2020 -0700

    fix(databases): test connection api endpoint (#10824)
    
    * fix test connection with extra
    
    * fix lint and allow_none server_cert
    
    * update test connection tests
---
 superset/databases/commands/test_connection.py |  5 ++---
 superset/databases/schemas.py                  |  8 ++++++--
 tests/databases/api_tests.py                   | 16 +++++++++++++++-
 3 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/superset/databases/commands/test_connection.py 
b/superset/databases/commands/test_connection.py
index 3bcd5b0..99e6f98 100644
--- a/superset/databases/commands/test_connection.py
+++ b/superset/databases/commands/test_connection.py
@@ -18,7 +18,6 @@ import logging
 from contextlib import closing
 from typing import Any, Dict, Optional
 
-import simplejson as json
 from flask_appbuilder.security.sqla.models import User
 from sqlalchemy import select
 
@@ -46,9 +45,9 @@ class TestConnectionDatabaseCommand(BaseCommand):
 
             database = DatabaseDAO.build_db_for_connection_test(
                 server_cert=self._properties.get("server_cert", ""),
-                extra=json.dumps(self._properties.get("extra", {})),
+                extra=self._properties.get("extra", "{}"),
                 impersonate_user=self._properties.get("impersonate_user", 
False),
-                
encrypted_extra=json.dumps(self._properties.get("encrypted_extra", {})),
+                encrypted_extra=self._properties.get("encrypted_extra", "{}"),
             )
             if database is not None:
                 database.set_sqlalchemy_uri(uri)
diff --git a/superset/databases/schemas.py b/superset/databases/schemas.py
index 859eebb..7dd7bc4 100644
--- a/superset/databases/schemas.py
+++ b/superset/databases/schemas.py
@@ -298,10 +298,14 @@ class DatabaseTestConnectionSchema(Schema):
     impersonate_user = fields.Boolean(description=impersonate_user_description)
     extra = fields.String(description=extra_description, 
validate=extra_validator)
     encrypted_extra = fields.String(
-        description=encrypted_extra_description, 
validate=encrypted_extra_validator
+        description=encrypted_extra_description,
+        validate=encrypted_extra_validator,
+        allow_none=True,
     )
     server_cert = fields.String(
-        description=server_cert_description, validate=server_cert_validator
+        description=server_cert_description,
+        allow_none=True,
+        validate=server_cert_validator,
     )
     sqlalchemy_uri = fields.String(
         description=sqlalchemy_uri_description,
diff --git a/tests/databases/api_tests.py b/tests/databases/api_tests.py
index e07b7ac..9dafb87 100644
--- a/tests/databases/api_tests.py
+++ b/tests/databases/api_tests.py
@@ -656,15 +656,24 @@ class TestDatabaseApi(SupersetTestCase):
         """
         Database API: Test test connection
         """
+        extra = {
+            "metadata_params": {},
+            "engine_params": {},
+            "metadata_cache_timeout": {},
+            "schemas_allowed_for_csv_upload": [],
+        }
         # need to temporarily allow sqlite dbs, teardown will undo this
         app.config["PREVENT_UNSAFE_DB_CONNECTIONS"] = False
         self.login("admin")
         example_db = get_example_database()
         # validate that the endpoint works with the password-masked sqlalchemy 
uri
         data = {
-            "sqlalchemy_uri": example_db.safe_sqlalchemy_uri(),
             "database_name": "examples",
+            "encrypted_extra": "{}",
+            "extra": json.dumps(extra),
             "impersonate_user": False,
+            "sqlalchemy_uri": example_db.safe_sqlalchemy_uri(),
+            "server_cert": ssl_certificate,
         }
         url = f"api/v1/database/test_connection"
         rv = self.post_assert_metric(url, data, "test_connection")
@@ -676,6 +685,8 @@ class TestDatabaseApi(SupersetTestCase):
             "sqlalchemy_uri": example_db.sqlalchemy_uri_decrypted,
             "database_name": "examples",
             "impersonate_user": False,
+            "extra": json.dumps(extra),
+            "server_cert": None,
         }
         rv = self.post_assert_metric(url, data, "test_connection")
         self.assertEqual(rv.status_code, 200)
@@ -691,6 +702,7 @@ class TestDatabaseApi(SupersetTestCase):
             "sqlalchemy_uri": "broken://url",
             "database_name": "examples",
             "impersonate_user": False,
+            "server_cert": None,
         }
         url = f"api/v1/database/test_connection"
         rv = self.post_assert_metric(url, data, "test_connection")
@@ -707,6 +719,7 @@ class TestDatabaseApi(SupersetTestCase):
             "sqlalchemy_uri": "mssql+pymssql://url",
             "database_name": "examples",
             "impersonate_user": False,
+            "server_cert": None,
         }
         rv = self.post_assert_metric(url, data, "test_connection")
         self.assertEqual(rv.status_code, 400)
@@ -729,6 +742,7 @@ class TestDatabaseApi(SupersetTestCase):
             "sqlalchemy_uri": "sqlite:///home/superset/unsafe.db",
             "database_name": "unsafe",
             "impersonate_user": False,
+            "server_cert": None,
         }
         url = f"api/v1/database/test_connection"
         rv = self.post_assert_metric(url, data, "test_connection")

Reply via email to