Skip to content

Commit a796089

Browse files
authored
ci(FIR-47720): Fix secret leak (#108)
1 parent e7a96f2 commit a796089

File tree

3 files changed

+32
-11
lines changed

3 files changed

+32
-11
lines changed

tests/integration/__init__.py

Whitespace-only changes.

tests/integration/conftest.py

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,25 @@
1717
CLIENT_KEY_ENV = "CLIENT_SECRET"
1818

1919

20+
class Secret:
21+
"""
22+
Class to hold sensitive data in testing. This prevents passwords
23+
and such to be printed in logs or any other reports.
24+
More info: https://github.com/pytest-dev/pytest/issues/8613
25+
NOTE: be careful, assert Secret("") == "" would still print
26+
on failure
27+
"""
28+
29+
def __init__(self, value):
30+
self.value = value
31+
32+
def __repr__(self):
33+
return "Secret(********)"
34+
35+
def __str___(self):
36+
return "*******"
37+
38+
2039
def must_env(var_name: str) -> str:
2140
assert var_name in environ, f"Expected {var_name} to be provided in environment"
2241
LOGGER.info(f"{var_name}: {environ[var_name]}")
@@ -39,8 +58,8 @@ def client_id() -> str:
3958

4059

4160
@fixture(scope="session")
42-
def client_key() -> str:
43-
return urllib.parse.quote_plus(must_env(CLIENT_KEY_ENV))
61+
def client_key() -> Secret:
62+
return Secret(urllib.parse.quote_plus(must_env(CLIENT_KEY_ENV)))
4463

4564

4665
@fixture(scope="session")
@@ -51,27 +70,27 @@ def account_name() -> str:
5170
@fixture(scope="session")
5271
def engine(
5372
client_id: str,
54-
client_key: str,
73+
client_key: Secret,
5574
database_name: str,
5675
engine_name: str,
5776
account_name: str,
5877
) -> Engine:
5978
return create_engine(
60-
f"firebolt://{client_id}:{client_key}@{database_name}/{engine_name}"
79+
f"firebolt://{client_id}:{client_key.value}@{database_name}/{engine_name}"
6180
+ f"?account_name={account_name}"
6281
)
6382

6483

6584
@fixture(scope="session")
6685
def engine_service_account(
6786
client_id: str,
68-
client_key: str,
87+
client_key: Secret,
6988
database_name: str,
7089
engine_name: str,
7190
account_name: str,
7291
) -> Engine:
7392
return create_engine(
74-
f"firebolt://{client_id}:{client_key}@{database_name}/{engine_name}"
93+
f"firebolt://{client_id}:{client_key.value}@{database_name}/{engine_name}"
7594
+ f"?account_name={account_name}"
7695
)
7796

@@ -91,14 +110,14 @@ def connection_service_account(engine_service_account: Engine) -> Connection:
91110
@fixture()
92111
def async_engine(
93112
client_id: str,
94-
client_key: str,
113+
client_key: Secret,
95114
database_name: str,
96115
engine_name: str,
97116
account_name: str,
98117
) -> Engine:
99118
return create_async_engine(
100-
f"asyncio+firebolt://{client_id}:{client_key}@{database_name}/{engine_name}"
101-
+ f"?account_name={account_name}"
119+
f"asyncio+firebolt://{client_id}:{client_key.value}@{database_name}/"
120+
+ f"{engine_name}?account_name={account_name}"
102121
)
103122

104123

tests/integration/test_sqlalchemy_integration.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
from sqlalchemy.engine.base import Connection, Engine
77
from sqlalchemy.types import ARRAY, INTEGER, TypeEngine
88

9+
from .conftest import Secret # noqa: I252 relative import
10+
911

1012
@pytest.mark.usefixtures("setup_test_tables")
1113
class TestFireboltDialect:
@@ -25,13 +27,13 @@ def test_create_ex_table(
2527
def test_set_params(
2628
self,
2729
client_id: str,
28-
client_key: str,
30+
client_key: Secret,
2931
database_name: str,
3032
engine_name: str,
3133
account_name: str,
3234
):
3335
engine = create_engine(
34-
f"firebolt://{client_id}:{client_key}@{database_name}/{engine_name}"
36+
f"firebolt://{client_id}:{client_key.value}@{database_name}/{engine_name}"
3537
+ f"?account_name={account_name}"
3638
)
3739
with engine.connect() as connection:

0 commit comments

Comments
 (0)