Skip to content

Commit f8ca1cf

Browse files
authored
chore(server/tests/snowflake): use keypair auth (#2460)
* chore(server/tests/snowflake): use keypair auth Signed-off-by: Luka Peschke <[email protected]> * chore: add private key to CI Signed-off-by: Luka Peschke <[email protected]> --------- Signed-off-by: Luka Peschke <[email protected]>
1 parent c9be7fb commit f8ca1cf

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

.github/workflows/ci-server.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ jobs:
5656
SNOWFLAKE_ACCOUNT: '${{ secrets.SNOWFLAKE_ACCOUNT}}'
5757
SNOWFLAKE_SCHEMA: '${{ secrets.SNOWFLAKE_SCHEMA}}'
5858
SNOWFLAKE_WAREHOUSE: '${{ secrets.SNOWFLAKE_WAREHOUSE}}'
59+
SNOWFLAKE_PRIVATE_KEY: '${{ secrets.SNOWFLAKE_PRIVATE_KEY}}'
5960
# Redshift
6061
REDSHIFT_USER: '${{ secrets.REDSHIFT_USER }}'
6162
REDSHIFT_PASSWORD: '${{ secrets.REDSHIFT_PASSWORD }}'

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@
77
# Secrets
88
bigquery-credentials.json
99
.env
10+
snowflake_rsa_key.p8

server/tests/backends/sql_translator_integration_tests/test_sql_snowflake_translator_steps.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
from io import StringIO
44
from os import environ
55
from typing import Any
6-
from urllib.parse import quote
76

87
import pandas as pd
98
import pytest
9+
from cryptography.hazmat.backends import default_backend
10+
from cryptography.hazmat.primitives import serialization
1011
from snowflake.sqlalchemy import URL
1112
from sqlalchemy import create_engine, text
1213

@@ -21,14 +22,25 @@
2122
def engine():
2223
url = URL(
2324
user=environ["SNOWFLAKE_USER"],
24-
password=quote(environ["SNOWFLAKE_PASSWORD"]),
2525
database=environ["SNOWFLAKE_DATABASE"],
2626
account=environ["SNOWFLAKE_ACCOUNT"],
2727
schema=environ["SNOWFLAKE_SCHEMA"],
2828
warehouse=environ["SNOWFLAKE_WAREHOUSE"],
2929
)
30-
engine = create_engine(url)
30+
pk_pem = environ["SNOWFLAKE_PRIVATE_KEY"].encode()
31+
pk_password = environ["SNOWFLAKE_PASSWORD"]
32+
private_key = serialization.load_pem_private_key(pk_pem, password=pk_password.encode(), backend=default_backend())
33+
34+
connect_args = {
35+
"private_key": private_key.private_bytes(
36+
encoding=serialization.Encoding.DER,
37+
format=serialization.PrivateFormat.PKCS8,
38+
encryption_algorithm=serialization.NoEncryption(),
39+
)
40+
}
41+
engine = create_engine(url, connect_args=connect_args)
3142
connection = engine.connect()
43+
3244
yield connection
3345
connection.close()
3446

0 commit comments

Comments
 (0)