Skip to content

Commit c256280

Browse files
committed
Test that proposals and empty buckets get dropped on None proposals
Signed-off-by: Sahas Subramanian <[email protected]>
1 parent 7929c71 commit c256280

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

tests/actor/_power_managing/test_matryoshka.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,3 +483,60 @@ async def test_matryoshka_drop_old_proposals() -> None:
483483
must_send=True,
484484
batteries=overlapping_batteries,
485485
)
486+
487+
488+
async def test_matryoshka_none_proposals() -> None:
489+
"""Tests for the power managing actor.
490+
491+
When a `None` proposal is received, is source id should be dropped from the bucket.
492+
Then if the bucket becomes empty, it should be dropped as well.
493+
"""
494+
batteries = frozenset({2, 5})
495+
overlapping_batteries = frozenset({5, 8})
496+
497+
system_bounds = _base_types.SystemBounds(
498+
timestamp=datetime.now(tz=timezone.utc),
499+
inclusion_bounds=timeseries.Bounds(
500+
lower=Power.from_watts(-200.0), upper=Power.from_watts(200.0)
501+
),
502+
exclusion_bounds=timeseries.Bounds(lower=Power.zero(), upper=Power.zero()),
503+
)
504+
505+
def ensure_overlapping_bucket_request_fails() -> None:
506+
with pytest.raises(
507+
NotImplementedError,
508+
match=re.escape(
509+
"PowerManagingActor: component IDs frozenset({8, 5}) are already "
510+
+ "part of another bucket. Overlapping buckets are not yet supported."
511+
),
512+
):
513+
tester.tgt_power(
514+
priority=1,
515+
power=None,
516+
bounds=(20.0, 50.0),
517+
expected=None,
518+
must_send=True,
519+
batteries=overlapping_batteries,
520+
)
521+
522+
tester = StatefulTester(batteries, system_bounds)
523+
524+
tester.tgt_power(priority=3, power=22.0, bounds=(22.0, 30.0), expected=22.0)
525+
tester.tgt_power(priority=2, power=25.0, bounds=(25.0, 50.0), expected=25.0)
526+
tester.tgt_power(priority=1, power=20.0, bounds=(20.0, 50.0), expected=None)
527+
528+
ensure_overlapping_bucket_request_fails()
529+
tester.tgt_power(priority=1, power=None, bounds=(None, None), expected=None)
530+
ensure_overlapping_bucket_request_fails()
531+
tester.tgt_power(priority=3, power=None, bounds=(None, None), expected=None)
532+
ensure_overlapping_bucket_request_fails()
533+
tester.tgt_power(priority=2, power=None, bounds=(None, None), expected=None)
534+
535+
# Overlapping battery bucket is dropped.
536+
tester.tgt_power(
537+
priority=1,
538+
power=20.0,
539+
bounds=(20.0, 50.0),
540+
expected=20.0,
541+
batteries=overlapping_batteries,
542+
)

0 commit comments

Comments
 (0)