@@ -7124,6 +7124,106 @@ func (suite *GlideTestSuite) TestXInfoStream() {
71247124 })
71257125}
71267126
7127+ func (suite * GlideTestSuite ) TestXInfoConsumers () {
7128+ suite .runWithDefaultClients (func (client api.BaseClient ) {
7129+ key := uuid .NewString ()
7130+ group := uuid .NewString ()
7131+ consumer1 := uuid .NewString ()
7132+ consumer2 := uuid .NewString ()
7133+
7134+ xadd , err := client .XAddWithOptions (
7135+ key ,
7136+ [][]string {{"e1_f1" , "e1_v1" }, {"e1_f2" , "e1_v2" }},
7137+ * options .NewXAddOptions ().SetId ("0-1" ),
7138+ )
7139+ assert .NoError (suite .T (), err )
7140+ assert .Equal (suite .T (), "0-1" , xadd .Value ())
7141+ xadd , err = client .XAddWithOptions (
7142+ key ,
7143+ [][]string {{"e2_f1" , "e2_v1" }, {"e2_f2" , "e2_v2" }},
7144+ * options .NewXAddOptions ().SetId ("0-2" ),
7145+ )
7146+ assert .NoError (suite .T (), err )
7147+ assert .Equal (suite .T (), "0-2" , xadd .Value ())
7148+ xadd , err = client .XAddWithOptions (key , [][]string {{"e3_f1" , "e3_v1" }}, * options .NewXAddOptions ().SetId ("0-3" ))
7149+ assert .NoError (suite .T (), err )
7150+ assert .Equal (suite .T (), "0-3" , xadd .Value ())
7151+
7152+ suite .verifyOK (client .XGroupCreate (key , group , "0-0" ))
7153+
7154+ xReadGroup , err := client .XReadGroupWithOptions (
7155+ group ,
7156+ consumer1 ,
7157+ map [string ]string {key : ">" },
7158+ * options .NewXReadGroupOptions ().SetCount (1 ),
7159+ )
7160+ assert .NoError (suite .T (), err )
7161+ expectedResult := map [string ]map [string ][][]string {
7162+ key : {
7163+ "0-1" : {{"e1_f1" , "e1_v1" }, {"e1_f2" , "e1_v2" }},
7164+ },
7165+ }
7166+ assert .Equal (suite .T (), expectedResult , xReadGroup )
7167+
7168+ // Sleep to ensure the idle time value and inactive time value returned by xinfo_consumers is > 0
7169+ time .Sleep (2000 * time .Millisecond )
7170+ info , err := client .XInfoConsumers (key , group )
7171+ assert .NoError (suite .T (), err )
7172+ assert .Len (suite .T (), info , 1 )
7173+ assert .Equal (suite .T (), consumer1 , info [0 ].Name )
7174+ assert .Equal (suite .T (), int64 (1 ), info [0 ].Pending )
7175+ assert .Greater (suite .T (), info [0 ].Idle , int64 (0 ))
7176+ if suite .serverVersion > "7.2.0" {
7177+ assert .False (suite .T (), info [0 ].Inactive .IsNil ())
7178+ assert .Greater (suite .T (), info [0 ].Inactive .Value (), int64 (0 ))
7179+ } else {
7180+ assert .True (suite .T (), info [0 ].Inactive .IsNil ())
7181+ }
7182+
7183+ respBool , err := client .XGroupCreateConsumer (key , group , consumer2 )
7184+ assert .NoError (suite .T (), err )
7185+ assert .True (suite .T (), respBool )
7186+
7187+ xReadGroup , err = client .XReadGroup (group , consumer2 , map [string ]string {key : ">" })
7188+ assert .NoError (suite .T (), err )
7189+ expectedResult = map [string ]map [string ][][]string {
7190+ key : {
7191+ "0-2" : {{"e2_f1" , "e2_v1" }, {"e2_f2" , "e2_v2" }},
7192+ "0-3" : {{"e3_f1" , "e3_v1" }},
7193+ },
7194+ }
7195+ assert .Equal (suite .T (), expectedResult , xReadGroup )
7196+
7197+ // Verify that xinfo_consumers contains info for 2 consumers now
7198+ info , err = client .XInfoConsumers (key , group )
7199+ assert .NoError (suite .T (), err )
7200+ assert .Len (suite .T (), info , 2 )
7201+
7202+ // Passing a non-existing key raises an error
7203+ key = uuid .NewString ()
7204+ _ , err = client .XInfoConsumers (key , "_" )
7205+ assert .IsType (suite .T (), & errors.RequestError {}, err )
7206+
7207+ // key exists, but it is not a stream
7208+ suite .verifyOK (client .Set (key , key ))
7209+ _ , err = client .XInfoConsumers (key , "_" )
7210+ assert .IsType (suite .T (), & errors.RequestError {}, err )
7211+
7212+ // Passing a non-existing group raises an error
7213+ key = uuid .NewString ()
7214+ _ , err = client .XAdd (key , [][]string {{"a" , "b" }})
7215+ assert .NoError (suite .T (), err )
7216+ _ , err = client .XInfoConsumers (key , "_" )
7217+ assert .IsType (suite .T (), & errors.RequestError {}, err )
7218+
7219+ // no consumers yet
7220+ suite .verifyOK (client .XGroupCreate (key , group , "0-0" ))
7221+ info , err = client .XInfoConsumers (key , group )
7222+ assert .NoError (suite .T (), err )
7223+ assert .Empty (suite .T (), info )
7224+ })
7225+ }
7226+
71277227func (suite * GlideTestSuite ) TestXInfoGroups () {
71287228 suite .runWithDefaultClients (func (client api.BaseClient ) {
71297229 key := uuid .NewString ()
0 commit comments