@@ -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"
0 commit comments