1414
1515def make_valid_browser_idc_provider () -> typing .Tuple [BrowserIdcAuthPlugin , RedshiftProperty ]:
1616 rp : RedshiftProperty = RedshiftProperty ()
17- rp .idc_region = "some_region "
17+ rp .idc_region = "us-west-2 "
1818 rp .issuer_url = "some_url"
1919 rp .idp_response_timeout = 100
2020 rp .listen_port = 8000
@@ -25,7 +25,7 @@ def make_valid_browser_idc_provider() -> typing.Tuple[BrowserIdcAuthPlugin, Reds
2525
2626def valid_browser_without_optional_parameter () -> typing .Tuple [BrowserIdcAuthPlugin , RedshiftProperty ]:
2727 rp : RedshiftProperty = RedshiftProperty ()
28- rp .idc_region = "some_region "
28+ rp .idc_region = "us-west-2 "
2929 rp .issuer_url = "some_url"
3030 cp : BrowserIdcAuthPlugin = BrowserIdcAuthPlugin ()
3131 cp .add_parameter (rp )
@@ -261,7 +261,7 @@ def test_authorization_token_url():
261261 mocked_state : str = "mockedState"
262262 mocked_client_id : str = "mockedClientId"
263263 mocked_code_challenge : str = "mockedCodeChallenge"
264- expected_url = "https://oidc.some_region .amazonaws.com/authorize?response_type=code&client_id=mockedClientId&redirect_uri=None&state=mockedState&scopes=redshift%3Aconnect&code_challenge=mockedCodeChallenge&code_challenge_method=S256"
264+ expected_url = "https://oidc.us-west-2 .amazonaws.com/authorize?response_type=code&client_id=mockedClientId&redirect_uri=None&state=mockedState&scopes=redshift%3Aconnect&code_challenge=mockedCodeChallenge&code_challenge_method=S256"
265265
266266 url : str = idc_credentials_provider .get_authorization_token_url (
267267 mocked_state , mocked_client_id , mocked_code_challenge
@@ -292,3 +292,42 @@ def test_open_browser():
292292
293293 listen_socket : socket .socket = idc_credentials_provider .get_listen_socket (mocked_port )
294294 assert str (listen_socket .getsockname ()) == expected_socket
295+
296+
297+ @pytest .mark .parametrize ("region,expected_host" , [
298+ ("cn-north-1" , "oidc.cn-north-1.amazonaws.com.cn" ),
299+ ("CN-NORTH-1" , "oidc.cn-north-1.amazonaws.com.cn" ),
300+ (" cn-north-1 " , "oidc.cn-north-1.amazonaws.com.cn" ), # Test with spaces
301+ ("us-west-2" , "oidc.us-west-2.amazonaws.com" ),
302+ (" US-WEST-2 " , "oidc.us-west-2.amazonaws.com" ), # Test with upper case and spaces
303+ ("us-gov-west-1" , "oidc.us-gov-west-1.amazonaws.com" ),
304+ ("us-gov-east-1" , "oidc.us-gov-east-1.amazonaws.com" ),
305+ ("us-east-1" , "oidc.us-east-1.amazonaws.com" ),
306+ ("eu-west-1" , "oidc.eu-west-1.amazonaws.com" ), # Dublin
307+ ("ap-southeast-2" , "oidc.ap-southeast-2.amazonaws.com" ), # Multi-word region
308+ ("eu-central-1" , "oidc.eu-central-1.amazonaws.com" ), # Frankfurt
309+ ])
310+ def test_build_oidc_host_url_valid_regions (region , expected_host ):
311+ """Test that valid regions produce correct OIDC host URLs"""
312+ idc_credentials_provider , rp = make_valid_browser_idc_provider ()
313+
314+ result = idc_credentials_provider ._build_oidc_host_url (region )
315+ assert result == expected_host
316+
317+
318+ @pytest .mark .parametrize ("invalid_region" , [
319+ None ,
320+ "" ,
321+ " " ,
322+ "invalid-region" ,
323+ "../../etc/passwd" ,
324+ "us-west-2; rm -rf /" ,
325+ "us-west-2.evil.com" ,
326+ "evil.com#us-west-2"
327+ ])
328+ def test_build_oidc_host_url_invalid_regions (invalid_region ):
329+ """Test that invalid regions raise InterfaceError"""
330+ idc_credentials_provider , rp = make_valid_browser_idc_provider ()
331+
332+ with pytest .raises (InterfaceError ):
333+ idc_credentials_provider ._build_oidc_host_url (invalid_region )
0 commit comments