1# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. 2# 3# Licensed under the Apache License, Version 2.0 (the "License"). You 4# may not use this file except in compliance with the License. A copy of 5# the License is located at 6# 7# https://aws.amazon.com/apache2.0/ 8# 9# or in the "license" file accompanying this file. This file is 10# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 11# ANY KIND, either express or implied. See the License for the specific 12# language governing permissions and limitations under the License. 13import pytest 14 15from boto3.session import Session 16import botocore.session 17 18boto3_session = None 19 20 21def create_session(): 22 global boto3_session 23 if boto3_session is None: 24 boto3_session = Session( 25 aws_access_key_id='dummy', 26 aws_secret_access_key='dummy', 27 region_name='us-east-1' 28 ) 29 30 return boto3_session 31 32 33def _all_resources(): 34 session = create_session() 35 for service_name in session.get_available_resources(): 36 yield session, service_name 37 38 39def _all_clients(): 40 session = create_session() 41 for service_name in session.get_available_services(): 42 yield session, service_name 43 44 45def _all_api_version_args(): 46 botocore_session = botocore.session.get_session() 47 boto3_session = create_session() 48 for service_name in boto3_session.get_available_resources(): 49 yield (service_name, botocore_session, boto3_session) 50 51 52@pytest.mark.parametrize('resource_args', _all_resources()) 53def test_can_create_all_resources(resource_args): 54 """Verify we can create all existing resources.""" 55 session, service_name = resource_args 56 resource = session.resource(service_name) 57 # Verifying we have a "meta" attr is just an arbitrary 58 # sanity check. 59 assert hasattr(resource, 'meta') 60 61 62@pytest.mark.parametrize('client_args', _all_clients()) 63def test_can_create_all_clients(client_args): 64 """Verify we can create all existing clients.""" 65 session, service_name = client_args 66 client = session.client(service_name) 67 assert hasattr(client, 'meta') 68 69 70@pytest.mark.parametrize('api_version_args', _all_api_version_args()) 71def test_api_versions_synced_with_botocore(api_version_args): 72 """Verify both boto3 and botocore clients stay in sync.""" 73 service_name, botocore_session, boto3_session = api_version_args 74 resource = boto3_session.resource(service_name) 75 boto3_api_version = resource.meta.client.meta.service_model.api_version 76 client = botocore_session.create_client( 77 service_name, 78 region_name='us-east-1', 79 aws_access_key_id='foo', 80 aws_secret_access_key='bar' 81 ) 82 botocore_api_version = client.meta.service_model.api_version 83 err = ( 84 f"Different latest API versions found for {service_name}: " 85 f"{botocore_api_version} (botocore), {boto3_api_version} (boto3)\n" 86 ) 87 assert botocore_api_version == boto3_api_version, err 88