|
7 | 7 |
|
8 | 8 | from trino.auth import BasicAuthentication
|
9 | 9 | from trino.dbapi import Connection
|
10 |
| -from trino.sqlalchemy.dialect import TrinoDialect |
| 10 | +from trino.sqlalchemy.dialect import CertificateAuthentication, JWTAuthentication, TrinoDialect |
11 | 11 | from trino.transaction import IsolationLevel
|
12 | 12 |
|
13 | 13 |
|
14 | 14 | class TestTrinoDialect:
|
15 | 15 | def setup(self):
|
16 | 16 | self.dialect = TrinoDialect()
|
17 | 17 |
|
18 |
| - # TODO: Test more authentication methods and URL params (https://github.com/trinodb/trino-python-client/issues/106) |
19 | 18 | @pytest.mark.parametrize(
|
20 | 19 | "url, expected_args, expected_kwargs",
|
21 | 20 | [
|
@@ -72,3 +71,40 @@ def test_isolation_level(self):
|
72 | 71 |
|
73 | 72 | isolation_level = self.dialect.get_isolation_level(dbapi_conn)
|
74 | 73 | assert isolation_level == "SERIALIZABLE"
|
| 74 | + |
| 75 | + |
| 76 | +def test_trino_connection_basic_auth(): |
| 77 | + dialect = TrinoDialect() |
| 78 | + username = 'trino-user' |
| 79 | + password = 'trino-bunny' |
| 80 | + url = make_url(f'trino://{username}:{password}@host') |
| 81 | + _, cparams = dialect.create_connect_args(url) |
| 82 | + |
| 83 | + assert cparams['http_scheme'] == "https" |
| 84 | + assert isinstance(cparams['auth'], BasicAuthentication) |
| 85 | + assert cparams['auth']._username == username |
| 86 | + assert cparams['auth']._password == password |
| 87 | + |
| 88 | + |
| 89 | +def test_trino_connection_jwt_auth(): |
| 90 | + dialect = TrinoDialect() |
| 91 | + access_token = 'sample-token' |
| 92 | + url = make_url(f'trino://host/?access_token={access_token}') |
| 93 | + _, cparams = dialect.create_connect_args(url) |
| 94 | + |
| 95 | + assert cparams['http_scheme'] == "https" |
| 96 | + assert isinstance(cparams['auth'], JWTAuthentication) |
| 97 | + assert cparams['auth'].token == access_token |
| 98 | + |
| 99 | + |
| 100 | +def test_trino_connection_certificate_auth(): |
| 101 | + dialect = TrinoDialect() |
| 102 | + cert = '/path/to/cert.pem' |
| 103 | + key = '/path/to/key.pem' |
| 104 | + url = make_url(f'trino://host/?cert={cert}&key={key}') |
| 105 | + _, cparams = dialect.create_connect_args(url) |
| 106 | + |
| 107 | + assert cparams['http_scheme'] == "https" |
| 108 | + assert isinstance(cparams['auth'], CertificateAuthentication) |
| 109 | + assert cparams['auth']._cert == cert |
| 110 | + assert cparams['auth']._key == key |
0 commit comments