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(): endpoint_prefix = SERVICES[client_name].get('endpoint_prefix') 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') service_id = SERVICES[client_name]['service_id'] 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