Skip to content

Commit a8bc767

Browse files
authored
Fixed edev list subscriptions before site registration (#119)
1 parent 7193336 commit a8bc767

File tree

2 files changed

+49
-21
lines changed

2 files changed

+49
-21
lines changed

src/cactus_runner/app/check.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1063,13 +1063,12 @@ async def check_all_notifications_transmitted(session: AsyncSession) -> CheckRes
10631063
return CheckResult(True, f"All {len(all_logs)} notifications yielded HTTP success codes")
10641064

10651065

1066-
async def check_subscription_contents(resolved_parameters: dict[str, Any], session: AsyncSession) -> CheckResult:
1066+
async def check_subscription_contents(
1067+
resolved_parameters: dict[str, Any], session: AsyncSession, active_test_procedure: ActiveTestProcedure
1068+
) -> CheckResult:
10671069
"""Implements the subscription-contents check"""
10681070

10691071
subscribed_resource: str = resolved_parameters["subscribed_resource"] # mandatory param
1070-
active_site = await get_active_site(session)
1071-
if active_site is None:
1072-
return CheckResult(False, "No EndDevice is currently registered")
10731072

10741073
# Decode the href so we know what to look for in the DB
10751074
try:
@@ -1081,7 +1080,7 @@ async def check_subscription_contents(resolved_parameters: dict[str, Any], sessi
10811080
matching_sub = (
10821081
await session.execute(
10831082
select(Subscription).where(
1084-
(Subscription.aggregator_id == active_site.aggregator_id)
1083+
(Subscription.aggregator_id == active_test_procedure.client_aggregator_id)
10851084
& (Subscription.scoped_site_id == scoped_site_id)
10861085
& (Subscription.resource_type == resource_type)
10871086
& (Subscription.resource_id == resource_id)
@@ -1272,7 +1271,7 @@ async def run_check(check: Check, active_test_procedure: ActiveTestProcedure, se
12721271
check_result = await check_all_notifications_transmitted(session)
12731272

12741273
case "subscription-contents":
1275-
check_result = await check_subscription_contents(resolved_parameters, session)
1274+
check_result = await check_subscription_contents(resolved_parameters, session, active_test_procedure)
12761275

12771276
case "response-contents":
12781277
check_result = await check_response_contents(resolved_parameters, session, active_test_procedure)

tests/unit/app/test_check.py

Lines changed: 44 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2091,30 +2091,51 @@ async def test_check_all_notifications_transmitted_success_logs(pg_base_config):
20912091

20922092

20932093
@pytest.mark.anyio
2094-
async def test_check_subscription_contents_no_site(pg_base_config):
2095-
"""check_subscription_contents should fail if there is no active site"""
2094+
async def test_check_subscription_contents_no_site_edev_list(pg_base_config):
2095+
"""check_subscription_contents should match subscriptions to /edev even if there is NO site registered"""
20962096

2097-
resolved_params = {"subscribed_resource": "/edev/1/derp/2/derc"}
2097+
agg_id = 1
2098+
resolved_params = {"subscribed_resource": "/edev"}
2099+
active_test_procedure = generate_class_instance(
2100+
ActiveTestProcedure, step_status={}, finished_zip_data=None, client_aggregator_id=agg_id
2101+
)
20982102

20992103
async with generate_async_session(pg_base_config) as session:
2100-
actual = await check_subscription_contents(resolved_params, session)
2101-
assert_check_result(actual, False)
2104+
agg = (await session.execute(select(Aggregator).where(Aggregator.aggregator_id == agg_id))).scalar_one()
2105+
session.add(
2106+
generate_class_instance(
2107+
Subscription,
2108+
resource_type=SubscriptionResource.SITE,
2109+
resource_id=None,
2110+
scoped_site_id=None,
2111+
aggregator=agg,
2112+
)
2113+
)
2114+
await session.commit()
2115+
2116+
async with generate_async_session(pg_base_config) as session:
2117+
actual = await check_subscription_contents(resolved_params, session, active_test_procedure)
2118+
assert_check_result(actual, True)
21022119

21032120

21042121
@pytest.mark.anyio
21052122
async def test_check_subscription_contents_no_matches(pg_base_config):
21062123
"""check_subscription_contents should fail if there is no matching subscription"""
21072124

2125+
agg_id = 1
21082126
resolved_params = {"subscribed_resource": "/edev/1/derp/2/derc"}
2127+
active_test_procedure = generate_class_instance(
2128+
ActiveTestProcedure, step_status={}, finished_zip_data=None, client_aggregator_id=agg_id
2129+
)
21092130

21102131
# Fill up the DB with subscriptions
21112132
async with generate_async_session(pg_base_config) as session:
2112-
agg1 = (await session.execute(select(Aggregator).where(Aggregator.aggregator_id == 1))).scalar_one()
2133+
agg1 = (await session.execute(select(Aggregator).where(Aggregator.aggregator_id == agg_id))).scalar_one()
21132134
agg2 = Aggregator(aggregator_id=2, name="test2", changed_time=datetime(2022, 11, 22, tzinfo=timezone.utc))
21142135
session.add(agg2)
21152136

2116-
site1 = generate_class_instance(Site, seed=1001, site_id=1, aggregator_id=1) # Active Site
2117-
site2 = generate_class_instance(Site, seed=202, site_id=2, aggregator_id=1)
2137+
site1 = generate_class_instance(Site, seed=1001, site_id=1, aggregator_id=agg_id) # Active Site
2138+
site2 = generate_class_instance(Site, seed=202, site_id=2, aggregator_id=agg_id)
21182139
session.add(site1)
21192140
session.add(site2)
21202141
await session.flush()
@@ -2170,24 +2191,28 @@ async def test_check_subscription_contents_no_matches(pg_base_config):
21702191
await session.commit()
21712192

21722193
async with generate_async_session(pg_base_config) as session:
2173-
actual = await check_subscription_contents(resolved_params, session)
2194+
actual = await check_subscription_contents(resolved_params, session, active_test_procedure)
21742195
assert_check_result(actual, False)
21752196

21762197

21772198
@pytest.mark.anyio
21782199
async def test_check_subscription_contents_success(pg_base_config):
21792200
"""check_subscription_contents should succeed if there is at least 1 matching subscription"""
21802201

2202+
agg_id = 1
21812203
resolved_params = {"subscribed_resource": "/edev/1/derp/2/derc"}
2204+
active_test_procedure = generate_class_instance(
2205+
ActiveTestProcedure, step_status={}, finished_zip_data=None, client_aggregator_id=agg_id
2206+
)
21822207

21832208
# Fill up the DB with subscriptions
21842209
async with generate_async_session(pg_base_config) as session:
2185-
agg1 = (await session.execute(select(Aggregator).where(Aggregator.aggregator_id == 1))).scalar_one()
2210+
agg1 = (await session.execute(select(Aggregator).where(Aggregator.aggregator_id == agg_id))).scalar_one()
21862211
agg2 = Aggregator(aggregator_id=2, name="test2", changed_time=datetime(2022, 11, 22, tzinfo=timezone.utc))
21872212
session.add(agg2)
21882213

2189-
site1 = generate_class_instance(Site, seed=1001, site_id=1, aggregator_id=1) # Active Site
2190-
site2 = generate_class_instance(Site, seed=202, site_id=2, aggregator_id=1)
2214+
site1 = generate_class_instance(Site, seed=1001, site_id=1, aggregator_id=agg_id) # Active Site
2215+
site2 = generate_class_instance(Site, seed=202, site_id=2, aggregator_id=agg_id)
21912216
session.add(site1)
21922217
session.add(site2)
21932218
await session.flush()
@@ -2255,23 +2280,27 @@ async def test_check_subscription_contents_success(pg_base_config):
22552280
await session.commit()
22562281

22572282
async with generate_async_session(pg_base_config) as session:
2258-
actual = await check_subscription_contents(resolved_params, session)
2283+
actual = await check_subscription_contents(resolved_params, session, active_test_procedure)
22592284
assert_check_result(actual, True)
22602285

22612286

22622287
@pytest.mark.anyio
22632288
async def test_check_subscription_contents_success_unscoped(pg_base_config):
22642289
"""check_subscription_contents should succeed if there is an unscoped subscription - eg to /edev"""
22652290

2291+
agg_id = 1
22662292
resolved_params = {"subscribed_resource": "/edev"}
2293+
active_test_procedure = generate_class_instance(
2294+
ActiveTestProcedure, step_status={}, finished_zip_data=None, client_aggregator_id=agg_id
2295+
)
22672296

22682297
# Fill up the DB with subscriptions
22692298
async with generate_async_session(pg_base_config) as session:
22702299
agg1 = (await session.execute(select(Aggregator).where(Aggregator.aggregator_id == 1))).scalar_one()
22712300
agg2 = Aggregator(aggregator_id=2, name="test2", changed_time=datetime(2022, 11, 22, tzinfo=timezone.utc))
22722301
session.add(agg2)
22732302

2274-
site1 = generate_class_instance(Site, seed=1001, site_id=1, aggregator_id=1) # Active Site
2303+
site1 = generate_class_instance(Site, seed=1001, site_id=1, aggregator_id=agg_id) # Active Site
22752304
session.add(site1)
22762305
await session.flush()
22772306

@@ -2290,7 +2319,7 @@ async def test_check_subscription_contents_success_unscoped(pg_base_config):
22902319
await session.commit()
22912320

22922321
async with generate_async_session(pg_base_config) as session:
2293-
actual = await check_subscription_contents(resolved_params, session)
2322+
actual = await check_subscription_contents(resolved_params, session, active_test_procedure)
22942323
assert_check_result(actual, True)
22952324

22962325

0 commit comments

Comments
 (0)