Skip to content

Commit ae2403b

Browse files
committed
use_ssl fix
1 parent 7da59ad commit ae2403b

File tree

2 files changed

+81
-1
lines changed

2 files changed

+81
-1
lines changed

awscli/botocore/regions.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,11 @@ def construct_endpoint(
514514
LOG.debug(f'Endpoint provider result: {provider_result.url}')
515515

516516
# The endpoint provider does not support non-secure transport.
517-
if not self._use_ssl and provider_result.url.startswith('https://'):
517+
if (
518+
not self._use_ssl
519+
and provider_result.url.startswith('https://')
520+
and 'Endpoint' not in provider_params
521+
):
518522
provider_result = provider_result._replace(
519523
url=f'http://{provider_result.url[8:]}'
520524
)

tests/unit/botocore/test_endpoint_provider.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
from botocore.loaders import Loader
3333
from botocore.regions import EndpointRulesetResolver
3434

35+
from unittest.mock import Mock, patch
36+
3537
REGION_TEMPLATE = "{Region}"
3638
REGION_REF = {"ref": "Region"}
3739
BUCKET_ARN_REF = {"ref": "bucketArn"}
@@ -486,3 +488,77 @@ def test_auth_schemes_conversion_first_authtype_unknown(
486488
def 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

Comments
 (0)