3232from botocore .loaders import Loader
3333from botocore .regions import EndpointRulesetResolver
3434
35+ from unittest .mock import Mock , patch
36+
3537REGION_TEMPLATE = "{Region}"
3638REGION_REF = {"ref" : "Region" }
3739BUCKET_ARN_REF = {"ref" : "bucketArn" }
@@ -486,3 +488,77 @@ def test_auth_schemes_conversion_first_authtype_unknown(
486488def test_get_attr (rule_lib , value , path , expected_value ):
487489 result = rule_lib .get_attr (value , path )
488490 assert result == expected_value
491+ @pytest .mark .parametrize (
492+ "use_ssl, endpoint_url, provider_params, expected_url" ,
493+ [
494+ # use_ssl=True, endpoint_url="http://..." → HTTP
495+ (
496+ True ,
497+ 'http://custom.com' ,
498+ {'Endpoint' : 'http://custom.com' },
499+ 'http://custom.com' ,
500+ ),
501+ # use_ssl=True, endpoint_url="https://..." → HTTPS
502+ (
503+ True ,
504+ 'https://custom.com' ,
505+ {'Endpoint' : 'https://custom.com' },
506+ 'https://custom.com' ,
507+ ),
508+ # use_ssl=False, endpoint_url="http://..." → HTTP
509+ (
510+ False ,
511+ 'http://custom.com' ,
512+ {'Endpoint' : 'http://custom.com' },
513+ 'http://custom.com' ,
514+ ),
515+ # use_ssl=False, endpoint_url="https://..." → HTTPS
516+ (
517+ False ,
518+ 'https://custom.com' ,
519+ {'Endpoint' : 'https://custom.com' },
520+ 'https://custom.com' ,
521+ ),
522+ # use_ssl=True, no endpoint → HTTPS
523+ (
524+ True ,
525+ 'https://s3-test-only-domain.amazonaws.com' ,
526+ {},
527+ 'https://s3-test-only-domain.amazonaws.com' ,
528+ ),
529+ # use_ssl=False, no endpoint → HTTP (downgrade)
530+ (
531+ False ,
532+ 'https://s3-test-only-domain.amazonaws.com' ,
533+ {},
534+ 'http://s3-test-only-domain.amazonaws.com' ,
535+ ),
536+ ],
537+ )
538+ def test_construct_endpoint_parametrized (
539+ use_ssl , endpoint_url , provider_params , expected_url
540+ ):
541+ resolver = EndpointRulesetResolver (
542+ endpoint_ruleset_data = {
543+ 'version' : '1.0' ,
544+ 'parameters' : {},
545+ 'rules' : [],
546+ },
547+ partition_data = {},
548+ service_model = None ,
549+ builtins = {},
550+ client_context = None ,
551+ event_emitter = None ,
552+ use_ssl = use_ssl ,
553+ requested_auth_scheme = None ,
554+ )
555+
556+ with patch .object (resolver ._provider , 'resolve_endpoint' ) as mock_resolve :
557+ mock_resolve .return_value = RuleSetEndpoint (
558+ url = endpoint_url , properties = {}, headers = {}
559+ )
560+ with patch .object (
561+ resolver , '_get_provider_params' , return_value = provider_params
562+ ):
563+ result = resolver .construct_endpoint (None , None , None )
564+ assert result .url == expected_url
0 commit comments