diff --git a/awscli/botocore/args.py b/awscli/botocore/args.py index 7fb4721781a1..2b342da1bfe6 100644 --- a/awscli/botocore/args.py +++ b/awscli/botocore/args.py @@ -398,25 +398,24 @@ def _compute_request_compression_config(self, config_kwargs): def _validate_min_compression_size(self, min_size): min_allowed_min_size = 1 max_allowed_min_size = 1048576 - if min_size is not None: - error_msg_base = ( - f'Invalid value "{min_size}" for ' - 'request_min_compression_size_bytes.' + error_msg_base = ( + f'Invalid value "{min_size}" for ' + 'request_min_compression_size_bytes.' + ) + try: + min_size = int(min_size) + except (ValueError, TypeError): + msg = ( + f'{error_msg_base} Value must be an integer. ' + f'Received {type(min_size)} instead.' ) - try: - min_size = int(min_size) - except (ValueError, TypeError): - msg = ( - f'{error_msg_base} Value must be an integer. ' - f'Received {type(min_size)} instead.' - ) - raise botocore.exceptions.InvalidConfigError(error_msg=msg) - if not min_allowed_min_size <= min_size <= max_allowed_min_size: - msg = ( - f'{error_msg_base} Value must be between ' - f'{min_allowed_min_size} and {max_allowed_min_size}.' - ) - raise botocore.exceptions.InvalidConfigError(error_msg=msg) + raise botocore.exceptions.InvalidConfigError(error_msg=msg) + if not min_allowed_min_size <= min_size <= max_allowed_min_size: + msg = ( + f'{error_msg_base} Value must be between ' + f'{min_allowed_min_size} and {max_allowed_min_size}.' + ) + raise botocore.exceptions.InvalidConfigError(error_msg=msg) return min_size diff --git a/tests/__init__.py b/tests/__init__.py index b69437588cde..b1a24b994e80 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -57,7 +57,7 @@ assert_url_equal, create_session, random_chars, temporary_file, patch_load_service_model, ALL_SERVICES, BaseEnvVar, BaseSessionTest, BaseClientDriverTest, StubbedSession, ClientHTTPStubber, SessionHTTPStubber, - IntegerRefresher, FreezeTime, + IntegerRefresher, FreezeTime, get_botocore_default_config_mapping ) # S3transfer testing utilities that we want to preserve import statements for # in s3transfer specific tests. diff --git a/tests/unit/botocore/docs/__init__.py b/tests/unit/botocore/docs/__init__.py index a9c828edb2ba..8f241b355ba5 100644 --- a/tests/unit/botocore/docs/__init__.py +++ b/tests/unit/botocore/docs/__init__.py @@ -17,7 +17,7 @@ from botocore.docs.bcdoc.restdoc import DocumentStructure -from tests import mock, unittest +from tests import get_botocore_default_config_mapping, mock, unittest from botocore.compat import OrderedDict from botocore.hooks import HierarchicalEmitter from botocore.model import ServiceModel, OperationModel @@ -101,11 +101,12 @@ def load_service_mock(*args, **kwargs): 'signatureVersions': ['v4'] } + default_config_mapping = get_botocore_default_config_mapping() self.creator = ClientCreator( loader=self.loader, endpoint_resolver=endpoint_resolver, user_agent='user-agent', event_emitter=self.events, exceptions_factory=mock.Mock(), - config_store=ConfigValueStore() + config_store=ConfigValueStore(mapping=default_config_mapping) ) self.client = self.creator.create_client('myservice', 'us-east-1') diff --git a/tests/unit/botocore/test_args.py b/tests/unit/botocore/test_args.py index ac6ada14f51d..3b6c609ec190 100644 --- a/tests/unit/botocore/test_args.py +++ b/tests/unit/botocore/test_args.py @@ -14,7 +14,7 @@ import socket import botocore.config -from tests import mock, unittest +from tests import get_botocore_default_config_mapping, mock, unittest from botocore import args from botocore import exceptions @@ -29,7 +29,8 @@ class TestCreateClientArgs(unittest.TestCase): def setUp(self): self.event_emitter = mock.Mock(HierarchicalEmitter) - self.config_store = ConfigValueStore() + default_config_mapping = get_botocore_default_config_mapping() + self.config_store = ConfigValueStore(mapping=default_config_mapping) user_agent_creator = UserAgentString( platform_name=None, platform_version=None, @@ -321,11 +322,11 @@ def test_uses_client_config_over_config_store_max_attempts(self): )['client_config'] self.assertEqual(config.retries['max_attempts'], 2) - def test_max_attempts_unset_if_retries_is_none(self): + def test_max_attempts_expected_if_retries_is_none(self): config = self.call_get_client_args( client_config=Config(retries=None) )['client_config'] - self.assertEqual(config.retries, {'mode': 'standard'}) + self.assertEqual(config.retries, {'max_attempts': 3, 'mode': 'standard'}) def test_retry_mode_set_on_config_store(self): self.config_store.set_config_variable('retry_mode', 'standard') diff --git a/tests/unit/botocore/test_client.py b/tests/unit/botocore/test_client.py index 5da736d3bc5d..cc4c096ac2c8 100644 --- a/tests/unit/botocore/test_client.py +++ b/tests/unit/botocore/test_client.py @@ -12,7 +12,7 @@ # language governing permissions and limitations under the License. import io import botocore.config -from tests import mock, unittest +from tests import get_botocore_default_config_mapping, mock, unittest import botocore from botocore import utils @@ -140,7 +140,8 @@ def load_service_mock(*args, **kwargs): } self.resolver.construct_endpoint.return_value = self.endpoint_data self.resolver.get_available_endpoints.return_value = ['us-west-2'] - self.config_store = ConfigValueStore() + default_config_mapping = get_botocore_default_config_mapping() + self.config_store = ConfigValueStore(mapping=default_config_mapping) def tearDown(self): self.endpoint_creator_patch.stop() @@ -872,13 +873,11 @@ def test_can_register_standard_retry_mode(self): def test_can_register_standard_retry_mode_from_config_store(self): fake_env = {'AWS_RETRY_MODE': 'standard'} - config_store = ConfigValueStore( - mapping={ - 'retry_mode': ChainProvider([ - EnvironmentProvider('AWS_RETRY_MODE', fake_env), - ]) - } + default_config_mapping = get_botocore_default_config_mapping() + default_config_mapping['retry_mode'] = ChainProvider( + [EnvironmentProvider('AWS_RETRY_MODE', fake_env)] ) + config_store = ConfigValueStore(mapping=default_config_mapping) creator = self.create_client_creator(config_store=config_store) with mock.patch('botocore.client.standard') as standard: creator.create_client( 'myservice', 'us-west-2') diff --git a/tests/utils/botocore/__init__.py b/tests/utils/botocore/__init__.py index 106736f3e7b7..858eb9356002 100644 --- a/tests/utils/botocore/__init__.py +++ b/tests/utils/botocore/__init__.py @@ -43,6 +43,7 @@ from botocore.compat import parse_qs from botocore import utils from botocore import credentials +from botocore.configprovider import create_botocore_default_config_mapping from botocore.stub import Stubber @@ -104,6 +105,11 @@ def create_session(**kwargs): return session +def get_botocore_default_config_mapping(): + session = botocore.session.get_session() + return create_botocore_default_config_mapping(session) + + @contextlib.contextmanager def temporary_file(mode): """This is a cross platform temporary file creation.