138 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import boto3
 | |
| import pytest
 | |
| from botocore.exceptions import ClientError
 | |
| 
 | |
| from moto import mock_aws
 | |
| from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
 | |
| 
 | |
| DB_INSTANCE_IDENTIFIER = "db-primary-1"
 | |
| 
 | |
| 
 | |
| def _prepare_db_instance(client):
 | |
|     resp = client.create_db_instance(
 | |
|         DBInstanceIdentifier=DB_INSTANCE_IDENTIFIER,
 | |
|         AllocatedStorage=10,
 | |
|         Engine="postgres",
 | |
|         DBName="staging-postgres",
 | |
|         DBInstanceClass="db.m1.small",
 | |
|         MasterUsername="root",
 | |
|         MasterUserPassword="hunter2",
 | |
|         Port=1234,
 | |
|         DBSecurityGroups=["my_sg"],
 | |
|     )
 | |
|     return resp["DBInstance"]["DBInstanceIdentifier"]
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_create_event_subscription():
 | |
|     client = boto3.client("rds", region_name="us-west-2")
 | |
|     db_identifier = _prepare_db_instance(client)
 | |
| 
 | |
|     es = client.create_event_subscription(
 | |
|         SubscriptionName=f"{db_identifier}-events",
 | |
|         SnsTopicArn=f"arn:aws:sns::{ACCOUNT_ID}:{db_identifier}-events-topic",
 | |
|         SourceType="db-instance",
 | |
|         EventCategories=[
 | |
|             "Backup",
 | |
|             "Creation",
 | |
|             "Deletion",
 | |
|             "Failure",
 | |
|             "Recovery",
 | |
|             "Restoration",
 | |
|         ],
 | |
|         SourceIds=[db_identifier],
 | |
|     ).get("EventSubscription")
 | |
| 
 | |
|     assert es["CustSubscriptionId"] == f"{db_identifier}-events"
 | |
|     assert es["SnsTopicArn"] == (
 | |
|         f"arn:aws:sns::{ACCOUNT_ID}:{db_identifier}-events-topic"
 | |
|     )
 | |
|     assert es["SourceType"] == "db-instance"
 | |
|     assert es["EventCategoriesList"] == (
 | |
|         ["Backup", "Creation", "Deletion", "Failure", "Recovery", "Restoration"]
 | |
|     )
 | |
|     assert es["SourceIdsList"] == [db_identifier]
 | |
|     assert es["Enabled"] is False
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_create_event_fail_already_exists():
 | |
|     client = boto3.client("rds", region_name="us-west-2")
 | |
|     db_identifier = _prepare_db_instance(client)
 | |
| 
 | |
|     client.create_event_subscription(
 | |
|         SubscriptionName=f"{db_identifier}-events",
 | |
|         SnsTopicArn=f"arn:aws:sns::{ACCOUNT_ID}:{db_identifier}-events-topic",
 | |
|     )
 | |
| 
 | |
|     with pytest.raises(ClientError) as ex:
 | |
|         client.create_event_subscription(
 | |
|             SubscriptionName=f"{db_identifier}-events",
 | |
|             SnsTopicArn=f"arn:aws:sns::{ACCOUNT_ID}:{db_identifier}-events-topic",
 | |
|             Enabled=True,
 | |
|         )
 | |
| 
 | |
|     err = ex.value.response["Error"]
 | |
| 
 | |
|     assert err["Code"] == "SubscriptionAlreadyExistFault"
 | |
|     assert err["Message"] == "Subscription db-primary-1-events already exists."
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_delete_event_subscription_fails_unknown_subscription():
 | |
|     client = boto3.client("rds", region_name="us-west-2")
 | |
|     with pytest.raises(ClientError) as ex:
 | |
|         client.delete_event_subscription(SubscriptionName="my-db-events")
 | |
| 
 | |
|     err = ex.value.response["Error"]
 | |
|     assert err["Code"] == "SubscriptionNotFoundFault"
 | |
|     assert err["Message"] == "Subscription my-db-events not found."
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_delete_event_subscription():
 | |
|     client = boto3.client("rds", region_name="us-west-2")
 | |
|     db_identifier = _prepare_db_instance(client)
 | |
| 
 | |
|     client.create_event_subscription(
 | |
|         SubscriptionName=f"{db_identifier}-events",
 | |
|         SnsTopicArn=f"arn:aws:sns::{ACCOUNT_ID}:{db_identifier}-events-topic",
 | |
|     )
 | |
| 
 | |
|     es = client.delete_event_subscription(
 | |
|         SubscriptionName=f"{db_identifier}-events"
 | |
|     ).get("EventSubscription")
 | |
| 
 | |
|     assert es["CustSubscriptionId"] == f"{db_identifier}-events"
 | |
|     assert es["SnsTopicArn"] == (
 | |
|         f"arn:aws:sns::{ACCOUNT_ID}:{db_identifier}-events-topic"
 | |
|     )
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_describe_event_subscriptions():
 | |
|     client = boto3.client("rds", region_name="us-west-2")
 | |
|     db_identifier = _prepare_db_instance(client)
 | |
| 
 | |
|     client.create_event_subscription(
 | |
|         SubscriptionName=f"{db_identifier}-events",
 | |
|         SnsTopicArn=f"arn:aws:sns::{ACCOUNT_ID}:{db_identifier}-events-topic",
 | |
|     )
 | |
| 
 | |
|     subscriptions = client.describe_event_subscriptions().get("EventSubscriptionsList")
 | |
| 
 | |
|     assert len(subscriptions) == 1
 | |
|     assert subscriptions[0]["CustSubscriptionId"] == f"{db_identifier}-events"
 | |
| 
 | |
| 
 | |
| @mock_aws
 | |
| def test_describe_event_subscriptions_fails_unknown_subscription():
 | |
|     client = boto3.client("rds", region_name="us-west-2")
 | |
|     with pytest.raises(ClientError) as ex:
 | |
|         client.describe_event_subscriptions(SubscriptionName="my-db-events")
 | |
| 
 | |
|     err = ex.value.response["Error"]
 | |
| 
 | |
|     assert err["Code"] == "SubscriptionNotFoundFault"
 | |
|     assert err["Message"] == "Subscription my-db-events not found."
 |