@@ -441,3 +441,87 @@ func (s *RedisStoreSuite) TestLRemRPush() {
441441 s .NoError (err )
442442 s .Equal ([]string {`message-4` , "message-1" , "message-3" }, results )
443443}
444+
445+ func (s * RedisStoreSuite ) TestZRemRangeBelowScore () {
446+ ctx := context .Background ()
447+ prefix := fmt .Sprintf ("inhooks:%s" , s .appConf .Redis .InhooksDBName )
448+ defer func () {
449+ err := testsupport .DeleteAllRedisKeys (ctx , s .client , prefix )
450+ s .NoError (err )
451+ }()
452+
453+ now := time .Date (2023 , 05 , 5 , 8 , 9 , 24 , 0 , time .UTC )
454+
455+ queueKey := "q:scheduled"
456+ queueKeyWithPrefix := fmt .Sprintf ("%s:%s" , prefix , queueKey )
457+
458+ m1ID := "message-1"
459+ m2ID := "message-2"
460+ m3ID := "message-3"
461+ m4ID := "message-4"
462+
463+ _ , err := s .client .ZAdd (ctx , queueKeyWithPrefix , redis.Z {Score : float64 (now .Unix ()), Member : m1ID }).Result ()
464+ s .NoError (err )
465+
466+ _ , err = s .client .ZAdd (ctx , queueKeyWithPrefix , redis.Z {Score : float64 (now .Add (5 * time .Minute ).Unix ()), Member : m2ID }).Result ()
467+ s .NoError (err )
468+
469+ _ , err = s .client .ZAdd (ctx , queueKeyWithPrefix , redis.Z {Score : float64 (now .Add (- 5 * time .Minute ).Unix ()), Member : m3ID }).Result ()
470+ s .NoError (err )
471+
472+ _ , err = s .client .ZAdd (ctx , queueKeyWithPrefix , redis.Z {Score : float64 (now .Add (20 * time .Minute ).Unix ()), Member : m4ID }).Result ()
473+ s .NoError (err )
474+
475+ count , err := s .redisStore .ZRemRangeBelowScore (ctx , queueKey , int (now .Unix ()))
476+ s .NoError (err )
477+
478+ s .Equal (2 , count )
479+
480+ queueResults , err := s .client .ZRange (ctx , queueKeyWithPrefix , 0 , - 1 ).Result ()
481+ s .NoError (err )
482+
483+ s .Equal ([]string {"message-2" , "message-4" }, queueResults )
484+ }
485+
486+ func (s * RedisStoreSuite ) TestZRemDel () {
487+ ctx := context .Background ()
488+ prefix := fmt .Sprintf ("inhooks:%s" , s .appConf .Redis .InhooksDBName )
489+ defer func () {
490+ err := testsupport .DeleteAllRedisKeys (ctx , s .client , prefix )
491+ s .NoError (err )
492+ }()
493+
494+ now := time .Date (2023 , 05 , 5 , 8 , 9 , 24 , 0 , time .UTC )
495+
496+ queueKey := "q:scheduled"
497+ queueKeyWithPrefix := fmt .Sprintf ("%s:%s" , prefix , queueKey )
498+
499+ m1ID := "message-1"
500+ m2ID := "message-2"
501+ m3ID := "message-3"
502+ m4ID := "message-4"
503+
504+ messageIDs := []string {m1ID , m3ID }
505+ messageKeys := []string {fmt .Sprintf ("m:%s" , m1ID ), fmt .Sprintf ("m:%s" , m3ID )}
506+
507+ _ , err := s .client .ZAdd (ctx , queueKeyWithPrefix , redis.Z {Score : float64 (now .Unix ()), Member : m1ID }).Result ()
508+ s .NoError (err )
509+
510+ _ , err = s .client .ZAdd (ctx , queueKeyWithPrefix , redis.Z {Score : float64 (now .Add (5 * time .Minute ).Unix ()), Member : m2ID }).Result ()
511+ s .NoError (err )
512+
513+ _ , err = s .client .ZAdd (ctx , queueKeyWithPrefix , redis.Z {Score : float64 (now .Add (- 5 * time .Minute ).Unix ()), Member : m3ID }).Result ()
514+ s .NoError (err )
515+
516+ _ , err = s .client .ZAdd (ctx , queueKeyWithPrefix , redis.Z {Score : float64 (now .Add (20 * time .Minute ).Unix ()), Member : m4ID }).Result ()
517+ s .NoError (err )
518+
519+ err = s .redisStore .ZRemDel (ctx , queueKey , messageIDs , messageKeys )
520+ s .NoError (err )
521+
522+ queueResults , err := s .client .ZRange (ctx , queueKeyWithPrefix , 0 , - 1 ).Result ()
523+ s .NoError (err )
524+
525+ s .Equal ([]string {"message-2" , "message-4" }, queueResults )
526+
527+ }
0 commit comments