moto/tests/test_rds/test_rds_event_subscriptions.py

139 lines
4.4 KiB
Python
Raw Normal View History

import boto3
import pytest
import sure # noqa # pylint: disable=unused-import
from botocore.exceptions import ClientError
2022-03-09 11:05:18 +00:00
from moto import mock_rds
from moto.core import 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"]
2022-03-09 11:05:18 +00:00
@mock_rds
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")
es["CustSubscriptionId"].should.equal(f"{db_identifier}-events")
es["SnsTopicArn"].should.equal(
f"arn:aws:sns::{ACCOUNT_ID}:{db_identifier}-events-topic"
)
es["SourceType"].should.equal("db-instance")
es["EventCategoriesList"].should.equal(
["Backup", "Creation", "Deletion", "Failure", "Recovery", "Restoration"]
)
es["SourceIdsList"].should.equal([db_identifier])
es["Enabled"].should.equal(False)
2022-03-09 11:05:18 +00:00
@mock_rds
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"]
err["Code"].should.equal("SubscriptionAlreadyExistFault")
err["Message"].should.equal("Subscription db-primary-1-events already exists.")
2022-03-09 11:05:18 +00:00
@mock_rds
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"]
err["Code"].should.equal("SubscriptionNotFoundFault")
err["Message"].should.equal("Subscription my-db-events not found.")
2022-03-09 11:05:18 +00:00
@mock_rds
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(
2022-03-10 14:39:59 +00:00
SubscriptionName=f"{db_identifier}-events"
).get("EventSubscription")
es["CustSubscriptionId"].should.equal(f"{db_identifier}-events")
es["SnsTopicArn"].should.equal(
f"arn:aws:sns::{ACCOUNT_ID}:{db_identifier}-events-topic"
)
2022-03-09 11:05:18 +00:00
@mock_rds
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")
subscriptions.should.have.length_of(1)
subscriptions[0]["CustSubscriptionId"].should.equal(f"{db_identifier}-events")
2022-03-09 11:05:18 +00:00
@mock_rds
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"]
err["Code"].should.equal("SubscriptionNotFoundFault")
err["Message"].should.equal("Subscription my-db-events not found.")