Fix:Add list connection API's (#3976)
* Initial commit create connection * Added connection API's * Add destination API's * fixed tests * fix tests * Fixed tests
This commit is contained in:
parent
74559f2a91
commit
d325593e46
@ -542,6 +542,51 @@ class Replay(BaseModel):
|
|||||||
self.end_time = unix_time(datetime.utcnow())
|
self.end_time = unix_time(datetime.utcnow())
|
||||||
|
|
||||||
|
|
||||||
|
class Connection(BaseModel):
|
||||||
|
def __init__(
|
||||||
|
self, name, region_name, description, authorization_type, auth_parameters,
|
||||||
|
):
|
||||||
|
self.name = name
|
||||||
|
self.region = region_name
|
||||||
|
self.description = description
|
||||||
|
self.authorization_type = authorization_type
|
||||||
|
self.auth_parameters = auth_parameters
|
||||||
|
self.creation_time = unix_time(datetime.utcnow())
|
||||||
|
self.state = "AUTHORIZED"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def arn(self):
|
||||||
|
return "arn:aws:events:{0}:{1}:connection/{2}".format(
|
||||||
|
self.region, ACCOUNT_ID, self.name
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Destination(BaseModel):
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
name,
|
||||||
|
region_name,
|
||||||
|
description,
|
||||||
|
connection_arn,
|
||||||
|
invocation_endpoint,
|
||||||
|
http_method,
|
||||||
|
):
|
||||||
|
self.name = name
|
||||||
|
self.region = region_name
|
||||||
|
self.description = description
|
||||||
|
self.connection_arn = connection_arn
|
||||||
|
self.invocation_endpoint = invocation_endpoint
|
||||||
|
self.creation_time = unix_time(datetime.utcnow())
|
||||||
|
self.http_method = http_method
|
||||||
|
self.state = "ACTIVE"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def arn(self):
|
||||||
|
return "arn:aws:events:{0}:{1}:destination/{2}".format(
|
||||||
|
self.region, ACCOUNT_ID, self.name
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class EventPattern:
|
class EventPattern:
|
||||||
def __init__(self, filter):
|
def __init__(self, filter):
|
||||||
self._filter = self._load_event_pattern(filter)
|
self._filter = self._load_event_pattern(filter)
|
||||||
@ -649,6 +694,8 @@ class EventsBackend(BaseBackend):
|
|||||||
self.tagger = TaggingService()
|
self.tagger = TaggingService()
|
||||||
|
|
||||||
self._add_default_event_bus()
|
self._add_default_event_bus()
|
||||||
|
self.connections = {}
|
||||||
|
self.destinations = {}
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
region_name = self.region_name
|
region_name = self.region_name
|
||||||
@ -803,7 +850,6 @@ class EventsBackend(BaseBackend):
|
|||||||
raise ValidationException(
|
raise ValidationException(
|
||||||
"ScheduleExpression is supported only on the default event bus."
|
"ScheduleExpression is supported only on the default event bus."
|
||||||
)
|
)
|
||||||
|
|
||||||
if name in self.rules:
|
if name in self.rules:
|
||||||
self.update_rule(self.rules[name], **kwargs)
|
self.update_rule(self.rules[name], **kwargs)
|
||||||
new_rule = self.rules[name]
|
new_rule = self.rules[name]
|
||||||
@ -1282,6 +1328,38 @@ class EventsBackend(BaseBackend):
|
|||||||
|
|
||||||
return {"ReplayArn": replay.arn, "State": ReplayState.CANCELLING.value}
|
return {"ReplayArn": replay.arn, "State": ReplayState.CANCELLING.value}
|
||||||
|
|
||||||
|
def create_connection(self, name, description, authorization_type, auth_parameters):
|
||||||
|
connection = Connection(
|
||||||
|
name, self.region_name, description, authorization_type, auth_parameters
|
||||||
|
)
|
||||||
|
self.connections[name] = connection
|
||||||
|
return connection
|
||||||
|
|
||||||
|
def list_connections(self):
|
||||||
|
return self.connections.values()
|
||||||
|
|
||||||
|
def create_api_destination(
|
||||||
|
self, name, description, connection_arn, invocation_endpoint, http_method
|
||||||
|
):
|
||||||
|
|
||||||
|
destination = Destination(
|
||||||
|
name=name,
|
||||||
|
region_name=self.region_name,
|
||||||
|
description=description,
|
||||||
|
connection_arn=connection_arn,
|
||||||
|
invocation_endpoint=invocation_endpoint,
|
||||||
|
http_method=http_method,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.destinations[name] = destination
|
||||||
|
return destination
|
||||||
|
|
||||||
|
def list_api_destinations(self):
|
||||||
|
return self.destinations.values()
|
||||||
|
|
||||||
|
def describe_api_destination(self, name):
|
||||||
|
return self.destinations.get(name)
|
||||||
|
|
||||||
|
|
||||||
events_backends = {}
|
events_backends = {}
|
||||||
for region in Session().get_available_regions("events"):
|
for region in Session().get_available_regions("events"):
|
||||||
|
@ -409,3 +409,102 @@ class EventsHandler(BaseResponse):
|
|||||||
result = self.events_backend.cancel_replay(name)
|
result = self.events_backend.cancel_replay(name)
|
||||||
|
|
||||||
return json.dumps(result), self.response_headers
|
return json.dumps(result), self.response_headers
|
||||||
|
|
||||||
|
def create_connection(self):
|
||||||
|
name = self._get_param("Name")
|
||||||
|
description = self._get_param("Description")
|
||||||
|
authorization_type = self._get_param("AuthorizationType")
|
||||||
|
auth_parameters = self._get_param("AuthParameters")
|
||||||
|
|
||||||
|
result = self.events_backend.create_connection(
|
||||||
|
name, description, authorization_type, auth_parameters
|
||||||
|
)
|
||||||
|
|
||||||
|
return (
|
||||||
|
json.dumps(
|
||||||
|
{
|
||||||
|
"ConnectionArn": result.arn,
|
||||||
|
"ConnectionState": "AUTHORIZED",
|
||||||
|
"CreationTime": result.creation_time,
|
||||||
|
"LastModifiedTime": result.creation_time,
|
||||||
|
}
|
||||||
|
),
|
||||||
|
self.response_headers,
|
||||||
|
)
|
||||||
|
|
||||||
|
def list_connections(self):
|
||||||
|
connections = self.events_backend.list_connections()
|
||||||
|
result = []
|
||||||
|
for connection in connections:
|
||||||
|
result.append(
|
||||||
|
{
|
||||||
|
"ConnectionArn": connection.arn,
|
||||||
|
"ConnectionState": "AUTHORIZED",
|
||||||
|
"CreationTime": connection.creation_time,
|
||||||
|
"LastModifiedTime": connection.creation_time,
|
||||||
|
"AuthorizationType": connection.authorization_type,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return json.dumps({"Connections": result}), self.response_headers
|
||||||
|
|
||||||
|
def create_api_destination(self):
|
||||||
|
name = self._get_param("Name")
|
||||||
|
description = self._get_param("Description")
|
||||||
|
connection_arn = self._get_param("ConnectionArn")
|
||||||
|
invocation_endpoint = self._get_param("InvocationEndpoint")
|
||||||
|
http_method = self._get_param("HttpMethod")
|
||||||
|
|
||||||
|
destination = self.events_backend.create_api_destination(
|
||||||
|
name, description, connection_arn, invocation_endpoint, http_method
|
||||||
|
)
|
||||||
|
return (
|
||||||
|
json.dumps(
|
||||||
|
{
|
||||||
|
"ApiDestinationArn": destination.arn,
|
||||||
|
"ApiDestinationState": "ACTIVE",
|
||||||
|
"CreationTime": destination.creation_time,
|
||||||
|
"LastModifiedTime": destination.creation_time,
|
||||||
|
}
|
||||||
|
),
|
||||||
|
self.response_headers,
|
||||||
|
)
|
||||||
|
|
||||||
|
def list_api_destinations(self):
|
||||||
|
destinations = self.events_backend.list_api_destinations()
|
||||||
|
result = []
|
||||||
|
for destination in destinations:
|
||||||
|
result.append(
|
||||||
|
{
|
||||||
|
"ApiDestinationArn": destination.arn,
|
||||||
|
"Name": destination.name,
|
||||||
|
"ApiDestinationState": destination.state,
|
||||||
|
"ConnectionArn": destination.connection_arn,
|
||||||
|
"InvocationEndpoint": destination.invocation_endpoint,
|
||||||
|
"HttpMethod": destination.http_method,
|
||||||
|
"CreationTime": destination.creation_time,
|
||||||
|
"LastModifiedTime": destination.creation_time,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return json.dumps({"ApiDestinations": result}), self.response_headers
|
||||||
|
|
||||||
|
def describe_api_destination(self):
|
||||||
|
name = self._get_param("Name")
|
||||||
|
destination = self.events_backend.describe_api_destination(name)
|
||||||
|
|
||||||
|
return (
|
||||||
|
json.dumps(
|
||||||
|
{
|
||||||
|
"ApiDestinationArn": destination.arn,
|
||||||
|
"Name": destination.name,
|
||||||
|
"ApiDestinationState": destination.state,
|
||||||
|
"ConnectionArn": destination.connection_arn,
|
||||||
|
"InvocationEndpoint": destination.invocation_endpoint,
|
||||||
|
"HttpMethod": destination.http_method,
|
||||||
|
"CreationTime": destination.creation_time,
|
||||||
|
"LastModifiedTime": destination.creation_time,
|
||||||
|
}
|
||||||
|
),
|
||||||
|
self.response_headers,
|
||||||
|
)
|
||||||
|
@ -2138,3 +2138,78 @@ def test_start_replay_send_to_log_group():
|
|||||||
event_replay["resources"].should.be.empty
|
event_replay["resources"].should.be.empty
|
||||||
event_replay["detail"].should.equal({"key": "value"})
|
event_replay["detail"].should.equal({"key": "value"})
|
||||||
event_replay["replay-name"].should.equal("test-replay")
|
event_replay["replay-name"].should.equal("test-replay")
|
||||||
|
|
||||||
|
|
||||||
|
@mock_events
|
||||||
|
def test_create_and_list_connections():
|
||||||
|
client = boto3.client("events", "eu-central-1")
|
||||||
|
|
||||||
|
response = client.list_connections()
|
||||||
|
|
||||||
|
assert len(response.get("Connections")) == 0
|
||||||
|
|
||||||
|
response = client.create_connection(
|
||||||
|
Name="test",
|
||||||
|
Description="test description",
|
||||||
|
AuthorizationType="API_KEY",
|
||||||
|
AuthParameters={
|
||||||
|
"ApiKeyAuthParameters": {"ApiKeyName": "test", "ApiKeyValue": "test"}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
assert response.get(
|
||||||
|
"ConnectionArn"
|
||||||
|
) == "arn:aws:events:eu-central-1:{0}:connection/test".format(ACCOUNT_ID)
|
||||||
|
|
||||||
|
response = client.list_connections()
|
||||||
|
|
||||||
|
assert response.get("Connections")[0].get(
|
||||||
|
"ConnectionArn"
|
||||||
|
) == "arn:aws:events:eu-central-1:{0}:connection/test".format(ACCOUNT_ID)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_events
|
||||||
|
def test_create_and_list_api_destinations():
|
||||||
|
client = boto3.client("events", "eu-central-1")
|
||||||
|
|
||||||
|
response = client.create_connection(
|
||||||
|
Name="test",
|
||||||
|
Description="test description",
|
||||||
|
AuthorizationType="API_KEY",
|
||||||
|
AuthParameters={
|
||||||
|
"ApiKeyAuthParameters": {"ApiKeyName": "test", "ApiKeyValue": "test"}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
destination_response = client.create_api_destination(
|
||||||
|
Name="test",
|
||||||
|
Description="test-description",
|
||||||
|
ConnectionArn=response.get("ConnectionArn"),
|
||||||
|
InvocationEndpoint="www.google.com",
|
||||||
|
HttpMethod="GET",
|
||||||
|
)
|
||||||
|
|
||||||
|
assert destination_response.get(
|
||||||
|
"ApiDestinationArn"
|
||||||
|
) == "arn:aws:events:eu-central-1:{0}:destination/test".format(ACCOUNT_ID)
|
||||||
|
assert destination_response.get("ApiDestinationState") == "ACTIVE"
|
||||||
|
|
||||||
|
destination_response = client.describe_api_destination(Name="test")
|
||||||
|
|
||||||
|
assert destination_response.get(
|
||||||
|
"ApiDestinationArn"
|
||||||
|
) == "arn:aws:events:eu-central-1:{0}:destination/test".format(ACCOUNT_ID)
|
||||||
|
|
||||||
|
assert destination_response.get("Name") == "test"
|
||||||
|
assert destination_response.get("ApiDestinationState") == "ACTIVE"
|
||||||
|
|
||||||
|
destination_response = client.list_api_destinations()
|
||||||
|
assert destination_response.get("ApiDestinations")[0].get(
|
||||||
|
"ApiDestinationArn"
|
||||||
|
) == "arn:aws:events:eu-central-1:{0}:destination/test".format(ACCOUNT_ID)
|
||||||
|
|
||||||
|
assert destination_response.get("ApiDestinations")[0].get("Name") == "test"
|
||||||
|
assert (
|
||||||
|
destination_response.get("ApiDestinations")[0].get("ApiDestinationState")
|
||||||
|
== "ACTIVE"
|
||||||
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user