Skip to content

Commit ac8897e

Browse files
authored
Eventstudio: Move fixtures to make them available in Pro (#12962)
1 parent 3cfb711 commit ac8897e

File tree

8 files changed

+111
-99
lines changed

8 files changed

+111
-99
lines changed

localstack-core/localstack/testing/pytest/fixtures.py

Lines changed: 95 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2579,14 +2579,22 @@ def _create_rule(**kwargs):
25792579

25802580
@pytest.fixture
25812581
def sqs_as_events_target(aws_client, sqs_get_queue_arn):
2582+
"""
2583+
Fixture that creates an SQS queue and sets it up as a target for EventBridge events.
2584+
"""
25822585
queue_urls = []
25832586

2584-
def _sqs_as_events_target(queue_name: str | None = None) -> tuple[str, str]:
2587+
def _sqs_as_events_target(
2588+
queue_name: str | None = None, custom_aws_client=None
2589+
) -> tuple[str, str]:
25852590
if not queue_name:
25862591
queue_name = f"tests-queue-{short_uid()}"
2587-
sqs_client = aws_client.sqs
2592+
if custom_aws_client:
2593+
sqs_client = custom_aws_client.sqs
2594+
else:
2595+
sqs_client = aws_client.sqs
25882596
queue_url = sqs_client.create_queue(QueueName=queue_name)["QueueUrl"]
2589-
queue_urls.append(queue_url)
2597+
queue_urls.append((queue_url, sqs_client))
25902598
queue_arn = sqs_get_queue_arn(queue_url)
25912599
policy = {
25922600
"Version": "2012-10-17",
@@ -2604,17 +2612,98 @@ def _sqs_as_events_target(queue_name: str | None = None) -> tuple[str, str]:
26042612
sqs_client.set_queue_attributes(
26052613
QueueUrl=queue_url, Attributes={"Policy": json.dumps(policy)}
26062614
)
2607-
return queue_url, queue_arn
2615+
return queue_url, queue_arn, queue_name
26082616

26092617
yield _sqs_as_events_target
26102618

2611-
for queue_url in queue_urls:
2619+
for queue_url, sqs_client in queue_urls:
26122620
try:
2613-
aws_client.sqs.delete_queue(QueueUrl=queue_url)
2621+
sqs_client.delete_queue(QueueUrl=queue_url)
26142622
except Exception as e:
26152623
LOG.debug("error cleaning up queue %s: %s", queue_url, e)
26162624

26172625

2626+
@pytest.fixture
2627+
def create_role_event_bus_source_to_bus_target(create_iam_role_with_policy):
2628+
def _create_role_event_bus_to_bus():
2629+
assume_role_policy_document_bus_source_to_bus_target = {
2630+
"Version": "2012-10-17",
2631+
"Statement": [
2632+
{
2633+
"Effect": "Allow",
2634+
"Principal": {"Service": "events.amazonaws.com"},
2635+
"Action": "sts:AssumeRole",
2636+
}
2637+
],
2638+
}
2639+
2640+
policy_document_bus_source_to_bus_target = {
2641+
"Version": "2012-10-17",
2642+
"Statement": [
2643+
{
2644+
"Sid": "",
2645+
"Effect": "Allow",
2646+
"Action": "events:PutEvents",
2647+
"Resource": "arn:aws:events:*:*:event-bus/*",
2648+
}
2649+
],
2650+
}
2651+
2652+
role_arn_bus_source_to_bus_target = create_iam_role_with_policy(
2653+
RoleDefinition=assume_role_policy_document_bus_source_to_bus_target,
2654+
PolicyDefinition=policy_document_bus_source_to_bus_target,
2655+
)
2656+
2657+
return role_arn_bus_source_to_bus_target
2658+
2659+
yield _create_role_event_bus_to_bus
2660+
2661+
2662+
@pytest.fixture
2663+
def get_primary_secondary_client(
2664+
aws_client_factory,
2665+
secondary_aws_client_factory,
2666+
region_name,
2667+
secondary_region_name,
2668+
account_id,
2669+
secondary_account_id,
2670+
):
2671+
def _get_primary_secondary_clients(cross_scenario: str):
2672+
"""
2673+
Returns primary and secondary AWS clients based on the cross-scenario.
2674+
:param cross_scenario: The scenario for cross-region or cross-account testing.
2675+
Options: "region", "account", "region_account"
2676+
account_region cross scenario is not supported by AWS
2677+
:return: A dictionary containing primary and secondary AWS clients, and their respective region and account IDs.
2678+
"""
2679+
secondary_region = secondary_region_name
2680+
secondary_account = secondary_account_id
2681+
if cross_scenario not in ["region", "account", "region_account"]:
2682+
raise ValueError(f"cross_scenario {cross_scenario} not supported")
2683+
2684+
primary_client = aws_client_factory(region_name=region_name)
2685+
2686+
if cross_scenario == "region":
2687+
secondary_account = account_id
2688+
secondary_client = aws_client_factory(region_name=secondary_region_name)
2689+
2690+
elif cross_scenario == "account":
2691+
secondary_region = region_name
2692+
secondary_client = secondary_aws_client_factory(region_name=region_name)
2693+
2694+
elif cross_scenario == "region_account":
2695+
secondary_client = secondary_aws_client_factory(region_name=secondary_region)
2696+
2697+
return {
2698+
"primary_aws_client": primary_client,
2699+
"secondary_aws_client": secondary_client,
2700+
"secondary_region_name": secondary_region,
2701+
"secondary_account_id": secondary_account,
2702+
}
2703+
2704+
return _get_primary_secondary_clients
2705+
2706+
26182707
@pytest.fixture
26192708
def clean_up(
26202709
aws_client,

tests/aws/services/events/conftest.py

Lines changed: 1 addition & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -30,42 +30,6 @@ def _create_default_or_custom_event_bus(event_bus_type: str = "default"):
3030
return _create_default_or_custom_event_bus
3131

3232

33-
@pytest.fixture
34-
def create_role_event_bus_source_to_bus_target(create_iam_role_with_policy):
35-
def _create_role_event_bus_to_bus():
36-
assume_role_policy_document_bus_source_to_bus_target = {
37-
"Version": "2012-10-17",
38-
"Statement": [
39-
{
40-
"Effect": "Allow",
41-
"Principal": {"Service": "events.amazonaws.com"},
42-
"Action": "sts:AssumeRole",
43-
}
44-
],
45-
}
46-
47-
policy_document_bus_source_to_bus_target = {
48-
"Version": "2012-10-17",
49-
"Statement": [
50-
{
51-
"Sid": "",
52-
"Effect": "Allow",
53-
"Action": "events:PutEvents",
54-
"Resource": "arn:aws:events:*:*:event-bus/*",
55-
}
56-
],
57-
}
58-
59-
role_arn_bus_source_to_bus_target = create_iam_role_with_policy(
60-
RoleDefinition=assume_role_policy_document_bus_source_to_bus_target,
61-
PolicyDefinition=policy_document_bus_source_to_bus_target,
62-
)
63-
64-
return role_arn_bus_source_to_bus_target
65-
66-
yield _create_role_event_bus_to_bus
67-
68-
6933
@pytest.fixture
7034
def events_create_archive(aws_client, region_name, account_id):
7135
archives = []
@@ -203,7 +167,7 @@ def _put_events_with_filter_to_sqs(
203167
event_bus_name = f"test-bus-{short_uid()}"
204168
events_create_event_bus(Name=event_bus_name)
205169

206-
queue_url, queue_arn = sqs_as_events_target()
170+
queue_url, queue_arn, _ = sqs_as_events_target()
207171

208172
events_put_rule(
209173
Name=rule_name,
@@ -350,47 +314,6 @@ def _add_resource_policy_logs_events_access(log_group_arn: str):
350314
aws_client.logs.delete_resource_policy(policyName=policy_name)
351315

352316

353-
@pytest.fixture
354-
def get_primary_secondary_client(
355-
aws_client_factory,
356-
secondary_aws_client_factory,
357-
region_name,
358-
secondary_region_name,
359-
account_id,
360-
secondary_account_id,
361-
):
362-
def _get_primary_secondary_clients(cross_scenario: str):
363-
secondary_region = secondary_region_name
364-
secondary_account = secondary_account_id
365-
if cross_scenario not in ["region", "account", "region_account"]:
366-
raise ValueError(f"cross_scenario {cross_scenario} not supported")
367-
368-
primary_client = aws_client_factory(region_name=region_name)
369-
370-
if cross_scenario == "region":
371-
secondary_account = account_id
372-
secondary_client = aws_client_factory(region_name=secondary_region_name)
373-
374-
elif cross_scenario == "account":
375-
secondary_region = region_name
376-
secondary_client = secondary_aws_client_factory(region_name=region_name)
377-
378-
elif cross_scenario == "region_account":
379-
secondary_client = secondary_aws_client_factory(region_name=secondary_region)
380-
381-
else:
382-
raise ValueError(f"cross_scenario {cross_scenario} not supported")
383-
384-
return {
385-
"primary_aws_client": primary_client,
386-
"secondary_aws_client": secondary_client,
387-
"secondary_region_name": secondary_region,
388-
"secondary_account_id": secondary_account,
389-
}
390-
391-
return _get_primary_secondary_clients
392-
393-
394317
@pytest.fixture
395318
def connection_name():
396319
return f"test-connection-{short_uid()}"

tests/aws/services/events/test_archive_and_replay.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ def test_start_list_describe_canceled_replay(
393393
rule_arn = response["RuleArn"]
394394

395395
# setup sqs target
396-
queue_url, queue_arn = sqs_as_events_target()
396+
queue_url, queue_arn, _ = sqs_as_events_target()
397397
target_id = f"target-{short_uid()}"
398398
aws_client.events.put_targets(
399399
Rule=rule_name,

tests/aws/services/events/test_events.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,8 @@ def test_put_events_response_entries_order(
293293
):
294294
"""Test that put_events response contains each EventId only once, even with multiple targets."""
295295

296-
queue_url_1, queue_arn_1 = sqs_as_events_target()
297-
queue_url_2, queue_arn_2 = sqs_as_events_target()
296+
queue_url_1, queue_arn_1, _ = sqs_as_events_target()
297+
queue_url_2, queue_arn_2, _ = sqs_as_events_target()
298298

299299
rule_name = f"test-rule-{short_uid()}"
300300

@@ -454,7 +454,7 @@ def test_put_events_with_time_field(
454454
):
455455
"""Test that EventBridge correctly handles datetime serialization in events."""
456456
rule_name = f"test-rule-{short_uid()}"
457-
queue_url, queue_arn = sqs_as_events_target()
457+
queue_url, queue_arn, _ = sqs_as_events_target()
458458

459459
snapshot.add_transformers_list(
460460
[
@@ -954,7 +954,7 @@ def test_put_events_bus_to_bus(
954954
)
955955

956956
# Create sqs target
957-
queue_url, queue_arn = sqs_as_events_target()
957+
queue_url, queue_arn, _ = sqs_as_events_target()
958958

959959
# Rule and target bus 2 to sqs
960960
rule_name_bus_two = f"rule-{short_uid()}"

tests/aws/services/events/test_events_inputs.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
def test_put_event_input_path_and_input_transformer(
3737
sqs_as_events_target, events_create_event_bus, events_put_rule, aws_client, snapshot
3838
):
39-
_, queue_arn = sqs_as_events_target()
39+
_, queue_arn, _ = sqs_as_events_target()
4040
bus_name = f"test-bus-{short_uid()}"
4141
events_create_event_bus(Name=bus_name)
4242

@@ -164,8 +164,8 @@ def test_put_events_with_input_path_multiple_targets(
164164
snapshot,
165165
):
166166
# prepare target queues
167-
queue_url_1, queue_arn_1 = sqs_as_events_target()
168-
queue_url_2, queue_arn_2 = sqs_as_events_target()
167+
queue_url_1, queue_arn_1, _ = sqs_as_events_target()
168+
queue_url_2, queue_arn_2, _ = sqs_as_events_target()
169169

170170
bus_name = f"test-bus-{short_uid()}"
171171
events_create_event_bus(Name=bus_name)
@@ -355,7 +355,7 @@ def test_put_events_with_input_transformer_missing_keys(
355355
aws_client_factory,
356356
snapshot,
357357
):
358-
_, queue_arn = sqs_as_events_target()
358+
_, queue_arn, _ = sqs_as_events_target()
359359

360360
bus_name = f"test-bus-{short_uid()}"
361361
events_create_event_bus(Name=bus_name)
@@ -424,7 +424,7 @@ def test_input_transformer_predefined_variables(
424424
# https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-transform-target-input.html#eb-transform-input-predefined
425425

426426
# prepare target queues
427-
queue_url, queue_arn = sqs_as_events_target()
427+
queue_url, queue_arn, _ = sqs_as_events_target()
428428

429429
bus_name = f"test-bus-{short_uid()}"
430430
events_create_event_bus(Name=bus_name)

tests/aws/services/events/test_events_patterns.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ def test_put_event_with_content_base_rule_in_pattern(
446446
snapshot,
447447
aws_client,
448448
):
449-
queue_url, queue_arn = sqs_as_events_target()
449+
queue_url, queue_arn, _ = sqs_as_events_target()
450450

451451
# Create event bus
452452
event_bus_name = f"event-bus-{short_uid()}"

tests/aws/services/events/test_events_schedule.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ def tests_schedule_rate_target_sqs(
148148
def tests_schedule_rate_custom_input_target_sqs(
149149
self, sqs_as_events_target, events_put_rule, aws_client, snapshot
150150
):
151-
queue_url, queue_arn = sqs_as_events_target()
151+
queue_url, queue_arn, _ = sqs_as_events_target()
152152

153153
bus_name = "default"
154154
rule_name = f"test-rule-{short_uid()}"
@@ -343,7 +343,7 @@ def test_schedule_cron_target_sqs(
343343
aws_client,
344344
snapshot,
345345
):
346-
queue_url, queue_arn = sqs_as_events_target()
346+
queue_url, queue_arn, _ = sqs_as_events_target()
347347

348348
schedule_cron, target_datetime = get_cron_expression(
349349
1
@@ -391,7 +391,7 @@ def test_schedule_cron_target_sqs(
391391
def tests_scheduled_rule_does_not_trigger_on_put_events(
392392
self, sqs_as_events_target, events_put_rule, aws_client
393393
):
394-
queue_url, queue_arn = sqs_as_events_target()
394+
queue_url, queue_arn, _ = sqs_as_events_target()
395395

396396
bus_name = "default"
397397
rule_name = f"test-rule-{short_uid()}"

tests/aws/services/events/test_events_targets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,7 @@ def test_put_events_with_target_events(
639639
EventPattern=json.dumps(TEST_EVENT_PATTERN),
640640
)
641641

642-
queue_url, queue_arn = sqs_as_events_target()
642+
queue_url, queue_arn, _ = sqs_as_events_target()
643643
target_id = f"target-{short_uid()}"
644644
aws_client.events.put_targets(
645645
Rule=rule_name_target_to_sqs,

0 commit comments

Comments
 (0)