import unittest from databricks.sql.auth.auth import AccessTokenAuthProvider, BasicAuthProvider, AuthProvider, ExternalAuthProvider from databricks.sql.auth.auth import get_python_sql_connector_auth_provider from databricks.sql.auth.authenticators import CredentialsProvider, HeaderFactory class Auth(unittest.TestCase): def test_access_token_provider(self): access_token = "aBc2" auth = AccessTokenAuthProvider(access_token=access_token) http_request = {'myKey': 'myVal'} auth.add_headers(http_request) self.assertEqual(http_request['Authorization'], 'Bearer aBc2') self.assertEqual(len(http_request.keys()), 2) self.assertEqual(http_request['myKey'], 'myVal') def test_basic_auth_provider(self): username = "moderakh" password = "Elevate Databricks 123!!!" auth = BasicAuthProvider(username=username, password=password) http_request = {'myKey': 'myVal'} auth.add_headers(http_request) self.assertEqual(http_request['Authorization'], 'Basic bW9kZXJha2g6RWxldmF0ZSBEYXRhYnJpY2tzIDEyMyEhIQ==') self.assertEqual(len(http_request.keys()), 2) self.assertEqual(http_request['myKey'], 'myVal') def test_noop_auth_provider(self): auth = AuthProvider() http_request = {'myKey': 'myVal'} auth.add_headers(http_request) self.assertEqual(len(http_request.keys()), 1) self.assertEqual(http_request['myKey'], 'myVal') def test_external_provider(self): class MyProvider(CredentialsProvider): def auth_type(self) -> str: return "mine" def __call__(self, *args, **kwargs) -> HeaderFactory: return lambda: {"foo": "bar"} auth = ExternalAuthProvider(MyProvider()) http_request = {'myKey': 'myVal'} auth.add_headers(http_request) self.assertEqual(http_request['foo'], 'bar') self.assertEqual(len(http_request.keys()), 2) self.assertEqual(http_request['myKey'], 'myVal') def test_get_python_sql_connector_auth_provider_access_token(self): hostname = "moderakh-test.cloud.databricks.com" kwargs = {'access_token': 'dpi123'} auth_provider = get_python_sql_connector_auth_provider(hostname, **kwargs) self.assertTrue(type(auth_provider).__name__, "AccessTokenAuthProvider") headers = {} auth_provider.add_headers(headers) self.assertEqual(headers['Authorization'], 'Bearer dpi123') def test_get_python_sql_connector_auth_provider_external(self): class MyProvider(CredentialsProvider): def auth_type(self) -> str: return "mine" def __call__(self, *args, **kwargs) -> HeaderFactory: return lambda: {"foo": "bar"} hostname = "moderakh-test.cloud.databricks.com" kwargs = {'credentials_provider': MyProvider()} auth_provider = get_python_sql_connector_auth_provider(hostname, **kwargs) self.assertTrue(type(auth_provider).__name__, "ExternalAuthProvider") headers = {} auth_provider.add_headers(headers) self.assertEqual(headers['foo'], 'bar') def test_get_python_sql_connector_auth_provider_username_password(self): username = "moderakh" password = "Elevate Databricks 123!!!" hostname = "moderakh-test.cloud.databricks.com" kwargs = {'_username': username, '_password': password} auth_provider = get_python_sql_connector_auth_provider(hostname, **kwargs) self.assertTrue(type(auth_provider).__name__, "BasicAuthProvider") headers = {} auth_provider.add_headers(headers) self.assertEqual(headers['Authorization'], 'Basic bW9kZXJha2g6RWxldmF0ZSBEYXRhYnJpY2tzIDEyMyEhIQ==') def test_get_python_sql_connector_auth_provider_noop(self): tls_client_cert_file = "fake.cert" use_cert_as_auth = "abc" hostname = "moderakh-test.cloud.databricks.com" kwargs = {'_tls_client_cert_file': tls_client_cert_file, '_use_cert_as_auth': use_cert_as_auth} auth_provider = get_python_sql_connector_auth_provider(hostname, **kwargs) self.assertTrue(type(auth_provider).__name__, "CredentialProvider")