106 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			106 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | import boto3 | ||
|  | import json | ||
|  | import os | ||
|  | 
 | ||
|  | from datetime import datetime | ||
|  | from moto import mock_events, mock_logs, settings | ||
|  | from unittest import mock, SkipTest | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_events | ||
|  | def test_create_partner_event_bus(): | ||
|  |     client_account = "111122223333" | ||
|  |     client = boto3.client("events", "us-east-1") | ||
|  |     client.create_partner_event_source( | ||
|  |         Name="mypartner/actions/action1", Account=client_account | ||
|  |     ) | ||
|  |     resp = client.describe_partner_event_source(Name="mypartner/actions/action1") | ||
|  |     assert ( | ||
|  |         resp["Arn"] | ||
|  |         == "arn:aws:events:us-east-1::event-source/aws.partner/mypartner/actions/action1" | ||
|  |     ) | ||
|  |     assert resp["Name"] == "mypartner/actions/action1" | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_events | ||
|  | def test_describe_partner_event_busses(): | ||
|  |     if settings.TEST_SERVER_MODE: | ||
|  |         raise SkipTest("Can't change accounts easily in ServerMode") | ||
|  |     # Having a separate partner account isn't 'strictly necessary - we could do that from the main account | ||
|  |     # But it makes it more obvious for the reader that we're accessing different accounts IMO | ||
|  |     partner_account = "111122223333" | ||
|  |     client_account = "444455556666" | ||
|  |     client = boto3.client("events", "us-east-1") | ||
|  |     name = "mypartner/actions/action1" | ||
|  |     with mock.patch.dict(os.environ, {"MOTO_ACCOUNT_ID": partner_account}): | ||
|  |         client.create_partner_event_source(Name=name, Account=client_account) | ||
|  | 
 | ||
|  |     with mock.patch.dict(os.environ, {"MOTO_ACCOUNT_ID": client_account}): | ||
|  |         resp = client.describe_event_source(Name=name) | ||
|  |         assert resp["Name"] == name | ||
|  |         assert resp["CreatedBy"] == "mypartner" | ||
|  |         assert resp["State"] == "ACTIVE" | ||
|  | 
 | ||
|  |         client.create_event_bus(Name=name, EventSourceName=name) | ||
|  |         resp = client.describe_event_bus(Name=name) | ||
|  |         assert resp["Name"] == name | ||
|  | 
 | ||
|  |     with mock.patch.dict(os.environ, {"MOTO_ACCOUNT_ID": partner_account}): | ||
|  |         client.delete_partner_event_source(Name=name, Account=client_account) | ||
|  | 
 | ||
|  |     with mock.patch.dict(os.environ, {"MOTO_ACCOUNT_ID": client_account}): | ||
|  |         resp = client.describe_event_source(Name=name) | ||
|  |         assert resp["State"] == "DELETED" | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_events | ||
|  | @mock_logs | ||
|  | def test_put_partner_events(): | ||
|  |     if settings.TEST_SERVER_MODE: | ||
|  |         raise SkipTest("Can't change accounts easily in ServerMode") | ||
|  | 
 | ||
|  |     partner_account = "111122223333" | ||
|  |     client_account = "444455556666" | ||
|  |     events = boto3.client("events", "us-east-1") | ||
|  |     logs = boto3.client("logs", region_name="us-east-1") | ||
|  |     name = "mypartner/actions/action1" | ||
|  |     with mock.patch.dict(os.environ, {"MOTO_ACCOUNT_ID": partner_account}): | ||
|  |         events.create_partner_event_source(Name=name, Account=client_account) | ||
|  | 
 | ||
|  |     with mock.patch.dict(os.environ, {"MOTO_ACCOUNT_ID": client_account}): | ||
|  |         events.create_event_bus(Name=name, EventSourceName=name) | ||
|  | 
 | ||
|  |         log_group_name = "/test-group" | ||
|  |         rule_name = "test-rule" | ||
|  |         logs.create_log_group(logGroupName=log_group_name) | ||
|  |         log_group_arn = ( | ||
|  |             f"arn:aws:logs:us-east-1:{client_account}:log-group:{log_group_name}" | ||
|  |         ) | ||
|  |         events.put_rule( | ||
|  |             Name=rule_name, | ||
|  |             EventPattern=json.dumps({"account": [client_account]}), | ||
|  |             State="ENABLED", | ||
|  |         ) | ||
|  |         events.put_targets( | ||
|  |             Rule=rule_name, | ||
|  |             Targets=[{"Id": "logs", "Arn": log_group_arn}], | ||
|  |         ) | ||
|  | 
 | ||
|  |     with mock.patch.dict(os.environ, {"MOTO_ACCOUNT_ID": partner_account}): | ||
|  |         resp = events.put_partner_events( | ||
|  |             Entries=[ | ||
|  |                 { | ||
|  |                     "Time": datetime.now(), | ||
|  |                     "Source": name, | ||
|  |                     "DetailType": "test-detail-type", | ||
|  |                     "Detail": json.dumps({"foo": "123", "bar": "123"}), | ||
|  |                 } | ||
|  |             ] | ||
|  |         ) | ||
|  |         assert resp["FailedEntryCount"] == 0 | ||
|  | 
 | ||
|  |     with mock.patch.dict(os.environ, {"MOTO_ACCOUNT_ID": client_account}): | ||
|  |         log_events = logs.filter_log_events(logGroupName=log_group_name)["events"] | ||
|  |         assert len(log_events) == 1 | ||
|  |         assert "test-detail-type" in log_events[0]["message"] |