import pytest from botocore.session import Session # The list of services which were available when we switched over from using # endpoint prefix in event to using service id. These should all accept # either. SERVICES = { "acm": {"endpoint_prefix": "acm", "service_id": "acm"}, "acm-pca": {"endpoint_prefix": "acm-pca", "service_id": "acm-pca"}, "alexaforbusiness": { "endpoint_prefix": "a4b", "service_id": "alexa-for-business", }, "apigateway": { "endpoint_prefix": "apigateway", "service_id": "api-gateway", }, "application-autoscaling": {"service_id": "application-auto-scaling"}, "appstream": {"endpoint_prefix": "appstream2", "service_id": "appstream"}, "appsync": {"endpoint_prefix": "appsync", "service_id": "appsync"}, "athena": {"endpoint_prefix": "athena", "service_id": "athena"}, "autoscaling": { "endpoint_prefix": "autoscaling", "service_id": "auto-scaling", }, "autoscaling-plans": {"service_id": "auto-scaling-plans"}, "batch": {"endpoint_prefix": "batch", "service_id": "batch"}, "budgets": {"endpoint_prefix": "budgets", "service_id": "budgets"}, "ce": {"endpoint_prefix": "ce", "service_id": "cost-explorer"}, "cloud9": {"endpoint_prefix": "cloud9", "service_id": "cloud9"}, "clouddirectory": { "endpoint_prefix": "clouddirectory", "service_id": "clouddirectory", }, "cloudformation": { "endpoint_prefix": "cloudformation", "service_id": "cloudformation", }, "cloudfront": { "endpoint_prefix": "cloudfront", "service_id": "cloudfront", }, "cloudhsm": {"endpoint_prefix": "cloudhsm", "service_id": "cloudhsm"}, "cloudhsmv2": { "endpoint_prefix": "cloudhsmv2", "service_id": "cloudhsm-v2", }, "cloudsearch": { "endpoint_prefix": "cloudsearch", "service_id": "cloudsearch", }, "cloudsearchdomain": { "endpoint_prefix": "cloudsearchdomain", "service_id": "cloudsearch-domain", }, "cloudtrail": { "endpoint_prefix": "cloudtrail", "service_id": "cloudtrail", }, "cloudwatch": { "endpoint_prefix": "monitoring", "service_id": "cloudwatch", }, "codebuild": {"endpoint_prefix": "codebuild", "service_id": "codebuild"}, "codecommit": { "endpoint_prefix": "codecommit", "service_id": "codecommit", }, "codedeploy": { "endpoint_prefix": "codedeploy", "service_id": "codedeploy", }, "codepipeline": { "endpoint_prefix": "codepipeline", "service_id": "codepipeline", }, "codestar": {"endpoint_prefix": "codestar", "service_id": "codestar"}, "cognito-identity": { "endpoint_prefix": "cognito-identity", "service_id": "cognito-identity", }, "cognito-idp": { "endpoint_prefix": "cognito-idp", "service_id": "cognito-identity-provider", }, "cognito-sync": { "endpoint_prefix": "cognito-sync", "service_id": "cognito-sync", }, "comprehend": { "endpoint_prefix": "comprehend", "service_id": "comprehend", }, "config": {"endpoint_prefix": "config", "service_id": "config-service"}, "connect": {"endpoint_prefix": "connect", "service_id": "connect"}, "cur": { "endpoint_prefix": "cur", "service_id": "cost-and-usage-report-service", }, "datapipeline": { "endpoint_prefix": "datapipeline", "service_id": "data-pipeline", }, "dax": {"endpoint_prefix": "dax", "service_id": "dax"}, "devicefarm": { "endpoint_prefix": "devicefarm", "service_id": "device-farm", }, "directconnect": { "endpoint_prefix": "directconnect", "service_id": "direct-connect", }, "discovery": { "endpoint_prefix": "discovery", "service_id": "application-discovery-service", }, "dlm": {"endpoint_prefix": "dlm", "service_id": "dlm"}, "dms": { "endpoint_prefix": "dms", "service_id": "database-migration-service", }, "ds": {"endpoint_prefix": "ds", "service_id": "directory-service"}, "dynamodb": {"endpoint_prefix": "dynamodb", "service_id": "dynamodb"}, "dynamodbstreams": { "endpoint_prefix": "streams.dynamodb", "service_id": "dynamodb-streams", }, "ec2": {"endpoint_prefix": "ec2", "service_id": "ec2"}, "ecr": {"endpoint_prefix": "ecr", "service_id": "ecr"}, "ecs": {"endpoint_prefix": "ecs", "service_id": "ecs"}, "efs": {"endpoint_prefix": "elasticfilesystem", "service_id": "efs"}, "eks": {"endpoint_prefix": "eks", "service_id": "eks"}, "elasticache": { "endpoint_prefix": "elasticache", "service_id": "elasticache", }, "elasticbeanstalk": { "endpoint_prefix": "elasticbeanstalk", "service_id": "elastic-beanstalk", }, "elastictranscoder": { "endpoint_prefix": "elastictranscoder", "service_id": "elastic-transcoder", }, "elb": { "endpoint_prefix": "elasticloadbalancing", "service_id": "elastic-load-balancing", }, "elbv2": {"service_id": "elastic-load-balancing-v2"}, "emr": {"endpoint_prefix": "elasticmapreduce", "service_id": "emr"}, "es": {"endpoint_prefix": "es", "service_id": "elasticsearch-service"}, "events": {"endpoint_prefix": "events", "service_id": "cloudwatch-events"}, "firehose": {"endpoint_prefix": "firehose", "service_id": "firehose"}, "fms": {"endpoint_prefix": "fms", "service_id": "fms"}, "gamelift": {"endpoint_prefix": "gamelift", "service_id": "gamelift"}, "glacier": {"endpoint_prefix": "glacier", "service_id": "glacier"}, "glue": {"endpoint_prefix": "glue", "service_id": "glue"}, "greengrass": { "endpoint_prefix": "greengrass", "service_id": "greengrass", }, "guardduty": {"endpoint_prefix": "guardduty", "service_id": "guardduty"}, "health": {"endpoint_prefix": "health", "service_id": "health"}, "iam": {"endpoint_prefix": "iam", "service_id": "iam"}, "importexport": { "endpoint_prefix": "importexport", "service_id": "importexport", }, "inspector": {"endpoint_prefix": "inspector", "service_id": "inspector"}, "iot": {"endpoint_prefix": "iot", "service_id": "iot"}, "iot-data": { "endpoint_prefix": "data.iot", "service_id": "iot-data-plane", }, "iot-jobs-data": { "endpoint_prefix": "data.jobs.iot", "service_id": "iot-jobs-data-plane", }, "iot1click-devices": { "endpoint_prefix": "devices.iot1click", "service_id": "iot-1click-devices-service", }, "iot1click-projects": { "endpoint_prefix": "projects.iot1click", "service_id": "iot-1click-projects", }, "iotanalytics": { "endpoint_prefix": "iotanalytics", "service_id": "iotanalytics", }, "kinesis": {"endpoint_prefix": "kinesis", "service_id": "kinesis"}, "kinesis-video-archived-media": { "service_id": "kinesis-video-archived-media" }, "kinesis-video-media": {"service_id": "kinesis-video-media"}, "kinesisanalytics": { "endpoint_prefix": "kinesisanalytics", "service_id": "kinesis-analytics", }, "kinesisvideo": { "endpoint_prefix": "kinesisvideo", "service_id": "kinesis-video", }, "kms": {"endpoint_prefix": "kms", "service_id": "kms"}, "lambda": {"endpoint_prefix": "lambda", "service_id": "lambda"}, "lex-models": { "endpoint_prefix": "models.lex", "service_id": "lex-model-building-service", }, "lex-runtime": { "endpoint_prefix": "runtime.lex", "service_id": "lex-runtime-service", }, "lightsail": {"endpoint_prefix": "lightsail", "service_id": "lightsail"}, "logs": {"endpoint_prefix": "logs", "service_id": "cloudwatch-logs"}, "machinelearning": { "endpoint_prefix": "machinelearning", "service_id": "machine-learning", }, "macie": {"endpoint_prefix": "macie", "service_id": "macie"}, "marketplace-entitlement": { "endpoint_prefix": "entitlement.marketplace", "service_id": "marketplace-entitlement-service", }, "marketplacecommerceanalytics": { "endpoint_prefix": "marketplacecommerceanalytics", "service_id": "marketplace-commerce-analytics", }, "mediaconvert": { "endpoint_prefix": "mediaconvert", "service_id": "mediaconvert", }, "medialive": {"endpoint_prefix": "medialive", "service_id": "medialive"}, "mediapackage": { "endpoint_prefix": "mediapackage", "service_id": "mediapackage", }, "mediastore": { "endpoint_prefix": "mediastore", "service_id": "mediastore", }, "mediastore-data": { "endpoint_prefix": "data.mediastore", "service_id": "mediastore-data", }, "mediatailor": { "endpoint_prefix": "api.mediatailor", "service_id": "mediatailor", }, "meteringmarketplace": { "endpoint_prefix": "metering.marketplace", "service_id": "marketplace-metering", }, "mgh": {"endpoint_prefix": "mgh", "service_id": "migration-hub"}, "mobile": {"endpoint_prefix": "mobile", "service_id": "mobile"}, "mq": {"endpoint_prefix": "mq", "service_id": "mq"}, "mturk": {"endpoint_prefix": "mturk-requester", "service_id": "mturk"}, "neptune": {"service_id": "neptune"}, "opsworks": {"endpoint_prefix": "opsworks", "service_id": "opsworks"}, "opsworkscm": { "endpoint_prefix": "opsworks-cm", "service_id": "opsworkscm", }, "organizations": { "endpoint_prefix": "organizations", "service_id": "organizations", }, "pi": {"endpoint_prefix": "pi", "service_id": "pi"}, "pinpoint": {"endpoint_prefix": "pinpoint", "service_id": "pinpoint"}, "polly": {"endpoint_prefix": "polly", "service_id": "polly"}, "pricing": {"endpoint_prefix": "api.pricing", "service_id": "pricing"}, "rds": {"endpoint_prefix": "rds", "service_id": "rds"}, "redshift": {"endpoint_prefix": "redshift", "service_id": "redshift"}, "rekognition": { "endpoint_prefix": "rekognition", "service_id": "rekognition", }, "resource-groups": { "endpoint_prefix": "resource-groups", "service_id": "resource-groups", }, "resourcegroupstaggingapi": { "endpoint_prefix": "tagging", "service_id": "resource-groups-tagging-api", }, "route53": {"endpoint_prefix": "route53", "service_id": "route-53"}, "route53domains": { "endpoint_prefix": "route53domains", "service_id": "route-53-domains", }, "s3": {"endpoint_prefix": "s3", "service_id": "s3"}, "sagemaker": { "endpoint_prefix": "api.sagemaker", "service_id": "sagemaker", }, "sagemaker-runtime": { "endpoint_prefix": "runtime.sagemaker", "service_id": "sagemaker-runtime", }, "sdb": {"endpoint_prefix": "sdb", "service_id": "simpledb"}, "secretsmanager": { "endpoint_prefix": "secretsmanager", "service_id": "secrets-manager", }, "serverlessrepo": { "endpoint_prefix": "serverlessrepo", "service_id": "serverlessapplicationrepository", }, "servicecatalog": { "endpoint_prefix": "servicecatalog", "service_id": "service-catalog", }, "servicediscovery": { "endpoint_prefix": "servicediscovery", "service_id": "servicediscovery", }, "ses": {"endpoint_prefix": "email", "service_id": "ses"}, "shield": {"endpoint_prefix": "shield", "service_id": "shield"}, "sms": {"endpoint_prefix": "sms", "service_id": "sms"}, "snowball": {"endpoint_prefix": "snowball", "service_id": "snowball"}, "sns": {"endpoint_prefix": "sns", "service_id": "sns"}, "sqs": {"endpoint_prefix": "sqs", "service_id": "sqs"}, "ssm": {"endpoint_prefix": "ssm", "service_id": "ssm"}, "stepfunctions": {"endpoint_prefix": "states", "service_id": "sfn"}, "storagegateway": { "endpoint_prefix": "storagegateway", "service_id": "storage-gateway", }, "sts": {"endpoint_prefix": "sts", "service_id": "sts"}, "support": {"endpoint_prefix": "support", "service_id": "support"}, "swf": {"endpoint_prefix": "swf", "service_id": "swf"}, "transcribe": { "endpoint_prefix": "transcribe", "service_id": "transcribe", }, "translate": {"endpoint_prefix": "translate", "service_id": "translate"}, "waf": {"endpoint_prefix": "waf", "service_id": "waf"}, "waf-regional": { "endpoint_prefix": "waf-regional", "service_id": "waf-regional", }, "workdocs": {"endpoint_prefix": "workdocs", "service_id": "workdocs"}, "workmail": {"endpoint_prefix": "workmail", "service_id": "workmail"}, "workspaces": { "endpoint_prefix": "workspaces", "service_id": "workspaces", }, "xray": {"endpoint_prefix": "xray", "service_id": "xray"}, } def _event_aliases(): for client_name in SERVICES.keys(): service_id = SERVICES[client_name]['service_id'] yield client_name, service_id def _event_aliases_with_endpoint_prefix(): for client_name in SERVICES.keys(): endpoint_prefix = SERVICES[client_name].get('endpoint_prefix') if endpoint_prefix is not None: yield client_name, endpoint_prefix @pytest.mark.parametrize( "client_name, endpoint_prefix", _event_aliases_with_endpoint_prefix() ) def test_event_alias_by_endpoint_prefix(client_name, endpoint_prefix): _assert_handler_called(client_name, endpoint_prefix) @pytest.mark.parametrize("client_name, service_id", _event_aliases()) def test_event_alias_by_service_id(client_name, service_id): _assert_handler_called(client_name, service_id) @pytest.mark.parametrize("client_name, service_id", _event_aliases()) def test_event_alias_by_client_name(client_name, service_id): _assert_handler_called(client_name, client_name) def _assert_handler_called(client_name, event_part): hook_calls = [] def _hook(**kwargs): hook_calls.append(kwargs['event_name']) session = _get_session() session.register('creating-client-class.%s' % event_part, _hook) session.create_client(client_name) assert len(hook_calls) == 1 def _get_session(): session = Session() session.set_credentials('foo', 'bar') session.set_config_variable('region', 'us-west-2') session.config_filename = 'no-exist-foo' return session