Skip to content

Commit 0370141

Browse files
committed
tests(conftest): configure unit tests to run without config.ini
1 parent 0d64a65 commit 0370141

File tree

7 files changed

+247
-238
lines changed

7 files changed

+247
-238
lines changed

test/conftest.py

Lines changed: 245 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,245 @@
1+
import configparser
2+
import os
3+
import sys
4+
5+
import pytest # type: ignore
6+
7+
import redshift_connector
8+
9+
conf = configparser.ConfigParser()
10+
root_path = os.path.dirname(os.path.abspath(__file__))
11+
conf.read(root_path + "/config.ini")
12+
13+
14+
# @pytest.hookimpl(tryfirst=True, hookwrapper=True)
15+
# def pytest_runtest_makereport(item, call):
16+
# # execute all other hooks to obtain the report object
17+
# outcome = yield
18+
# rep = outcome.get_result()
19+
#
20+
# # we only look at actual failing test calls, not setup/teardown
21+
# if rep.when == "call" and rep.failed:
22+
# mode = "a" if os.path.exists("failures") else "w"
23+
# with open("failures", mode) as f:
24+
# f.write(rep.longreprtext + "\n")
25+
26+
27+
def _get_default_connection_args():
28+
"""
29+
Helper function defining default database connection parameter values.
30+
Returns
31+
-------
32+
33+
"""
34+
return {
35+
"database": conf.get("ci-cluster", "database", fallback="mock_database"),
36+
"host": conf.get("ci-cluster", "host", fallback="mock_host"),
37+
"port": conf.getint("default-test", "port", fallback="mock_port"),
38+
"user": conf.get("ci-cluster", "test_user", fallback="mock_test_user"),
39+
"password": conf.get("ci-cluster", "test_password", fallback="mock_test_password"),
40+
"ssl": conf.getboolean("default-test", "ssl", fallback="mock_ssl"),
41+
"sslmode": conf.get("default-test", "sslmode", fallback="mock_sslmode"),
42+
"region": conf.get("ci-cluster", "region", fallback="mock_region"),
43+
"cluster_identifier": conf.get("ci-cluster", "cluster_identifier", fallback="mock_cluster_identifier"),
44+
}
45+
46+
47+
def _get_default_iam_connection_args():
48+
args = _get_default_connection_args()
49+
del args["host"]
50+
del args["port"]
51+
args["password"] = ""
52+
return args
53+
54+
55+
@pytest.fixture(scope="class")
56+
def db_kwargs():
57+
return _get_default_connection_args()
58+
59+
60+
def db_groups():
61+
return conf.get("cluster-setup", "groups", fallback="mock_groups").split(sep=",")
62+
63+
64+
@pytest.fixture(scope="class")
65+
def perf_db_kwargs():
66+
db_connect = {
67+
"database": conf.get("performance-database", "database", fallback="mock_database"),
68+
"host": conf.get("performance-database", "host", fallback="mock_host"),
69+
"user": conf.get("performance-database", "user", fallback="mock_user"),
70+
"password": conf.get("performance-database", "password", fallback="mock_password"),
71+
"ssl": conf.getboolean("performance-database", "ssl", fallback="mock_ssl"),
72+
"sslmode": conf.get("performance-database", "sslmode", fallback="mock_sslmode"),
73+
}
74+
75+
return db_connect
76+
77+
78+
@pytest.fixture(scope="class")
79+
def okta_idp():
80+
db_connect = {
81+
"db_user": conf.get("ci-cluster", "test_user", fallback="mock_test_user"),
82+
"password": conf.get("okta-idp", "password", fallback="mock_password"),
83+
"iam": conf.getboolean("okta-idp", "iam", fallback="mock_iam"),
84+
"idp_host": conf.get("okta-idp", "idp_host", fallback="mock_idp_host"),
85+
"user": conf.get("okta-idp", "user", fallback="mock_user"),
86+
"app_id": conf.get("okta-idp", "app_id", fallback="mock_app_id"),
87+
"app_name": conf.get("okta-idp", "app_name", fallback="mock_app_name"),
88+
"credentials_provider": conf.get("okta-idp", "credentials_provider", fallback="OktaCredentialsProvider"),
89+
}
90+
return {**_get_default_iam_connection_args(), **db_connect}
91+
92+
93+
@pytest.fixture(scope="class")
94+
def okta_browser_idp():
95+
db_connect = {
96+
"db_user": conf.get("ci-cluster", "test_user", fallback="mock_test_user"),
97+
"password": conf.get("okta-browser-idp", "password", fallback="mock_password"),
98+
"iam": conf.getboolean("okta-browser-idp", "iam", fallback="mock_iam"),
99+
"user": conf.get("okta-browser-idp", "user", fallback="mock_user"),
100+
"credentials_provider": conf.get(
101+
"okta-browser-idp", "credentials_provider", fallback="SamlCredentialsProvider"
102+
),
103+
"login_url": conf.get("okta-browser-idp", "login_url", fallback="mock_login_url"),
104+
}
105+
return {**_get_default_iam_connection_args(), **db_connect}
106+
107+
108+
@pytest.fixture(scope="class")
109+
def azure_browser_idp():
110+
db_connect = {
111+
"db_user": conf.get("ci-cluster", "test_user", fallback="mock_test_user"),
112+
"password": conf.get("azure-browser-idp", "password", fallback="mock_password"),
113+
"iam": conf.getboolean("azure-browser-idp", "iam", fallback="mock_iam"),
114+
"user": conf.get("azure-browser-idp", "user", fallback="mock_user"),
115+
"credentials_provider": conf.get(
116+
"azure-browser-idp", "credentials_provider", fallback="BrowserAzureCredentialsProvider"
117+
),
118+
"idp_tenant": conf.get("azure-browser-idp", "idp_tenant", fallback="mock_idp_tenant"),
119+
"client_id": conf.get("azure-browser-idp", "client_id", fallback="mock_client_id"),
120+
"client_secret": conf.get("azure-browser-idp", "client_secret", fallback="mock_client_secret"),
121+
}
122+
return {**_get_default_iam_connection_args(), **db_connect}
123+
124+
125+
@pytest.fixture(scope="class")
126+
def jumpcloud_browser_idp():
127+
db_connect = {
128+
"db_user": conf.get("ci-cluster", "test_user", fallback="mock_test_user"),
129+
"password": conf.get("jumpcloud-browser-idp", "password", fallback="mock_password"),
130+
"iam": conf.getboolean("jumpcloud-browser-idp", "iam", fallback="mock_iam"),
131+
"user": conf.get("jumpcloud-browser-idp", "user", fallback="mock_user"),
132+
"credentials_provider": conf.get(
133+
"jumpcloud-browser-idp", "credentials_provider", fallback="SamlCredentialsProvider"
134+
),
135+
"login_url": conf.get("jumpcloud-browser-idp", "login_url", fallback="mock_login_url"),
136+
}
137+
return {**_get_default_iam_connection_args(), **db_connect}
138+
139+
140+
@pytest.fixture(scope="class")
141+
def ping_browser_idp():
142+
db_connect = {
143+
"iam": conf.getboolean("ping-one-idp", "iam", fallback="mock_iam"),
144+
"credentials_provider": conf.get("ping-one-idp", "credentials_provider", fallback="PingCredentialsProvider"),
145+
"login_url": conf.get("ping-one-idp", "login_url", fallback="mock_login_url"),
146+
"listen_port": conf.getint("ping-one-idp", "listen_port", fallback="mock_listen_port"),
147+
"idp_response_timeout": conf.getint(
148+
"ping-one-idp", "idp_response_timeout", fallback="mock_idp_response_timeout"
149+
),
150+
}
151+
return {**_get_default_iam_connection_args(), **db_connect}
152+
153+
154+
@pytest.fixture(scope="class")
155+
def azure_idp():
156+
db_connect = {
157+
"db_user": conf.get("ci-cluster", "test_user", fallback="mock_test_user"),
158+
"password": conf.get("azure-idp", "password", fallback="mock_password"),
159+
"iam": conf.getboolean("azure-idp", "iam", fallback="mock_iam"),
160+
"user": conf.get("azure-idp", "user", fallback="mock_user"),
161+
"credentials_provider": conf.get("azure-idp", "credentials_provider", fallback="AzureCredentialsProvider"),
162+
"idp_tenant": conf.get("azure-idp", "idp_tenant", fallback="mock_idp_tenant"),
163+
"client_id": conf.get("azure-idp", "client_id", fallback="mock_client_id"),
164+
"client_secret": conf.get("azure-idp", "client_secret", fallback="mock_client_secret"),
165+
}
166+
return {**_get_default_iam_connection_args(), **db_connect}
167+
168+
169+
@pytest.fixture(scope="class")
170+
def adfs_idp():
171+
db_connect = {
172+
"db_user": conf.get("ci-cluster", "test_user", fallback="mock_test_user"),
173+
"password": conf.get("adfs-idp", "password", fallback="mock_password"),
174+
"iam": conf.getboolean("adfs-idp", "iam", fallback="mock_iam"),
175+
"user": conf.get("adfs-idp", "user", fallback="mock_user"),
176+
"credentials_provider": conf.get("adfs-idp", "credentials_provider", fallback="AdfsCredentialsProvider"),
177+
"idp_host": conf.get("adfs-idp", "idp_host", fallback="mock_idp_host"),
178+
}
179+
return {**_get_default_iam_connection_args(), **db_connect}
180+
181+
182+
@pytest.fixture(scope="class")
183+
def jwt_google_idp():
184+
db_connect = {
185+
"db_user": conf.get("ci-cluster", "test_user", fallback="mock_test_user"),
186+
"iam": conf.getboolean("jwt-google-idp", "iam", fallback="mock_iam"),
187+
"password": conf.get("jwt-google-idp", "password", fallback="mock_password"),
188+
"credentials_provider": conf.get(
189+
"jwt-google-idp", "credentials_provider", fallback="BasicJwtCredentialsProvider"
190+
),
191+
"web_identity_token": conf.get("jwt-google-idp", "web_identity_token", fallback="mock_web_identity_token"),
192+
"role_arn": conf.get("jwt-google-idp", "role_arn", fallback="mock_role_arn"),
193+
}
194+
return {**_get_default_iam_connection_args(), **db_connect}
195+
196+
197+
@pytest.fixture(scope="class")
198+
def jwt_azure_v2_idp():
199+
db_connect = {
200+
"db_user": conf.get("ci-cluster", "test_user", fallback="mock_test_user"),
201+
"iam": conf.getboolean("jwt-azure-v2-idp", "iam", fallback="mock_iam"),
202+
"password": conf.get("jwt-azure-v2-idp", "password", fallback="mock_password"),
203+
"credentials_provider": conf.get(
204+
"jwt-azure-v2-idp", "credentials_provider", fallback="BasicJwtCredentialsProvider"
205+
),
206+
"web_identity_token": conf.get("jwt-azure-v2-idp", "web_identity_token", fallback="mock_web_identity_token"),
207+
"role_arn": conf.get("jwt-azure-v2-idp", "role_arn", fallback="mock_role_arn"),
208+
}
209+
return {**_get_default_iam_connection_args(), **db_connect}
210+
211+
212+
@pytest.fixture
213+
def con(request, db_kwargs):
214+
conn = redshift_connector.connect(**db_kwargs)
215+
216+
def fin():
217+
conn.rollback()
218+
try:
219+
conn.close()
220+
except redshift_connector.InterfaceError:
221+
pass
222+
223+
request.addfinalizer(fin)
224+
return conn
225+
226+
227+
@pytest.fixture
228+
def cursor(request, con):
229+
cursor = con.cursor()
230+
231+
def fin():
232+
cursor.close()
233+
234+
request.addfinalizer(fin)
235+
return cursor
236+
237+
238+
@pytest.fixture
239+
def idp_arg(request):
240+
return request.getfixturevalue(request.param)
241+
242+
243+
@pytest.fixture
244+
def is_java():
245+
return "java" in sys.platform.lower()

test/integration/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .conftest import (
1+
from test.conftest import (
22
adfs_idp,
33
azure_browser_idp,
44
azure_idp,

0 commit comments

Comments
 (0)