@@ -3967,173 +3967,5 @@ private static String getFullExceptionMessage(Throwable t) {
39673967 t = t .getCause ();
39683968 }
39693969 return sb .toString ();
3970- // ========== STREAM COMMANDS ==========
3971-
3972- @ Test
3973- void stream_xadd_xlen_xdel () {
3974- String key = "stream:" + UUID .randomUUID ();
3975- Map <String , String > hash = new HashMap <>();
3976- hash .put ("f1" , "v1" );
3977- hash .put ("f2" , "v2" );
3978-
3979- StreamEntryID id = jedis .xadd (key , hash );
3980- assertNotNull (id , "XADD should return entry ID" );
3981- assertTrue (id .getTime () > 0 || id .getSequence () >= 0 , "XADD should return valid ID" );
3982-
3983- long len = jedis .xlen (key );
3984- assertEquals (1 , len , "XLEN should be 1 after one XADD" );
3985-
3986- long del = jedis .xdel (key , id .toString ());
3987- assertEquals (1 , del , "XDEL should return 1" );
3988- assertEquals (0 , jedis .xlen (key ), "XLEN should be 0 after XDEL" );
3989- }
3990-
3991- @ Test
3992- void stream_xrange_xrevrange () {
3993- String key = "stream:" + UUID .randomUUID ();
3994- jedis .xadd (key , Map .of ("a" , "1" ));
3995- jedis .xadd (key , Map .of ("b" , "2" ));
3996- jedis .xadd (key , Map .of ("c" , "3" ));
3997-
3998- List <StreamEntry > range = jedis .xrange (key , "-" , "+" );
3999- assertNotNull (range );
4000- assertTrue (range .size () >= 3 , "XRANGE should return at least 3 entries" );
4001-
4002- List <StreamEntry > rev = jedis .xrevrange (key , "+" , "-" );
4003- assertNotNull (rev );
4004- assertTrue (rev .size () >= 3 , "XREVRANGE should return at least 3 entries" );
4005-
4006- List <StreamEntry > limited = jedis .xrange (key , "-" , "+" , 2L );
4007- assertNotNull (limited );
4008- assertEquals (2 , limited .size (), "XRANGE with COUNT 2 should return 2 entries" );
4009- }
4010-
4011- @ Test
4012- void stream_xread () {
4013- String key = "stream:" + UUID .randomUUID ();
4014- jedis .xadd (key , Map .of ("x" , "1" ));
4015-
4016- Map <String , String > keysAndIds = new HashMap <>();
4017- keysAndIds .put (key , "0-0" );
4018-
4019- Map <String , List <StreamEntry >> result = jedis .xread (keysAndIds );
4020- assertNotNull (result );
4021- assertTrue (result .containsKey (key ));
4022- assertFalse (result .get (key ).isEmpty (), "XREAD should return entries from start" );
4023- }
4024-
4025- @ Test
4026- void stream_xtrim () {
4027- String key = "stream:" + UUID .randomUUID ();
4028- for (int i = 0 ; i < 10 ; i ++) {
4029- jedis .xadd (key , Map .of ("i" , String .valueOf (i )));
4030- }
4031- long lenBefore = jedis .xlen (key );
4032- assertTrue (lenBefore >= 10 , "Stream should have at least 10 entries" );
4033-
4034- long trimmed = jedis .xtrim (key , 5L );
4035- assertTrue (trimmed >= 0 , "XTRIM should return non-negative count" );
4036- long lenAfter = jedis .xlen (key );
4037- assertTrue (lenAfter <= 5 , "Stream length after XTRIM MAXLEN 5 should be <= 5" );
4038- }
4039-
4040- @ Test
4041- void stream_xgroup_create_destroy () {
4042- String key = "stream:" + UUID .randomUUID ();
4043- jedis .xadd (key , Map .of ("init" , "1" ));
4044-
4045- String group = "g1" ;
4046- String createResult = jedis .xgroupCreate (key , group , "0" , true );
4047- assertNotNull (createResult , "XGROUP CREATE should succeed" );
4048-
4049- boolean destroyed = jedis .xgroupDestroy (key , group );
4050- assertTrue (destroyed , "XGROUP DESTROY should return true" );
4051- }
4052-
4053- @ Test
4054- void stream_xgroup_setid_createconsumer_delconsumer () {
4055- String key = "stream:" + UUID .randomUUID ();
4056- jedis .xadd (key , Map .of ("a" , "1" ));
4057- String group = "g2" ;
4058- jedis .xgroupCreate (key , group , "0" , true );
4059-
4060- String setidResult = jedis .xgroupSetId (key , group , "0" );
4061- assertNotNull (setidResult );
4062-
4063- boolean created = jedis .xgroupCreateConsumer (key , group , "c1" );
4064- assertTrue (created , "XGROUP CREATECONSUMER should succeed" );
4065-
4066- long del = jedis .xgroupDelConsumer (key , group , "c1" );
4067- assertTrue (del >= 0 , "XGROUP DELCONSUMER should return non-negative" );
4068- }
4069-
4070- @ Test
4071- void stream_xreadgroup_xack () {
4072- String key = "stream:" + UUID .randomUUID ();
4073- jedis .xadd (key , Map .of ("m1" , "v1" ));
4074- jedis .xadd (key , Map .of ("m2" , "v2" ));
4075- String group = "g3" ;
4076- jedis .xgroupCreate (key , group , "0" , true );
4077-
4078- Map <String , String > keysAndIds = new HashMap <>();
4079- keysAndIds .put (key , ">" );
4080-
4081- Map <String , List <StreamEntry >> read = jedis .xreadgroup (group , "consumer1" , keysAndIds );
4082- assertNotNull (read );
4083- assertTrue (read .containsKey (key ));
4084- List <StreamEntry > entries = read .get (key );
4085- assertNotNull (entries );
4086- assertFalse (entries .isEmpty (), "XREADGROUP should return entries" );
4087-
4088- String [] ids = entries .stream ().map (e -> e .getID ().toString ()).toArray (String []::new );
4089- long ack = jedis .xack (key , group , ids );
4090- assertEquals (entries .size (), ack , "XACK should acknowledge all read entries" );
4091- }
4092-
4093- @ Test
4094- void stream_xpending () {
4095- String key = "stream:" + UUID .randomUUID ();
4096- jedis .xadd (key , Map .of ("p" , "1" ));
4097- String group = "g4" ;
4098- jedis .xgroupCreate (key , group , "0" , true );
4099-
4100- StreamPendingSummary summary = jedis .xpending (key , group );
4101- assertNotNull (summary );
4102- assertTrue (summary .getTotal () >= 0 , "XPENDING summary total should be non-negative" );
4103-
4104- List <StreamPendingEntry > pending = jedis .xpending (key , group , "-" , "+" , 10L );
4105- assertNotNull (pending );
4106- }
4107-
4108- @ Test
4109- void stream_xinfo_stream_and_groups () {
4110- String key = "stream:" + UUID .randomUUID ();
4111- jedis .xadd (key , Map .of ("i" , "1" ));
4112- jedis .xgroupCreate (key , "ginfo" , "0" , true );
4113-
4114- Map <String , Object > raw = jedis .xinfoStream (key );
4115- assertNotNull (raw );
4116- assertTrue (raw .containsKey ("length" ) || raw .containsKey ("last-generated-id" ));
4117-
4118- StreamInfo info = jedis .xinfoStreamAsInfo (key );
4119- assertNotNull (info );
4120- assertTrue (info .getLength () >= 1 , "Stream should have at least 1 entry" );
4121-
4122- List <StreamGroupInfo > groups = jedis .xinfoGroups (key );
4123- assertNotNull (groups );
4124- assertFalse (groups .isEmpty (), "XINFO GROUPS should return at least one group" );
4125- }
4126-
4127- @ Test
4128- void stream_xinfo_consumers () {
4129- String key = "stream:" + UUID .randomUUID ();
4130- jedis .xadd (key , Map .of ("c" , "1" ));
4131- String group = "gcons" ;
4132- jedis .xgroupCreate (key , group , "0" , true );
4133- jedis .xgroupCreateConsumer (key , group , "consumer1" );
4134-
4135- List <StreamConsumerInfo > consumers = jedis .xinfoConsumers (key , group );
4136- assertNotNull (consumers );
4137- assertFalse (consumers .isEmpty (), "XINFO CONSUMERS should return at least one consumer" );
41383970 }
41393971}
0 commit comments