Path: blob/develop/tests/unit/customizations/test_globalargs.py
1567 views
# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.1#2# Licensed under the Apache License, Version 2.0 (the "License"). You3# may not use this file except in compliance with the License. A copy of4# the License is located at5#6# http://aws.amazon.com/apache2.0/7#8# or in the "license" file accompanying this file. This file is9# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF10# ANY KIND, either express or implied. See the License for the specific11# language governing permissions and limitations under the License.12from botocore.session import get_session13from botocore import UNSIGNED14import os1516from awscli.testutils import mock, unittest17from awscli.customizations import globalargs181920class FakeParsedArgs(object):21def __init__(self, **kwargs):22self.__dict__.update(kwargs)2324def __getattr__(self, arg):25return None262728class FakeSession(object):2930def __init__(self, session_vars=None, config_file_vars=None):31if session_vars is None:32session_vars = {}33self.session_var_map = session_vars34if config_file_vars is None:35config_file_vars = {}36self.config_file_vars = config_file_vars3738def get_config_variable(self, name, methods=('env', 'config'),39default=None):40value = None41config_name, envvar_name = self.session_var_map[name]42if methods is not None:43if 'env' in methods and value is None:44value = os.environ.get(envvar_name)45if 'config' in methods and value is None:46value = self.config_file_vars.get(config_name)47else:48value = default49return value505152class TestGlobalArgsCustomization(unittest.TestCase):5354def test_parse_query(self):55parsed_args = FakeParsedArgs(query='foo.bar')56globalargs.resolve_types(parsed_args)57# Assert that it looks like a jmespath parsed expression.58self.assertFalse(isinstance(parsed_args.query, str))59self.assertTrue(hasattr(parsed_args.query, 'search'))6061def test_parse_query_error_message(self):62# Invalid jmespath expression.63parsed_args = FakeParsedArgs(query='foo.bar.')64with self.assertRaises(ValueError):65globalargs.resolve_types(parsed_args)66globalargs.resolve_types('query')6768def test_parse_verify_ssl_default_value(self):69with mock.patch('os.environ', {}):70parsed_args = FakeParsedArgs(verify_ssl=True, ca_bundle=None)71session_var_map = {'ca_bundle': ('ca_bundle', 'AWS_CA_BUNDLE')}72session = FakeSession(session_vars=session_var_map)73globalargs.resolve_verify_ssl(parsed_args, session)74# None, so that botocore can apply it's default logic.75self.assertIsNone(parsed_args.verify_ssl)7677def test_parse_verify_ssl_verify_turned_off(self):78with mock.patch('os.environ', {}):79parsed_args = FakeParsedArgs(verify_ssl=False, ca_bundle=None)80session_var_map = {'ca_bundle': ('ca_bundle', 'AWS_CA_BUNDLE')}81session = FakeSession(session_vars=session_var_map)82globalargs.resolve_verify_ssl(parsed_args, session)83self.assertFalse(parsed_args.verify_ssl)8485def test_cli_overrides_cert_bundle(self):86environ = {}87with mock.patch('os.environ', environ):88parsed_args = FakeParsedArgs(89verify_ssl=True,90ca_bundle='/path/to/cli_bundle.pem')91config_file_vars = {}92session_var_map = {'ca_bundle': ('ca_bundle', 'AWS_CA_BUNDLE')}93session = FakeSession(94session_vars=session_var_map,95config_file_vars=config_file_vars)96globalargs.resolve_verify_ssl(parsed_args, session)97self.assertEqual(parsed_args.verify_ssl, '/path/to/cli_bundle.pem')9899def test_cli_overrides_env_cert_bundle(self):100environ = {101'AWS_CA_BUNDLE': '/path/to/env_bundle.pem',102}103with mock.patch('os.environ', environ):104parsed_args = FakeParsedArgs(105verify_ssl=True,106ca_bundle='/path/to/cli_bundle.pem')107config_file_vars = {}108session_var_map = {'ca_bundle': ('ca_bundle', 'AWS_CA_BUNDLE')}109session = FakeSession(110session_vars=session_var_map,111config_file_vars=config_file_vars)112globalargs.resolve_verify_ssl(parsed_args, session)113self.assertEqual(parsed_args.verify_ssl, '/path/to/cli_bundle.pem')114115def test_no_verify_ssl_overrides_cli_cert_bundle(self):116environ = {117'AWS_CA_BUNDLE': '/path/to/env_bundle.pem',118}119with mock.patch('os.environ', environ):120parsed_args = FakeParsedArgs(121verify_ssl=False,122ca_bundle='/path/to/cli_bundle.pem')123config_file_vars = {}124session_var_map = {'ca_bundle': ('ca_bundle', 'AWS_CA_BUNDLE')}125session = FakeSession(126session_vars=session_var_map,127config_file_vars=config_file_vars)128globalargs.resolve_verify_ssl(parsed_args, session)129self.assertFalse(parsed_args.verify_ssl)130131def test_no_sign_request_if_option_specified(self):132args = FakeParsedArgs(sign_request=False)133session = mock.Mock()134with mock.patch('awscli.customizations.globalargs._update_default_client_config') as mock_update:135globalargs.no_sign_request(args, session)136mock_update.assert_called_once_with(session, 'signature_version', UNSIGNED)137138def test_request_signed_by_default(self):139args = FakeParsedArgs(sign_request=True)140session = mock.Mock()141globalargs.no_sign_request(args, session)142self.assertFalse(session.register.called)143144def test_invalid_endpoint_url(self):145# Invalid jmespath expression.146parsed_args = FakeParsedArgs(endpoint_url='missing-scheme.com')147with self.assertRaises(ValueError):148globalargs.resolve_types(parsed_args)149150def test_valid_endpoint_url(self):151parsed_args = FakeParsedArgs(endpoint_url='http://custom-endpoint.com')152globalargs.resolve_types(parsed_args)153self.assertEqual(parsed_args.endpoint_url,154'http://custom-endpoint.com')155156def test_cli_read_timeout(self):157parsed_args = FakeParsedArgs(read_timeout='60')158session = get_session()159globalargs.resolve_cli_read_timeout(parsed_args, session)160self.assertEqual(parsed_args.read_timeout, 60)161self.assertEqual(162session.get_default_client_config().read_timeout, 60)163164def test_cli_connect_timeout(self):165parsed_args = FakeParsedArgs(connect_timeout='60')166session = get_session()167globalargs.resolve_cli_connect_timeout(parsed_args, session)168self.assertEqual(parsed_args.connect_timeout, 60)169self.assertEqual(170session.get_default_client_config().connect_timeout, 60)171172def test_cli_read_timeout_for_blocking(self):173parsed_args = FakeParsedArgs(read_timeout='0')174session = get_session()175globalargs.resolve_cli_read_timeout(parsed_args, session)176self.assertEqual(parsed_args.read_timeout, None)177self.assertEqual(178session.get_default_client_config().read_timeout, None)179180def test_cli_connect_timeout_for_blocking(self):181parsed_args = FakeParsedArgs(connect_timeout='0')182session = get_session()183globalargs.resolve_cli_connect_timeout(parsed_args, session)184self.assertEqual(parsed_args.connect_timeout, None)185self.assertEqual(186session.get_default_client_config().connect_timeout, None)187188189