103 lines
3.8 KiB
Python
103 lines
3.8 KiB
Python
# Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
|
# may not use this file except in compliance with the License. A copy of
|
|
# the License is located at
|
|
#
|
|
# http://aws.amazon.com/apache2.0/
|
|
#
|
|
# or in the "license" file accompanying this file. This file is
|
|
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
# ANY KIND, either express or implied. See the License for the specific
|
|
# language governing permissions and limitations under the License.
|
|
import os
|
|
import json
|
|
from nose.tools import assert_equal
|
|
from botocore.session import get_session
|
|
|
|
|
|
# Several services have names that don't match for one reason or another.
|
|
SERVICE_RENAMES = {
|
|
'application-autoscaling': 'autoscaling',
|
|
'appstream': 'appstream2',
|
|
'autoscaling-plans': 'autoscaling',
|
|
'dynamodbstreams': 'streams.dynamodb',
|
|
'cloudwatch': 'monitoring',
|
|
'efs': 'elasticfilesystem',
|
|
'elb': 'elasticloadbalancing',
|
|
'elbv2': 'elasticloadbalancing',
|
|
'emr': 'elasticmapreduce',
|
|
'iot-data': 'data.iot',
|
|
'meteringmarketplace': 'metering.marketplace',
|
|
'opsworkscm': 'opsworks-cm',
|
|
'ses': 'email',
|
|
'stepfunctions': 'states',
|
|
'lex-runtime': 'runtime.lex',
|
|
'mturk': 'mturk-requester',
|
|
'resourcegroupstaggingapi': 'tagging',
|
|
'sagemaker-runtime': 'runtime.sagemaker',
|
|
'lex-models': 'models.lex',
|
|
'marketplace-entitlement': 'entitlement.marketplace',
|
|
'pricing': 'api.pricing',
|
|
'mediastore-data': 'data.mediastore',
|
|
'iot-jobs-data': 'data.jobs.iot',
|
|
'kinesis-video-media': 'kinesisvideo',
|
|
'kinesis-video-archived-media': 'kinesisvideo',
|
|
'alexaforbusiness': 'a4b',
|
|
}
|
|
|
|
BLACKLIST = [
|
|
'mobileanalytics',
|
|
]
|
|
|
|
|
|
def test_endpoint_matches_service():
|
|
backwards_renames = dict((v, k) for k, v in SERVICE_RENAMES.items())
|
|
session = get_session()
|
|
loader = session.get_component('data_loader')
|
|
expected_services = set(loader.list_available_services('service-2'))
|
|
|
|
pdir = os.path.dirname
|
|
endpoints_path = os.path.join(pdir(pdir(pdir(__file__))),
|
|
'botocore', 'data', 'endpoints.json')
|
|
with open(endpoints_path, 'r') as f:
|
|
data = json.loads(f.read())
|
|
for partition in data['partitions']:
|
|
for service in partition['services'].keys():
|
|
service = backwards_renames.get(service, service)
|
|
if service not in BLACKLIST:
|
|
yield _assert_endpoint_is_service, service, expected_services
|
|
|
|
|
|
def _assert_endpoint_is_service(service, expected_services):
|
|
assert service in expected_services
|
|
|
|
|
|
def test_service_name_matches_endpoint_prefix():
|
|
# Generates tests for each service to verify that the endpoint prefix
|
|
# matches the service name unless there is an explicit exception.
|
|
session = get_session()
|
|
loader = session.get_component('data_loader')
|
|
|
|
# Load the list of available services. The names here represent what
|
|
# will become the client names.
|
|
services = loader.list_available_services('service-2')
|
|
|
|
for service in services:
|
|
yield _assert_service_name_matches_endpoint_prefix, loader, service
|
|
|
|
|
|
def _assert_service_name_matches_endpoint_prefix(loader, service_name):
|
|
# Load the service model and grab its endpoint prefix
|
|
service_model = loader.load_service_model(service_name, 'service-2')
|
|
endpoint_prefix = service_model['metadata']['endpointPrefix']
|
|
|
|
# Handle known exceptions where we have renamed the service directory
|
|
# for one reason or another.
|
|
expected_endpoint_prefix = SERVICE_RENAMES.get(service_name, service_name)
|
|
assert_equal(
|
|
endpoint_prefix, expected_endpoint_prefix,
|
|
"Service name `%s` does not match expected endpoint "
|
|
"prefix `%s`, actual: `%s`" % (
|
|
service_name, expected_endpoint_prefix, endpoint_prefix))
|