moto/tests/test_mq/test_mq.py
2022-01-25 19:01:03 -01:00

428 lines
14 KiB
Python

import boto3
import pytest
import sure # noqa # pylint: disable=unused-import
from botocore.exceptions import ClientError
from moto import mock_mq
# See our Development Tips on writing tests for hints on how to write good tests:
# http://docs.getmoto.org/en/latest/docs/contributing/development_tips/tests.html
@mock_mq
def test_create_broker_minimal():
client = boto3.client("mq", region_name="ap-southeast-1")
resp = client.create_broker(
AutoMinorVersionUpgrade=False,
BrokerName="testbroker",
DeploymentMode="dm",
EngineType="ACTIVEMQ",
EngineVersion="version",
HostInstanceType="hit",
PubliclyAccessible=True,
Users=[{"Username": "admin", "Password": "adm1n"}],
)
resp.should.have.key("BrokerId")
resp.should.have.key("BrokerArn").match("arn:aws")
@mock_mq
def test_create_with_tags():
client = boto3.client("mq", region_name="us-east-2")
broker_id = client.create_broker(
AutoMinorVersionUpgrade=False,
BrokerName="testbroker",
DeploymentMode="CLUSTER_MULTI_AZ",
EngineType="RabbitMQ",
EngineVersion="version",
HostInstanceType="hit",
PubliclyAccessible=True,
Tags={"key1": "val2", "key2": "val2"},
Users=[],
)["BrokerId"]
resp = client.describe_broker(BrokerId=broker_id)
resp.should.have.key("Tags").equals({"key1": "val2", "key2": "val2"})
@mock_mq
def test_create_with_multiple_users():
client = boto3.client("mq", region_name="us-east-2")
broker_id = client.create_broker(
AutoMinorVersionUpgrade=False,
BrokerName="testbroker",
DeploymentMode="CLUSTER_MULTI_AZ",
EngineType="RabbitMQ",
EngineVersion="version",
HostInstanceType="hit",
PubliclyAccessible=True,
Users=[
{
"ConsoleAccess": True,
"Groups": ["second", "first", "third"],
"Password": "SecondTestTest1234",
"Username": "SecondTest",
},
{
"ConsoleAccess": False,
"Groups": [],
"Password": "TestTest1234",
"Username": "Test",
},
],
)["BrokerId"]
user1 = client.describe_user(BrokerId=broker_id, Username="SecondTest")
user1.should.have.key("Username").equals("SecondTest")
user1.should.have.key("Groups").equals(["second", "first", "third"])
user1.should.have.key("ConsoleAccess").equals(True)
user2 = client.describe_user(BrokerId=broker_id, Username="Test")
user2.should.have.key("Username").equals("Test")
user2.should.have.key("Groups").equals([])
user2.should.have.key("ConsoleAccess").equals(False)
@mock_mq
def test_create_with_configuration():
client = boto3.client("mq", region_name="us-east-2")
broker_id = client.create_broker(
AutoMinorVersionUpgrade=False,
BrokerName="testbroker",
Configuration={"Id": "config_id_x", "Revision": 3},
DeploymentMode="CLUSTER_SINGLE",
EngineType="ActiveMQ",
EngineVersion="version",
HostInstanceType="hit",
PubliclyAccessible=True,
Tags={"key1": "val2", "key2": "val2"},
Users=[],
)["BrokerId"]
resp = client.describe_broker(BrokerId=broker_id)
resp.should.have.key("Configurations")
resp["Configurations"].should.have.key("Current").equals(
{"Id": "config_id_x", "Revision": 3}
)
@mock_mq
def test_update_with_configuration():
client = boto3.client("mq", region_name="us-east-2")
broker_id = client.create_broker(
AutoMinorVersionUpgrade=False,
BrokerName="testbroker",
Configuration={"Id": "config_id_x", "Revision": 1},
DeploymentMode="CLUSTER_SINGLE",
EngineType="ActiveMQ",
EngineVersion="version",
HostInstanceType="hit",
PubliclyAccessible=True,
Tags={"key1": "val2", "key2": "val2"},
Users=[],
)["BrokerId"]
client.update_broker(
BrokerId=broker_id, Configuration={"Id": "config_id_x", "Revision": 2}
)
resp = client.describe_broker(BrokerId=broker_id)
resp.should.have.key("Configurations")
resp["Configurations"].should.have.key("Current").equals(
{"Id": "config_id_x", "Revision": 2}
)
@mock_mq
def test_delete_broker():
client = boto3.client("mq", region_name="ap-southeast-1")
broker_id = client.create_broker(
AutoMinorVersionUpgrade=False,
BrokerName="testbroker",
DeploymentMode="dm",
EngineType="ACTIVEMQ",
EngineVersion="version",
HostInstanceType="hit",
PubliclyAccessible=True,
Users=[{"Username": "admin", "Password": "adm1n"}],
)["BrokerId"]
resp = client.delete_broker(BrokerId=broker_id)
resp.should.have.key("BrokerId").equals(broker_id)
client.list_brokers().should.have.key("BrokerSummaries").length_of(0)
@mock_mq
def test_describe_broker():
client = boto3.client("mq", region_name="us-east-2")
broker_id = client.create_broker(
AuthenticationStrategy="SIMPLE",
AutoMinorVersionUpgrade=False,
BrokerName="testbroker",
DeploymentMode="dm",
EncryptionOptions={"KmsKeyId": "kms-key", "UseAwsOwnedKey": False},
EngineType="ACTIVEMQ",
EngineVersion="version",
LdapServerMetadata={
"Hosts": ["host1"],
"RoleBase": "role_base_thingy",
"RoleSearchMatching": "rsm",
"ServiceAccountUsername": "sau",
"ServiceAccountPassword": "sap",
"UserBase": "ub",
"UserSearchMatching": "usm",
},
HostInstanceType="hit",
PubliclyAccessible=True,
SecurityGroups=["secgroup1"],
StorageType="efs",
SubnetIds=["s-id"],
Users=[{"Username": "admin", "Password": "adm1n"}],
)["BrokerId"]
resp = client.describe_broker(BrokerId=broker_id)
resp.should.have.key("BrokerId").equals(broker_id)
resp.should.have.key("BrokerArn").match("arn:aws")
resp.should.have.key("BrokerState").equals("RUNNING")
resp.should.have.key("Created")
resp.should.have.key("AuthenticationStrategy").equals("SIMPLE")
resp.should.have.key("AutoMinorVersionUpgrade").equals(False)
resp.should.have.key("BrokerName").equals("testbroker")
resp.should.have.key("DeploymentMode").equals("dm")
resp.should.have.key("EncryptionOptions").equals(
{"KmsKeyId": "kms-key", "UseAwsOwnedKey": False}
)
resp.should.have.key("EngineType").equals("ACTIVEMQ")
resp.should.have.key("EngineVersion").equals("version")
resp.should.have.key("HostInstanceType").equals("hit")
resp.should.have.key("LdapServerMetadata").equals(
{
"Hosts": ["host1"],
"RoleBase": "role_base_thingy",
"RoleSearchMatching": "rsm",
"ServiceAccountUsername": "sau",
"UserBase": "ub",
"UserSearchMatching": "usm",
}
)
resp.should.have.key("PubliclyAccessible").equals(True)
resp.should.have.key("SecurityGroups").equals(["secgroup1"])
resp.should.have.key("StorageType").equals("efs")
resp.should.have.key("SubnetIds").equals(["s-id"])
resp.should.have.key("Users").equals([{"Username": "admin"}])
@mock_mq
def test_describe_broker_with_defaults():
client = boto3.client("mq", region_name="us-east-2")
broker_id = client.create_broker(
AutoMinorVersionUpgrade=False,
BrokerName="testbroker",
DeploymentMode="dm",
EngineType="ACTIVEMQ",
EngineVersion="version",
HostInstanceType="hit",
PubliclyAccessible=True,
Users=[],
)["BrokerId"]
resp = client.describe_broker(BrokerId=broker_id)
resp.should.have.key("BrokerInstances").length_of(1)
resp.should.have.key("Configurations")
resp["Configurations"].should.have.key("Current")
resp["Configurations"].should.have.key("History").length_of(0)
resp["Configurations"].shouldnt.have.key("Pending")
resp.should.have.key("EncryptionOptions").equals({"UseAwsOwnedKey": True})
resp.should.have.key("MaintenanceWindowStartTime").equals(
{"DayOfWeek": "Sunday", "TimeOfDay": "00:00", "TimeZone": "UTC"}
)
resp.should.have.key("Logs").equals({"Audit": False, "General": False})
resp.should.have.key("SubnetIds").length_of(1)
@mock_mq
def test_describe_multiple_rabbits():
client = boto3.client("mq", region_name="us-east-2")
broker_id = client.create_broker(
AutoMinorVersionUpgrade=False,
BrokerName="testbroker",
DeploymentMode="CLUSTER_MULTI_AZ",
EngineType="RabbitMQ",
EngineVersion="version",
HostInstanceType="hit",
PubliclyAccessible=True,
Users=[],
)["BrokerId"]
resp = client.describe_broker(BrokerId=broker_id)
resp.should.have.key("BrokerInstances")
resp["BrokerInstances"][0]["ConsoleURL"].should.equal(
"https://0000.mq.us-east-2.amazonaws.com"
)
resp["BrokerInstances"][0]["Endpoints"].should.have.length_of(1)
resp.shouldnt.have.key("Configurations")
resp.should.have.key("Logs").equals({"General": False})
resp.should.have.key("SubnetIds").length_of(4)
@mock_mq
def test_describe_active_mq_with_standby():
client = boto3.client("mq", region_name="us-east-2")
broker_id = client.create_broker(
AutoMinorVersionUpgrade=False,
BrokerName="testbroker",
DeploymentMode="ACTIVE_STANDBY_MULTI_AZ",
EngineType="ActiveMQ",
EngineVersion="version",
HostInstanceType="hit",
PubliclyAccessible=True,
Users=[],
)["BrokerId"]
resp = client.describe_broker(BrokerId=broker_id)
# Instances and subnets in two regions - one active, one standby
resp.should.have.key("BrokerInstances").length_of(2)
resp.should.have.key("SubnetIds").length_of(2)
@mock_mq
def test_describe_broker_unknown():
client = boto3.client("mq", region_name="us-east-2")
with pytest.raises(ClientError) as exc:
client.describe_broker(BrokerId="unknown")
err = exc.value.response["Error"]
err["Code"].should.equal("NotFoundException")
err["Message"].should.equal(
"Can't find requested broker [unknown]. Make sure your broker exists."
)
@mock_mq
def test_list_brokers_empty():
client = boto3.client("mq", region_name="eu-west-1")
resp = client.list_brokers()
resp.should.have.key("BrokerSummaries").equals([])
@mock_mq
def test_list_brokers():
client = boto3.client("mq", region_name="eu-west-1")
broker_id = client.create_broker(
AutoMinorVersionUpgrade=False,
BrokerName="testbroker",
DeploymentMode="dm",
EngineType="ACTIVEMQ",
EngineVersion="version",
HostInstanceType="hit",
PubliclyAccessible=True,
Users=[{"Username": "admin", "Password": "adm1n"}],
)["BrokerId"]
resp = client.list_brokers()
resp.should.have.key("BrokerSummaries").length_of(1)
summary = resp["BrokerSummaries"][0]
summary.should.have.key("BrokerArn")
summary.should.have.key("BrokerId").equals(broker_id)
summary.should.have.key("BrokerName").equals("testbroker")
summary.should.have.key("BrokerState").equals("RUNNING")
summary.should.have.key("Created")
summary.should.have.key("DeploymentMode").equals("dm")
summary.should.have.key("EngineType").equals("ACTIVEMQ")
summary.should.have.key("HostInstanceType").equals("hit")
summary.shouldnt.have.key("Users")
@mock_mq
def test_update_broker_single_attribute():
client = boto3.client("mq", region_name="ap-southeast-1")
broker_id = client.create_broker(
AutoMinorVersionUpgrade=False,
BrokerName="testbroker",
DeploymentMode="dm",
EngineType="ACTIVEMQ",
EngineVersion="version",
HostInstanceType="hit",
PubliclyAccessible=True,
Users=[{"Username": "admin", "Password": "adm1n"}],
)["BrokerId"]
resp = client.update_broker(AutoMinorVersionUpgrade=True, BrokerId=broker_id)
# Changed
resp.should.have.key("AutoMinorVersionUpgrade").equals(True)
# Unchanged
resp.should.have.key("BrokerId").equals(broker_id)
resp.should.have.key("EngineVersion").equals("version")
@mock_mq
def test_update_broker_multiple_attributes():
client = boto3.client("mq", region_name="ap-southeast-1")
broker_id = client.create_broker(
AutoMinorVersionUpgrade=False,
BrokerName="testbroker",
DeploymentMode="dm",
EngineType="ACTIVEMQ",
EngineVersion="version",
HostInstanceType="hit",
PubliclyAccessible=True,
SecurityGroups=["sg-1"],
Users=[{"Username": "admin", "Password": "adm1n"}],
)["BrokerId"]
resp = client.update_broker(
AutoMinorVersionUpgrade=True,
BrokerId=broker_id,
Logs={"Audit": True, "General": True},
EngineVersion="version2",
SecurityGroups=["sg-1", "sg-2"],
)
# Changed
resp.should.have.key("AutoMinorVersionUpgrade").equals(True)
resp.should.have.key("Logs").equals({"Audit": True, "General": True})
resp.should.have.key("EngineVersion").equals("version2")
resp.should.have.key("SecurityGroups").equals(["sg-1", "sg-2"])
# Unchanged
resp.should.have.key("BrokerId").equals(broker_id)
@mock_mq
def test_reboot_broker():
client = boto3.client("mq", region_name="ap-southeast-1")
broker_id = client.create_broker(
AutoMinorVersionUpgrade=False,
BrokerName="testbroker",
DeploymentMode="dm",
EngineType="ACTIVEMQ",
EngineVersion="version",
HostInstanceType="hit",
PubliclyAccessible=True,
Users=[{"Username": "admin", "Password": "adm1n"}],
)["BrokerId"]
client.reboot_broker(BrokerId=broker_id)
# Noop - nothing to assert or verify
pass