|
| 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() |
0 commit comments