Skip to content

Commit 8ea00b2

Browse files
Adds tests for extended response in the XINFO command
Signed-off-by: Elena Kolevska <elena@kolevska.com>
1 parent 194ab71 commit 8ea00b2

2 files changed

Lines changed: 104 additions & 0 deletions

File tree

tests/test_asyncio/test_commands.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3932,6 +3932,58 @@ async def test_xinfo_stream_full(self, r: redis.Redis):
39323932
consumer = info["groups"][0]["consumers"][0]
39333933
assert isinstance(consumer, dict)
39343934

3935+
@skip_if_server_version_lt("8.6.0")
3936+
async def test_xinfo_stream_idempotent_fields(self, r: redis.Redis):
3937+
stream = "stream"
3938+
3939+
# Create stream with regular entry
3940+
await r.xadd(stream, {"foo": "bar"})
3941+
info = await r.xinfo_stream(stream)
3942+
3943+
# Verify new idempotent producer fields are present with default values
3944+
assert "idmp-duration" in info
3945+
assert "idmp-maxsize" in info
3946+
assert "pids-tracked" in info
3947+
assert "iids-tracked" in info
3948+
assert "iids-added" in info
3949+
assert "iids-duplicates" in info
3950+
3951+
# Default values (before any idempotent entries)
3952+
assert info["pids-tracked"] == 0
3953+
assert info["iids-tracked"] == 0
3954+
assert info["iids-added"] == 0
3955+
assert info["iids-duplicates"] == 0
3956+
3957+
# Add idempotent entry
3958+
await r.xadd(stream, {"field1": "value1"}, idmpauto="producer1")
3959+
info = await r.xinfo_stream(stream)
3960+
3961+
# After adding idempotent entry
3962+
assert info["pids-tracked"] == 1 # One producer tracked
3963+
assert info["iids-tracked"] == 1 # One iid tracked
3964+
assert info["iids-added"] == 1 # One idempotent entry added
3965+
assert info["iids-duplicates"] == 0 # No duplicates yet
3966+
3967+
# Add duplicate entry
3968+
await r.xadd(stream, {"field1": "value1"}, idmpauto="producer1")
3969+
info = await r.xinfo_stream(stream)
3970+
3971+
# After duplicate
3972+
assert info["pids-tracked"] == 1 # Still one producer
3973+
assert info["iids-tracked"] == 1 # Still one iid (duplicate doesn't add new)
3974+
assert info["iids-added"] == 1 # Still one unique entry
3975+
assert info["iids-duplicates"] == 1 # One duplicate detected
3976+
3977+
# Add entry from different producer
3978+
await r.xadd(stream, {"field2": "value2"}, idmpauto="producer2")
3979+
info = await r.xinfo_stream(stream)
3980+
3981+
# After second producer
3982+
assert info["pids-tracked"] == 2 # Two producers tracked
3983+
assert info["iids-tracked"] == 2 # Two iids tracked
3984+
assert info["iids-added"] == 2 # Two unique entries
3985+
assert info["iids-duplicates"] == 1 # Still one duplicate
3986+
39353987
@skip_if_server_version_lt("5.0.0")
39363988
async def test_xlen(self, r: redis.Redis):
39373989
stream = "stream"

tests/test_commands.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5581,6 +5581,58 @@ def test_xinfo_stream_full(self, r):
55815581
consumer = info["groups"][0]["consumers"][0]
55825582
assert isinstance(consumer, dict)
55835583

5584+
@skip_if_server_version_lt("8.6.0")
5585+
def test_xinfo_stream_idempotent_fields(self, r):
5586+
stream = "stream"
5587+
5588+
# Create stream with regular entry
5589+
r.xadd(stream, {"foo": "bar"})
5590+
info = r.xinfo_stream(stream)
5591+
5592+
# Verify new idempotent producer fields are present with default values
5593+
assert "idmp-duration" in info
5594+
assert "idmp-maxsize" in info
5595+
assert "pids-tracked" in info
5596+
assert "iids-tracked" in info
5597+
assert "iids-added" in info
5598+
assert "iids-duplicates" in info
5599+
5600+
# Default values (before any idempotent entries)
5601+
assert info["pids-tracked"] == 0
5602+
assert info["iids-tracked"] == 0
5603+
assert info["iids-added"] == 0
5604+
assert info["iids-duplicates"] == 0
5605+
5606+
# Add idempotent entry
5607+
r.xadd(stream, {"field1": "value1"}, idmpauto="producer1")
5608+
info = r.xinfo_stream(stream)
5609+
5610+
# After adding idempotent entry
5611+
assert info["pids-tracked"] == 1 # One producer tracked
5612+
assert info["iids-tracked"] == 1 # One iid tracked
5613+
assert info["iids-added"] == 1 # One idempotent entry added
5614+
assert info["iids-duplicates"] == 0 # No duplicates yet
5615+
5616+
# Add duplicate entry
5617+
r.xadd(stream, {"field1": "value1"}, idmpauto="producer1")
5618+
info = r.xinfo_stream(stream)
5619+
5620+
# After duplicate
5621+
assert info["pids-tracked"] == 1 # Still one producer
5622+
assert info["iids-tracked"] == 1 # Still one iid (duplicate doesn't add new)
5623+
assert info["iids-added"] == 1 # Still one unique entry
5624+
assert info["iids-duplicates"] == 1 # One duplicate detected
5625+
5626+
# Add entry from different producer
5627+
r.xadd(stream, {"field2": "value2"}, idmpauto="producer2")
5628+
info = r.xinfo_stream(stream)
5629+
5630+
# After second producer
5631+
assert info["pids-tracked"] == 2 # Two producers tracked
5632+
assert info["iids-tracked"] == 2 # Two iids tracked
5633+
assert info["iids-added"] == 2 # Two unique entries
5634+
assert info["iids-duplicates"] == 1 # Still one duplicate
5635+
55845636
@skip_if_server_version_lt("5.0.0")
55855637
def test_xlen(self, r):
55865638
stream = "stream"

0 commit comments

Comments
 (0)