Skip to content

Commit 6deff21

Browse files
committed
Add tests for GroupingLatestValueCache
Signed-off-by: Sahas Subramanian <[email protected]>
1 parent 19a9e96 commit 6deff21

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# License: MIT
2+
# Copyright © 2024 Frequenz Energy-as-a-Service GmbH
3+
4+
"""Tests for the LatestValueCache implementation."""
5+
6+
import asyncio
7+
8+
import pytest
9+
10+
from frequenz.channels import Broadcast
11+
from frequenz.channels.experimental import GroupingLatestValueCache
12+
13+
14+
@pytest.mark.integration
15+
async def test_latest_value_cache_key() -> None:
16+
"""Ensure LatestValueCache works with keys."""
17+
channel = Broadcast[tuple[int, str]](name="lvc_test")
18+
19+
cache: GroupingLatestValueCache[tuple[int, str], int] = GroupingLatestValueCache(
20+
channel.new_receiver(), key=lambda x: x[0]
21+
)
22+
sender = channel.new_sender()
23+
24+
assert not cache.has_value(5)
25+
with pytest.raises(ValueError, match="No value received for key: 0"):
26+
cache.get(0)
27+
28+
assert cache.keys() == set()
29+
30+
await sender.send((5, "a"))
31+
await sender.send((6, "b"))
32+
await sender.send((5, "c"))
33+
await asyncio.sleep(0)
34+
35+
assert cache.has_value(5)
36+
assert cache.has_value(6)
37+
assert not cache.has_value(7)
38+
39+
assert cache.get(5) == (5, "c")
40+
assert cache.get(6) == (6, "b")
41+
42+
assert cache.keys() == {5, 6}
43+
44+
with pytest.raises(ValueError, match="No value received for key: 7"):
45+
cache.get(7)
46+
47+
await sender.send((12, "d"))
48+
await asyncio.sleep(0)
49+
50+
assert cache.get(12) == (12, "d")
51+
assert cache.get(12) == (12, "d")
52+
assert cache.get(5) == (5, "c")
53+
assert cache.get(6) == (6, "b")
54+
55+
await sender.send((6, "e"))
56+
await sender.send((6, "f"))
57+
await sender.send((6, "g"))
58+
await asyncio.sleep(0)
59+
60+
assert cache.get(6) == (6, "g")
61+
62+
assert cache.keys() == {5, 6, 12}
63+
64+
cache.clear(5)
65+
assert not cache.has_value(5)
66+
assert cache.has_value(6)
67+
68+
with pytest.raises(ValueError, match="No value received for key: 5"):
69+
assert cache.get(5)
70+
assert cache.keys() == {6, 12}

0 commit comments

Comments
 (0)