Skip to content

Commit 9d488fe

Browse files
committed
test(IdP): dynamic loading and use of external IdP plugin
1 parent 8e5270e commit 9d488fe

File tree

6 files changed

+27
-2
lines changed

6 files changed

+27
-2
lines changed

test/integration/plugin/test_credentials_providers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,5 +138,5 @@ def testSslAndIam(idp_arg):
138138
@pytest.mark.parametrize("idp_arg", ALL_IDP, indirect=True)
139139
def testWrongCredentialsProvider(idp_arg):
140140
idp_arg["credentials_provider"] = "WrongProvider"
141-
with pytest.raises(redshift_connector.InterfaceError, match="Invalid credentials provider" + "WrongProvider"):
141+
with pytest.raises(redshift_connector.InterfaceError, match="Invalid credentials provider WrongProvider"):
142142
redshift_connector.connect(**idp_arg)

test/unit/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from .mocks import MockCredentialsProvider

test/unit/mocks/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from .mock_external_credential_provider import MockCredentialsProvider
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from redshift_connector.plugin import SamlCredentialsProvider
2+
3+
4+
class MockCredentialsProvider(SamlCredentialsProvider):
5+
def get_saml_assertion(self: "SamlCredentialsProvider"):
6+
return "mocked"

test/unit/plugin/test_credentials_providers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
@pytest.mark.parametrize("idp_arg", ALL_IDP, indirect=True)
2121
def test_credential_provider_dne_should_fail(idp_arg):
2222
idp_arg["credentials_provider"] = "WrongProvider"
23-
with pytest.raises(redshift_connector.InterfaceError, match="Invalid credentials provider" + "WrongProvider"):
23+
with pytest.raises(redshift_connector.InterfaceError, match="Invalid credentials provider WrongProvider"):
2424
redshift_connector.connect(**idp_arg)
2525

2626

test/unit/test_iam_helper.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import typing
2+
from test.unit import MockCredentialsProvider
23

34
import pytest # type: ignore
45
from pytest_mock import mocker
@@ -321,3 +322,19 @@ def test_set_iam_credentials_via_aws_credentials(mocker):
321322
assert spy.called is True
322323
assert spy.call_count == 1
323324
assert spy.call_args[0][1] == redshift_property
325+
326+
327+
def test_dynamically_loading_credential_holder(mocker):
328+
external_class_name: str = "test.unit.MockCredentialsProvider"
329+
mocker.patch("{}.get_credentials".format(external_class_name))
330+
mocker.patch("redshift_connector.iam_helper.set_cluster_credentials", return_value=None)
331+
rp: RedshiftProperty = make_redshift_property()
332+
rp.credentials_provider = external_class_name
333+
334+
spy = mocker.spy(MockCredentialsProvider, "add_parameter")
335+
336+
set_iam_credentials(rp)
337+
assert spy.called
338+
assert spy.call_count == 1
339+
# ensure call to add_Parameter was made on the expected Provider class
340+
assert isinstance(spy.call_args[0][0], MockCredentialsProvider) is True

0 commit comments

Comments
 (0)