rm -f commandfilter.so basics.so testrdb.so fork.so infotest.so propagate.so misc.so hooks.so blockonkeys.so blockonbackground.so scan.so datatype.so auth.so keyspace_events.so blockedclient.so getkeys.so test_lazyfree.so timer.so defragtest.so hash.so zset.so stream.so commandfilter.xo basics.xo testrdb.xo fork.xo infotest.xo propagate.xo misc.xo hooks.xo blockonkeys.xo blockonbackground.xo scan.xo datatype.xo auth.xo keyspace_events.xo blockedclient.xo getkeys.xo test_lazyfree.xo timer.xo defragtest.xo hash.xo zset.xo stream.xo sha1.c:144:13: warning: 'SHA1Transform' reading 64 bytes from a region of size 0 [-Wstringop-overread] sha1.c:144:13: warning: 'SHA1Transform' reading 64 bytes from a region of size 0 [-Wstringop-overread] [ok]: DUMP / RESTORE are able to serialize / unserialize a simple key [ok]: AUTH fails if there is no password configured server side [ok]: RESTORE can set an arbitrary expire to the materialized key [ok]: RESTORE can set an expire that overflows a 32 bit integer [ok]: RESTORE can set an absolute expire [ok]: DEL against a single item [ok]: RESTORE with ABSTTL in the past [ok]: RESTORE can set LRU [ok]: SET and GET an item [ok]: Vararg DEL [ok]: SET and GET an empty item [ok]: RESTORE can set LFU [ok]: KEYS with pattern [ok]: KEYS to get all keys [ok]: RESTORE returns an error of the key already exists [ok]: RESTORE returns an error of the key already exists [ok]: DBSIZE [ok]: DEL all keys [ok]: RESTORE can overwrite an existing key with REPLACE [ok]: INCR against non existing key [ok]: RESTORE can detect a syntax error for unrecongized options [ok]: RESTORE can detect a syntax error for unrecongized options [ok]: INCR against key created by incr itself [ok]: DUMP of non existing key returns nil [ok]: INCR against key originally set with SET [ok]: INCR over 32bit value [ok]: INCRBY over 32bit value with over 32bit increment [ok]: INCR fails against key with spaces (left) [ok]: INCR fails against key with spaces (right) [ok]: INCR fails against key with spaces (both) [ok]: INCR fails against a key holding a list [ok]: DECRBY over 32bit value with over 32bit increment, negative res [ok]: INCR uses shared objects in the 0-9999 range [ok]: INCR can modify objects in-place [ok]: INCRBYFLOAT against non existing key [ok]: INCRBYFLOAT against key originally set with SET [ok]: INCRBYFLOAT over 32bit value [ok]: INCRBYFLOAT over 32bit value with over 32bit increment [ok]: INCRBYFLOAT fails against key with spaces (left) [ok]: INCRBYFLOAT fails against key with spaces (right) [ok]: INCRBYFLOAT fails against key with spaces (both) [ok]: INCRBYFLOAT fails against a key holding a list [ok]: INCRBYFLOAT does not allow NaN or Infinity [ok]: INCRBYFLOAT decrement [ok]: string to double with null terminator [ok]: No negative zero [ok]: SCAN basic [ok]: SCAN COUNT [ok]: SCAN MATCH [ok]: Very big payload in GET/SET [ok]: SCAN TYPE [ok]: SSCAN with encoding intset [ok]: SSCAN with encoding hashtable [ok]: HSCAN with encoding ziplist [1/66 done]: unit/printver () [ok]: HSCAN with encoding hashtable [ok]: ZSCAN with encoding ziplist [ok]: Handle an empty query [ok]: Negative multibulk length [ok]: Out of range multibulk length [ok]: Wrong multibulk payload header [ok]: Negative multibulk payload length [ok]: Out of range multibulk payload length [ok]: Non-number multibulk payload length [ok]: Multi bulk request not followed by bulk arguments [ok]: Generic wrong number of args [ok]: Unbalanced number of quotes [ok]: LPOS basic usage [ok]: LPOS RANK (positive and negative rank) option [2/66 done]: unit/type/incr () [ok]: LPOS COUNT option [ok]: LPOS COUNT + RANK option [ok]: LPOS non existing key [ok]: LPOS no match [ok]: LPOS MAXLEN [ok]: LPOS when RANK is greater than matches [ok]: LPUSH, RPUSH, LLENGTH, LINDEX, LPOP - ziplist [ok]: LPUSH, RPUSH, LLENGTH, LINDEX, LPOP - regular list [ok]: R/LPOP against empty list [ok]: R/LPOP with the optional count argument [ok]: LPOP/RPOP with the count 0 returns an empty array in RESP3 [ok]: LPOP/RPOP against non existing key in RESP3 [ok]: LPOP/RPOP with against non existing key in RESP3 [ok]: LPOP/RPOP with the count 0 returns an empty array in RESP2 [ok]: LPOP/RPOP against non existing key in RESP2 [ok]: LPOP/RPOP with against non existing key in RESP2 [ok]: Variadic RPUSH/LPUSH [ok]: DEL a list [ok]: BLPOP, BRPOP: single existing list - linkedlist [ok]: BLPOP, BRPOP: multiple existing lists - linkedlist [ok]: BLPOP, BRPOP: second list has an entry - linkedlist [ok]: BRPOPLPUSH - linkedlist [ok]: BLMOVE left left - linkedlist [ok]: ZSCAN with encoding skiplist [ok]: BLMOVE left right - linkedlist [ok]: BLMOVE right left - linkedlist [ok]: BLMOVE right right - linkedlist [ok]: BLPOP, BRPOP: single existing list - ziplist [ok]: BLPOP, BRPOP: multiple existing lists - ziplist [ok]: BLPOP, BRPOP: second list has an entry - ziplist [ok]: BRPOPLPUSH - ziplist [ok]: BLMOVE left left - ziplist [ok]: BLMOVE left right - ziplist [ok]: BLMOVE right left - ziplist [ok]: BLMOVE right right - ziplist [ok]: BLPOP, LPUSH + DEL should not awake blocked client [ok]: SCAN guarantees check under write load [ok]: Protocol desync regression test #1 [ok]: SSCAN with integer encoded object (issue #1345) [ok]: SSCAN with PATTERN [ok]: HSCAN with PATTERN [ok]: ZSCAN with PATTERN [ok]: Protocol desync regression test #2 [ok]: ZSCAN scores: regression test for issue #2175 [ok]: Protocol desync regression test #3 [ok]: raw protocol response [ok]: raw protocol response - deferred [ok]: raw protocol response - deferred [ok]: raw protocol response - multiline [ok]: RESP3 attributes [ok]: RESP3 attributes readraw [ok]: RESP3 attributes on RESP2 [ok]: test big number parsing [ok]: test bool parsing [ok]: BLPOP, LPUSH + DEL + SET should not awake blocked client [ok]: BLPOP with same key multiple times should work (issue #801) [ok]: MULTI/EXEC is isolated from the point of view of BLPOP [ok]: BLPOP with variadic LPUSH [ok]: BRPOPLPUSH with zero timeout should block indefinitely [ok]: BLMOVE left left with zero timeout should block indefinitely [ok]: BLMOVE left right with zero timeout should block indefinitely [ok]: BLMOVE right left with zero timeout should block indefinitely [ok]: BLMOVE right right with zero timeout should block indefinitely [ok]: BLMOVE (left, left) with a client BLPOPing the target list [ok]: BLMOVE (left, right) with a client BLPOPing the target list [ok]: BLMOVE (right, left) with a client BLPOPing the target list [ok]: BLMOVE (right, right) with a client BLPOPing the target list [ok]: BRPOPLPUSH with wrong source type [ok]: BRPOPLPUSH with wrong destination type [ok]: BRPOPLPUSH maintains order of elements after failure [ok]: BRPOPLPUSH with multiple blocked clients [ok]: Linked LMOVEs [ok]: Circular BRPOPLPUSH [ok]: Self-referential BRPOPLPUSH [ok]: BRPOPLPUSH inside a transaction [ok]: PUSH resulting from BRPOPLPUSH affect WATCH [ok]: BRPOPLPUSH does not affect WATCH while still blocked [ok]: Very big payload random access [ok]: DEL against expired key [ok]: EXISTS [ok]: Zero length value in key. SET/GET/EXISTS [ok]: Commands pipelining [ok]: Non existing command [ok]: RENAME basic usage [ok]: RENAME source key should no longer exist [ok]: RENAME against already existing key [ok]: RENAMENX basic usage [ok]: RENAMENX against already existing key [ok]: RENAMENX against already existing key (2) [ok]: RENAME against non existing source key [ok]: RENAME where source and dest key are the same (existing) [ok]: RENAMENX where source and dest key are the same (existing) [ok]: RENAME where source and dest key are the same (non existing) [ok]: RENAME with volatile key, should move the TTL as well [ok]: RENAME with volatile key, should not inherit TTL of target key [ok]: DEL all keys again (DB 0) [ok]: DEL all keys again (DB 1) [ok]: COPY basic usage for string [ok]: COPY for string does not replace an existing key without REPLACE option [ok]: COPY for string can replace an existing key with REPLACE option [ok]: COPY for string ensures that copied data is independent of copying data [ok]: COPY for string does not copy data to no-integer DB [ok]: COPY can copy key expire metadata as well [ok]: COPY does not create an expire if it does not exist [ok]: COPY basic usage for list [ok]: COPY basic usage for intset set [ok]: COPY basic usage for hashtable set [ok]: COPY basic usage for ziplist sorted set [ok]: COPY basic usage for skiplist sorted set [ok]: COPY basic usage for ziplist hash [ok]: COPY basic usage for hashtable hash [ok]: COPY basic usage for stream [ok]: COPY basic usage for stream-cgroups [ok]: MOVE basic usage [ok]: MOVE against key existing in the target DB [ok]: MOVE against non-integer DB (#1428) [ok]: MOVE can move key expire metadata as well [ok]: MOVE does not create an expire if it does not exist [ok]: SET/GET keys in different DBs [ok]: RANDOMKEY [ok]: RANDOMKEY against empty DB [ok]: RANDOMKEY regression 1 [ok]: KEYS * two times with long key, Github issue #1208 [ok]: Regression for pattern matching long nested loops [ok]: Explicit regression for a list bug [ok]: Regression for quicklist #3343 bug [ok]: SET 10000 numeric keys and access all them in reverse order [ok]: DBSIZE should be 10000 now [ok]: SETNX target key missing [ok]: SETNX target key exists [ok]: SETNX against not-expired volatile key [ok]: SADD, SCARD, SISMEMBER, SMISMEMBER, SMEMBERS basics - regular set [ok]: XADD can add entries into a stream that XRANGE can fetch [ok]: XADD IDs are incremental [ok]: SADD, SCARD, SISMEMBER, SMISMEMBER, SMEMBERS basics - intset [ok]: SMISMEMBER against non set [ok]: XADD IDs are incremental when ms is the same as well [ok]: SMISMEMBER non existing key [ok]: XADD IDs correctly report an error when overflowing [ok]: XADD IDs correctly report an error when overflowing [ok]: SMISMEMBER requires one or more members [ok]: SADD against non set [ok]: SADD a non-integer against an intset [ok]: HSET/HLEN - Small hash creation [ok]: Check encoding - ziplist [ok]: Is the small hash encoded with a ziplist? [ok]: SADD an integer larger than 64 bits [ok]: ZSET basic ZADD and score update - ziplist [ok]: ZSET element can't be set to NaN with ZADD - ziplist [ok]: ZSET element can't be set to NaN with ZINCRBY - ziplist [ok]: ZADD with options syntax error with incomplete pair - ziplist [ok]: ZADD with options syntax error with incomplete pair - ziplist [ok]: ZADD XX option without key - ziplist [ok]: ZADD XX existing key - ziplist [ok]: ZADD XX returns the number of elements actually added - ziplist [ok]: ZADD XX updates existing elements score - ziplist [ok]: ZADD GT updates existing elements when new scores are greater - ziplist [ok]: ZADD LT updates existing elements when new scores are lower - ziplist [ok]: ZADD GT XX updates existing elements when new scores are greater and skips new elements - ziplist [ok]: ZADD LT XX updates existing elements when new scores are lower and skips new elements - ziplist [ok]: ZADD XX and NX are not compatible - ziplist [ok]: ZADD NX with non existing key - ziplist [ok]: ZADD NX only add new elements without updating old ones - ziplist [ok]: ZADD GT and NX are not compatible - ziplist [ok]: ZADD LT and NX are not compatible - ziplist [ok]: ZADD LT and GT are not compatible - ziplist [ok]: ZADD INCR LT/GT replies with nill if score not updated - ziplist [ok]: ZADD INCR LT/GT with inf - ziplist [ok]: ZADD INCR works like ZINCRBY - ziplist [ok]: BRPOPLPUSH timeout [ok]: ZADD INCR works with a single score-elemenet pair - ziplist [ok]: BLPOP when new key is moved into place [ok]: ZADD CH option changes return value to all changed elements - ziplist [ok]: ZINCRBY calls leading to NaN result in error - ziplist [ok]: ZINCRBY calls leading to NaN result in error - ziplist [ok]: BLPOP when result key is created by SORT..STORE [ok]: ZADD - Variadic version base case - $encoding [ok]: BLPOP: with single empty list argument [ok]: ZADD - Return value is the number of actually added items - $encoding [ok]: ZADD - Variadic version does not add nothing on single parsing err - $encoding [ok]: ZADD - Variadic version does not add nothing on single parsing err - $encoding [ok]: BLPOP: with negative timeout [ok]: ZADD - Variadic version will raise error on missing arg - $encoding [ok]: ZADD - Variadic version will raise error on missing arg - $encoding [ok]: ZINCRBY does not work variadic even if shares ZADD implementation - $encoding [ok]: BLPOP: with non-integer timeout [ok]: ZCARD basics - ziplist [ok]: ZREM removes key after last element is removed - ziplist [ok]: ZREM variadic version - ziplist [ok]: HRANDFIELD - ziplist [ok]: ZREM variadic version -- remove elements after key deletion - ziplist [ok]: ZRANGE basics - ziplist [ok]: ZREVRANGE basics - ziplist [ok]: ZRANK/ZREVRANK basics - ziplist [ok]: ZRANK - after deletion - ziplist [ok]: ZINCRBY - can create a new sorted set - ziplist [ok]: ZINCRBY - increment and decrement - ziplist [ok]: HRANDFIELD - hashtable [ok]: ZINCRBY return value - ziplist [ok]: HRANDFIELD with RESP3 [ok]: HRANDFIELD count of 0 is handled correctly [ok]: HRANDFIELD count overflow [ok]: HRANDFIELD with against non existing key [ok]: HRANDFIELD count of 0 is handled correctly - emptyarray [ok]: HRANDFIELD with against non existing key - emptyarray [ok]: ZRANGEBYSCORE/ZREVRANGEBYSCORE/ZCOUNT basics - ziplist [ok]: ZRANGEBYSCORE with WITHSCORES - ziplist [ok]: ZRANGEBYSCORE with LIMIT - ziplist [ok]: ZRANGEBYSCORE with LIMIT and WITHSCORES - ziplist [ok]: ZRANGEBYSCORE with non-value min or max - ziplist [ok]: SADD overflows the maximum allowed integers in an intset [ok]: Variadic SADD [ok]: ZRANGEBYLEX/ZREVRANGEBYLEX/ZLEXCOUNT basics - ziplist [ok]: ZLEXCOUNT advanced - ziplist [ok]: ZRANGEBYSLEX with LIMIT - ziplist [ok]: ZRANGEBYLEX with invalid lex range specifiers - ziplist [ok]: ZREMRANGEBYSCORE basics - ziplist [ok]: ZREMRANGEBYSCORE with non-value min or max - ziplist [ok]: ZREMRANGEBYRANK basics - ziplist [ok]: ZUNIONSTORE against non-existing key doesn't set destination - ziplist [ok]: ZUNION/ZINTER/ZDIFF against non-existing key - ziplist [ok]: ZUNIONSTORE with empty set - ziplist [ok]: ZUNION/ZINTER/ZDIFF with empty set - ziplist [ok]: ZUNIONSTORE basics - ziplist [ok]: ZUNION/ZINTER/ZDIFF with integer members - ziplist [ok]: ZUNIONSTORE with weights - ziplist [ok]: ZUNION with weights - ziplist [ok]: ZUNIONSTORE with a regular set and weights - ziplist [ok]: ZUNIONSTORE with AGGREGATE MIN - ziplist [ok]: ZUNION/ZINTER with AGGREGATE MIN - ziplist [ok]: ZUNIONSTORE with AGGREGATE MAX - ziplist [ok]: ZUNION/ZINTER with AGGREGATE MAX - ziplist [ok]: ZINTERSTORE basics - ziplist [ok]: ZINTER basics - ziplist [ok]: ZINTER RESP3 - ziplist [ok]: ZINTERSTORE with weights - ziplist [ok]: ZINTER with weights - ziplist [ok]: ZINTERSTORE with a regular set and weights - ziplist [ok]: ZINTERSTORE with AGGREGATE MIN - ziplist [ok]: ZINTERSTORE with AGGREGATE MAX - ziplist [ok]: ZUNIONSTORE with +inf/-inf scores - ziplist [ok]: ZUNIONSTORE with NaN weights - ziplist [ok]: ZINTERSTORE with +inf/-inf scores - ziplist [ok]: ZINTERSTORE with NaN weights - ziplist [ok]: ZDIFFSTORE basics - ziplist [ok]: ZDIFF basics - ziplist [ok]: ZDIFFSTORE with a regular set - ziplist [ok]: ZDIFF subtracting set from itself - ziplist [ok]: ZDIFF algorithm 1 - ziplist [ok]: ZDIFF algorithm 2 - ziplist [ok]: XADD with MAXLEN option [3/66 done]: unit/keyspace () [ok]: XGROUP CREATE: creation and duplicate group name detection [ok]: XGROUP CREATE: automatic stream creation fails without MKSTREAM [ok]: XGROUP CREATE: automatic stream creation works with MKSTREAM [ok]: XREADGROUP will return only new elements [ok]: XREADGROUP can read the history of the elements we own [ok]: XPENDING is able to return pending items [ok]: XPENDING can return single consumer items [ok]: AUTH fails when a wrong password is given [ok]: Arbitrary command gives an error when AUTH is required [ok]: Arbitrary command gives an error when AUTH is required [ok]: XPENDING only group [ok]: AUTH succeeds when the right password is given [ok]: Once AUTH succeeded we can actually send commands to the server [ok]: For unauthenticated clients multibulk and bulk length are limited [ok]: MIGRATE is caching connections [ok]: Old Ziplist: SORT BY key [ok]: Old Ziplist: SORT BY key with limit [ok]: Old Ziplist: SORT BY hash field [ok]: XPENDING with IDLE [ok]: XPENDING with exclusive range intervals works as expected [ok]: XACK is able to remove items from the consumer/group PEL [ok]: XACK can't remove the same item multiple times [ok]: XACK is able to accept multiple arguments [ok]: XACK should fail if got at least one invalid ID [ok]: PEL NACK reassignment after XGROUP SETID event [ok]: XREADGROUP will not report data on empty history. Bug #5577 [ok]: XREADGROUP history reporting of deleted entries. Bug #5570 [ok]: errorstats: failed call authentication error [ok]: errorstats: failed call authentication error [ok]: errorstats: failed call within MULTI/EXEC [ok]: errorstats: failed call within MULTI/EXEC [ok]: errorstats: failed call within LUA [ok]: errorstats: failed call within LUA [ok]: errorstats: failed call NOSCRIPT error [ok]: errorstats: failed call NOSCRIPT error [ok]: errorstats: failed call NOGROUP error [ok]: errorstats: failed call NOGROUP error [ok]: errorstats: rejected call unknown command [ok]: errorstats: rejected call unknown command [ok]: errorstats: rejected call within MULTI/EXEC [ok]: errorstats: rejected call within MULTI/EXEC [ok]: errorstats: rejected call due to wrong arity [ok]: errorstats: rejected call due to wrong arity [ok]: errorstats: rejected call by OOM error [ok]: errorstats: rejected call by OOM error [ok]: errorstats: rejected call by authorization error [ok]: errorstats: rejected call by authorization error [ok]: XADD with MAXLEN option and the '=' argument [ok]: HRANDFIELD with - hashtable [ok]: Set encoding after DEBUG RELOAD [ok]: SREM basics - regular set [ok]: SREM basics - intset [ok]: SREM with multiple arguments [ok]: SREM variadic version with more args needed to destroy the key [ok]: Blocking XREADGROUP will not reply with an empty array [ok]: XGROUP DESTROY should unblock XREADGROUP with -NOGROUP [ok]: EXPIRE - set timeouts multiple times [ok]: EXPIRE - It should be still possible to read 'x' [ok]: RENAME can unblock XREADGROUP with data [ok]: RENAME can unblock XREADGROUP with -NOGROUP [ok]: Generated sets must be encoded as hashtable [ok]: SINTER with two sets - hashtable [ok]: SINTERSTORE with two sets - hashtable [ok]: SINTERSTORE with two sets, after a DEBUG RELOAD - hashtable [ok]: SUNION with two sets - hashtable [ok]: XADD with MAXLEN option and the '~' argument [ok]: XADD with NOMKSTREAM option [ok]: SUNIONSTORE with two sets - hashtable [ok]: SINTER against three sets - hashtable [ok]: SINTERSTORE with three sets - hashtable [ok]: SUNION with non existing keys - hashtable [ok]: SDIFF with two sets - hashtable [ok]: SDIFF with three sets - hashtable [ok]: SDIFFSTORE with three sets - hashtable [ok]: HRANDFIELD with - ziplist [ok]: Generated sets must be encoded as intset [ok]: SINTER with two sets - intset [ok]: SINTERSTORE with two sets - intset [ok]: Regression for a crash with blocking ops and pipelining [ok]: XADD with MINID option [ok]: XTRIM with MINID option [ok]: XTRIM with MINID option, big delta from master record [ok]: SINTERSTORE with two sets, after a DEBUG RELOAD - intset [ok]: SUNION with two sets - intset [ok]: SUNIONSTORE with two sets - intset [ok]: SINTER against three sets - intset [ok]: SINTERSTORE with three sets - intset [ok]: AUTH fails when binary password is wrong [ok]: AUTH succeeds when binary password is correct [ok]: SUNION with non existing keys - intset [ok]: SDIFF with two sets - intset [ok]: SDIFF with three sets - intset [ok]: SDIFFSTORE with three sets - intset [ok]: SDIFF with first set empty [ok]: SDIFF with same set two times [ok]: Unsafe command names are sanitized in INFO output [ok]: HSET/HLEN - Big hash creation [ok]: Is the big hash encoded with an hash table? [ok]: HGET against the small hash [ok]: Old Linked list: SORT BY key [ok]: Old Linked list: SORT BY key with limit [ok]: Old Linked list: SORT BY hash field [4/66 done]: unit/protocol () [ok]: HGET against the big hash [ok]: HGET against non existing key [ok]: HSET in update and insert mode [ok]: HSETNX target key missing - small hash [ok]: HSETNX target key exists - small hash [ok]: HSETNX target key missing - big hash [ok]: HSETNX target key exists - big hash [ok]: HMSET wrong number of args [ok]: HMSET - small hash [ok]: HMSET - big hash [ok]: HMGET against non existing key and fields [ok]: HMGET against wrong type [ok]: HMGET - small hash [ok]: HMGET - big hash [ok]: HKEYS - small hash [ok]: HKEYS - big hash [ok]: HVALS - small hash [ok]: HVALS - big hash [ok]: HGETALL - small hash [5/66 done]: unit/info () [ok]: HGETALL - big hash [ok]: HDEL and return value [ok]: HDEL - more than a single value [ok]: HDEL - hash becomes empty before deleting all specified fields [ok]: HEXISTS [ok]: Is a ziplist encoded Hash promoted on big payload? [ok]: HINCRBY against non existing database key [ok]: HINCRBY against non existing hash key [ok]: HINCRBY against hash key created by hincrby itself [ok]: HINCRBY against hash key originally set with HSET [ok]: HINCRBY over 32bit value [ok]: HINCRBY over 32bit value with over 32bit increment [ok]: HINCRBY fails against hash value with spaces (left) [ok]: HINCRBY fails against hash value with spaces (right) [ok]: HINCRBY can detect overflows [ok]: HINCRBYFLOAT against non existing database key [ok]: HINCRBYFLOAT against non existing hash key [ok]: HINCRBYFLOAT against hash key created by hincrby itself [ok]: HINCRBYFLOAT against hash key originally set with HSET [ok]: HINCRBYFLOAT over 32bit value [ok]: HINCRBYFLOAT over 32bit value with over 32bit increment [ok]: HINCRBYFLOAT fails against hash value with spaces (left) [ok]: HINCRBYFLOAT fails against hash value with spaces (right) [ok]: HINCRBYFLOAT fails against hash value that contains a null-terminator in the middle [ok]: HSTRLEN against the small hash [ok]: SAVE - make sure there are all the types as values [ok]: HSTRLEN against the big hash [ok]: HSTRLEN against non existing field [ok]: HSTRLEN corner cases [ok]: Hash ziplist regression test for large keys [ok]: Hash fuzzing #1 - 10 fields [ok]: Hash fuzzing #2 - 10 fields [ok]: MUTLI / EXEC basics [ok]: DISCARD [ok]: Nested MULTI are not allowed [ok]: MULTI where commands alter argc/argv [ok]: WATCH inside MULTI is not allowed [ok]: EXEC fails if there are errors while queueing commands #1 [ok]: EXEC fails if there are errors while queueing commands #1 [ok]: EXEC fails if there are errors while queueing commands #2 [ok]: EXEC fails if there are errors while queueing commands #2 [ok]: If EXEC aborts, the client MULTI state is cleared [ok]: EXEC works on WATCHed key not modified [ok]: EXEC fail on WATCHed key modified (1 key of 1 watched) [ok]: EXEC fail on WATCHed key modified (1 key of 5 watched) [ok]: EXEC fail on WATCHed key modified by SORT with STORE even if the result is empty [ok]: XCLAIM can claim PEL items from another consumer [ok]: EXEC fail on lazy expired WATCHed key [ok]: After successful EXEC key is no longer watched [ok]: After failed EXEC key is no longer watched [ok]: It is possible to UNWATCH [ok]: UNWATCH when there is nothing watched works as expected [ok]: FLUSHALL is able to touch the watched keys [ok]: FLUSHALL does not touch non affected keys [ok]: FLUSHDB is able to touch the watched keys [ok]: FLUSHDB does not touch non affected keys [ok]: SWAPDB is able to touch the watched keys that exist [ok]: SWAPDB is able to touch the watched keys that do not exist [ok]: WATCH is able to remember the DB a key belongs to [ok]: WATCH will consider touched keys target of EXPIRE [ok]: BLPOP: with zero timeout should block indefinitely [ok]: BLPOP: second argument is not a list [ok]: Stress tester for #3343-alike bugs [ok]: XCLAIM without JUSTID increments delivery count [ok]: FUZZ stresser with data model binary [ok]: XCLAIM same consumer [ok]: MASTERAUTH test with binary password [ok]: ziplist implementation: value encoding and backlink [6/66 done]: unit/auth () [ok]: FUZZ stresser with data model alpha [ok]: QUIT returns OK [ok]: Pipelined commands after QUIT must not be executed [ok]: Pipelined commands after QUIT that exceed read buffer size [7/66 done]: unit/quit () [ok]: SCAN regression test for issue #4906 [ok]: WATCH will consider touched expired keys [ok]: DISCARD should clear the WATCH dirty flag on the client [ok]: DISCARD should UNWATCH all the keys [ok]: MULTI / EXEC is propagated correctly (single write command) [ok]: XAUTOCLAIM can claim PEL items from another consumer [ok]: BLPOP: timeout [ok]: BLPOP: arguments are empty [ok]: BRPOP: with single empty list argument [ok]: BRPOP: with negative timeout [ok]: BRPOP: with non-integer timeout [ok]: MULTI / EXEC is propagated correctly (empty transaction) [ok]: Hash fuzzing #1 - 512 fields [ok]: XADD mass insertion and XLEN [ok]: XADD with ID 0-0 [ok]: XADD with LIMIT delete entries no more than limit [ok]: XRANGE COUNT works as expected [ok]: XREVRANGE COUNT works as expected [ok]: MULTI / EXEC is propagated correctly (read-only commands) [8/66 done]: unit/scan () [ok]: XAUTOCLAIM as an iterator [ok]: XAUTOCLAIM COUNT must be > 0 [ok]: XINFO FULL output [ok]: XGROUP CREATECONSUMER: create consumer if does not exist [ok]: XGROUP CREATECONSUMER: group must exist [ok]: Connections start with the default user [ok]: It is possible to create new users [ok]: New users start disabled [ok]: Enabling the user allows the login [ok]: Only the set of correct passwords work [ok]: It is possible to remove passwords from the set of valid ones [ok]: Test password hashes can be added [ok]: Test password hashes validate input [ok]: ACL GETUSER returns the password hash instead of the actual password [ok]: Test hashed passwords removal [ok]: By default users are not able to access any command [ok]: By default users are not able to access any key [ok]: It's possible to allow the access of a subset of keys [ok]: By default users are able to publish to any channel [ok]: By default users are able to subscribe to any channel [ok]: By default users are able to subscribe to any pattern [ok]: It's possible to allow publishing to a subset of channels [ok]: Validate subset of channels is prefixed with resetchannels flag [ok]: In transaction queue publish/subscribe/psubscribe to unauthorized channel will fail [ok]: It's possible to allow subscribing to a subset of channels [ok]: It's possible to allow subscribing to a subset of channel patterns [ok]: Subscribers are killed when revoked of channel permission [ok]: Subscribers are killed when revoked of pattern permission [ok]: Subscribers are killed when revoked of allchannels permission [ok]: Subscribers are pardoned if literal permissions are retained and/or gaining allchannels [ok]: Subscribers are pardoned if literal permissions are retained and/or gaining allchannels [ok]: Users can be configured to authenticate with any password [ok]: ACLs can exclude single commands [ok]: ACLs can include or exclude whole classes of commands [ok]: MULTI / EXEC is propagated correctly (write command, no effect) [ok]: ACLs can include single subcommands [ok]: DISCARD should not fail during OOM [ok]: ACLs set can include subcommands, if already full command exists [ok]: ACL GETUSER is able to translate back command permissions [ok]: EXPIRE - After 2. the key should no longer be here [ok]: EXPIRE - write on expire should work [ok]: EXPIREAT - Check for EXPIRE alike behavior [ok]: SETEX - Set + Expire combo operation. Check for TTL [ok]: SETEX - Check value [ok]: SETEX - Overwrite old key [ok]: ACL GETUSER provides reasonable results [ok]: ACL #5998 regression: memory leaks adding / removing subcommands [ok]: ACL LOG shows failed command executions at toplevel [ok]: ACL LOG is able to test similar events [ok]: ACL LOG is able to log keys access violations and key name [ok]: ACL LOG is able to log channel access violations and channel name [ok]: ACL LOG RESET is able to flush the entries in the log [ok]: ACL LOG can distinguish the transaction context (1) [ok]: ACL LOG can distinguish the transaction context (2) [ok]: ACL can log errors in the context of Lua scripting [ok]: ACL can log errors in the context of Lua scripting [ok]: ACL LOG can accept a numerical argument to show less entries [ok]: ACL LOG can log failed auth attempts [ok]: ACL LOG entries are limited to a maximum amount [ok]: When default user is off, new connections are not authenticated [ok]: When default user has no command permission, hello command still works for other users [ok]: ACL HELP should not have unexpected options [ok]: Delete a user that the client doesn't use [ok]: Delete a user that the client is using [ok]: XREADGROUP with NOACK creates consumer [ok]: FUZZ stresser with data model compr [ok]: XRANGE can be used to iterate the whole stream [ok]: default: load from include file, can access any channels [ok]: default: with config acl-pubsub-default allchannels after reset, can access any channels [ok]: default: with config acl-pubsub-default resetchannels after reset, can not access any channels [ok]: Alice: can execute all command [ok]: Bob: just execute @set and acl command [ok]: ACL load and save [ok]: ACL load and save with restricted channels [ok]: MULTI and script timeout [ok]: SETNX against expired volatile key [ok]: GETEX EX option [ok]: GETEX PX option [ok]: GETEX EXAT option [ok]: GETEX PXAT option [ok]: GETEX PERSIST option [ok]: GETEX no option [ok]: GETEX syntax errors [ok]: GETEX syntax errors [ok]: GETEX no arguments [ok]: GETDEL command [ok]: Old Big Linked list: SORT BY key [ok]: GETDEL propagate as DEL command to replica [ok]: Old Big Linked list: SORT BY key with limit [ok]: Default user has access to all channels irrespective of flag [ok]: Update acl-pubsub-default, existing users shouldn't get affected [ok]: Single channel is valid [ok]: Single channel is not valid with allchannels [ok]: GETEX without argument does not propagate to replica [ok]: MGET [ok]: MGET against non existing key [ok]: MGET against non-string key [ok]: GETSET (set new value) [ok]: GETSET (replace old value) [ok]: MSET base case [ok]: MSET wrong number of args [ok]: MSETNX with already existent key [ok]: MSETNX with not existing keys [ok]: STRLEN against non-existing key [ok]: STRLEN against integer-encoded value [ok]: STRLEN against plain string [ok]: SETBIT against non-existing key [ok]: SETBIT against string-encoded key [ok]: SETBIT against integer-encoded key [ok]: SETBIT against key with wrong type [ok]: SETBIT with out of range bit offset [ok]: SETBIT with non-bit argument [ok]: Hash fuzzing #2 - 512 fields [ok]: BRPOP: with zero timeout should block indefinitely [ok]: BRPOP: second argument is not a list [ok]: EXEC and script timeout [ok]: Only default user has access to all channels irrespective of flag [ok]: SETEX - Wait for the key to expire [ok]: SETEX - Wrong time parameter [ok]: PERSIST can undo an EXPIRE [ok]: PERSIST returns 0 against non existing or non volatile keys [ok]: BGSAVE [ok]: SELECT an out of range DB [ok]: Consumer without PEL is present in AOF after AOFRW [ok]: Old Big Linked list: SORT BY hash field [ok]: Intset: SORT BY key [ok]: Intset: SORT BY key with limit [ok]: Intset: SORT BY hash field [ok]: SETBIT fuzzing [ok]: GETBIT against non-existing key [ok]: GETBIT against string-encoded key [ok]: GETBIT against integer-encoded key [ok]: SETRANGE against non-existing key [ok]: SETRANGE against string-encoded key [ok]: SETRANGE against integer-encoded key [ok]: SETRANGE against key with wrong type [ok]: SETRANGE with out of range offset [ok]: GETRANGE against non-existing key [ok]: GETRANGE against string value [ok]: GETRANGE against integer-encoded value [ok]: MULTI-EXEC body and script timeout [ok]: Hash table: SORT BY key [ok]: Hash table: SORT BY key with limit [ok]: Hash table: SORT BY hash field [ok]: default: load from config file, can access any channels [9/66 done]: unit/acl () [ok]: Consumer group last ID propagation to slave (NOACK=0) [ok]: just EXEC and script timeout [ok]: exec with write commands and state change [ok]: exec with read commands and stale replica state change [ok]: EXEC with only read commands should not be rejected when OOM [ok]: EXEC with at least one use-memory command should fail [ok]: Blocking commands ignores the timeout [ok]: Consumer group last ID propagation to slave (NOACK=1) [ok]: MULTI propagation of PUBLISH [ok]: SDIFF fuzzing [ok]: SDIFF against non-set should throw error [ok]: SDIFF against non-set should throw error [ok]: SDIFF should handle non existing key as empty [ok]: SDIFFSTORE against non-set should throw error [ok]: SDIFFSTORE against non-set should throw error [ok]: SDIFFSTORE should handle non existing key as empty [ok]: SINTER against non-set should throw error [ok]: SINTER against non-set should throw error [ok]: SINTER should handle non existing key as empty [ok]: SINTER with same integer elements but different encoding [ok]: BRPOP: timeout [ok]: BRPOP: arguments are empty [ok]: BLPOP inside a transaction [ok]: LPUSHX, RPUSHX - generic [ok]: LPUSHX, RPUSHX - linkedlist [ok]: LINSERT - linkedlist [ok]: LPUSHX, RPUSHX - ziplist [ok]: LINSERT - ziplist [ok]: LINSERT raise error on bad syntax [ok]: LINSERT raise error on bad syntax [ok]: SINTERSTORE against non-set should throw error [ok]: SINTERSTORE against non-set should throw error [ok]: SINTERSTORE against non existing keys should delete dstkey [ok]: SUNION against non-set should throw error [ok]: SUNION against non-set should throw error [ok]: SUNION should handle non existing key as empty [ok]: SUNIONSTORE against non-set should throw error [ok]: SUNIONSTORE against non-set should throw error [ok]: SUNIONSTORE should handle non existing key as empty [ok]: SUNIONSTORE against non existing keys should delete dstkey [ok]: SPOP basics - hashtable [ok]: LINDEX consistency test - quicklist [ok]: SPOP with =1 - hashtable [ok]: MULTI propagation of SCRIPT LOAD [ok]: SRANDMEMBER - hashtable [ok]: SPOP basics - intset [ok]: SPOP with =1 - intset [ok]: LINDEX random access - quicklist [ok]: SRANDMEMBER - intset [ok]: SPOP with [ok]: SPOP with [ok]: SPOP using integers, testing Knuth's and Floyd's algorithm [ok]: SPOP using integers with Knuth's algorithm [ok]: SPOP new implementation: code path #1 [ok]: SPOP new implementation: code path #2 [ok]: SPOP new implementation: code path #3 [ok]: SRANDMEMBER count of 0 is handled correctly [ok]: SRANDMEMBER with against non existing key [ok]: SRANDMEMBER count overflow [ok]: SRANDMEMBER count of 0 is handled correctly - emptyarray [ok]: SRANDMEMBER with against non existing key - emptyarray [ok]: SRANDMEMBER with - hashtable [ok]: Check if list is still ok after a DEBUG RELOAD - quicklist [ok]: SRANDMEMBER with - intset [ok]: MULTI propagation of SCRIPT LOAD [ok]: XREVRANGE returns the reverse of XRANGE [ok]: SRANDMEMBER histogram distribution - hashtable [ok]: ZDIFF fuzzing - ziplist [ok]: XRANGE exclusive ranges [ok]: XREAD with non empty stream [ok]: Non blocking XREAD with empty streams [ok]: XREAD with non empty second stream [ok]: MULTI propagation of XREADGROUP [ok]: Blocking XREAD waiting new data [ok]: Blocking XREAD waiting old data [ok]: Basic ZPOP with a single key - ziplist [ok]: ZPOP with count - ziplist [ok]: BZPOP with a single existing sorted set - ziplist [ok]: BZPOP with multiple existing sorted sets - ziplist [ok]: Blocking XREAD will not reply with an empty array [ok]: XREAD: XADD + DEL should not awake client [ok]: BZPOP second sorted set has members - ziplist [ok]: XREAD: XADD + DEL + LPUSH should not awake client [ok]: XREAD with same stream name multiple times should work [ok]: XREAD + multiple XADD inside transaction [ok]: Basic ZPOP - ziplist RESP3 [ok]: XDEL basic test [ok]: ZPOP with count - ziplist RESP3 [ok]: BZPOP - ziplist RESP3 [ok]: Check encoding - skiplist [ok]: ZSET basic ZADD and score update - skiplist [ok]: ZSET element can't be set to NaN with ZADD - skiplist [ok]: ZSET element can't be set to NaN with ZINCRBY - skiplist [ok]: ZADD with options syntax error with incomplete pair - skiplist [ok]: ZADD with options syntax error with incomplete pair - skiplist [ok]: ZADD XX option without key - skiplist [ok]: ZADD XX existing key - skiplist [ok]: ZADD XX returns the number of elements actually added - skiplist [ok]: ZADD XX updates existing elements score - skiplist [ok]: ZADD GT updates existing elements when new scores are greater - skiplist [ok]: ZADD LT updates existing elements when new scores are lower - skiplist [ok]: ZADD GT XX updates existing elements when new scores are greater and skips new elements - skiplist [ok]: ZADD LT XX updates existing elements when new scores are lower and skips new elements - skiplist [ok]: ZADD XX and NX are not compatible - skiplist [ok]: ZADD NX with non existing key - skiplist [ok]: ZADD NX only add new elements without updating old ones - skiplist [ok]: ZADD GT and NX are not compatible - skiplist [ok]: ZADD LT and NX are not compatible - skiplist [ok]: SRANDMEMBER histogram distribution - intset [ok]: ZADD LT and GT are not compatible - skiplist [ok]: ZADD INCR LT/GT replies with nill if score not updated - skiplist [ok]: ZADD INCR LT/GT with inf - skiplist [ok]: ZADD INCR works like ZINCRBY - skiplist [ok]: ZADD INCR works with a single score-elemenet pair - skiplist [ok]: ZADD CH option changes return value to all changed elements - skiplist [ok]: ZINCRBY calls leading to NaN result in error - skiplist [ok]: ZINCRBY calls leading to NaN result in error - skiplist [ok]: ZADD - Variadic version base case - $encoding [ok]: ZADD - Return value is the number of actually added items - $encoding [ok]: ZADD - Variadic version does not add nothing on single parsing err - $encoding [ok]: ZADD - Variadic version does not add nothing on single parsing err - $encoding [ok]: ZADD - Variadic version will raise error on missing arg - $encoding [ok]: ZADD - Variadic version will raise error on missing arg - $encoding [ok]: ZINCRBY does not work variadic even if shares ZADD implementation - $encoding [ok]: ZCARD basics - skiplist [ok]: ZREM removes key after last element is removed - skiplist [ok]: ZREM variadic version - skiplist [ok]: ZREM variadic version -- remove elements after key deletion - skiplist [ok]: ZRANGE basics - skiplist [ok]: ZREVRANGE basics - skiplist [ok]: ZRANK/ZREVRANK basics - skiplist [ok]: ZRANK - after deletion - skiplist [ok]: ZINCRBY - can create a new sorted set - skiplist [ok]: ZINCRBY - increment and decrement - skiplist [ok]: ZINCRBY return value - skiplist [ok]: ZRANGEBYSCORE/ZREVRANGEBYSCORE/ZCOUNT basics - skiplist [ok]: ZRANGEBYSCORE with WITHSCORES - skiplist [ok]: ZRANGEBYSCORE with LIMIT - skiplist [ok]: ZRANGEBYSCORE with LIMIT and WITHSCORES - skiplist [ok]: ZRANGEBYSCORE with non-value min or max - skiplist [ok]: ZRANGEBYLEX/ZREVRANGEBYLEX/ZLEXCOUNT basics - skiplist [ok]: ZLEXCOUNT advanced - skiplist [ok]: ZRANGEBYSLEX with LIMIT - skiplist [ok]: ZRANGEBYLEX with invalid lex range specifiers - skiplist [ok]: ZREMRANGEBYSCORE basics - skiplist [ok]: ZREMRANGEBYSCORE with non-value min or max - skiplist [ok]: ZREMRANGEBYRANK basics - skiplist [ok]: ZUNIONSTORE against non-existing key doesn't set destination - skiplist [ok]: ZUNION/ZINTER/ZDIFF against non-existing key - skiplist [ok]: ZUNIONSTORE with empty set - skiplist [ok]: ZUNION/ZINTER/ZDIFF with empty set - skiplist [ok]: ZUNIONSTORE basics - skiplist [ok]: LINDEX consistency test - quicklist [ok]: ZUNION/ZINTER/ZDIFF with integer members - skiplist [ok]: ZUNIONSTORE with weights - skiplist [ok]: ZUNION with weights - skiplist [ok]: ZUNIONSTORE with a regular set and weights - skiplist [ok]: ZUNIONSTORE with AGGREGATE MIN - skiplist [ok]: ZUNION/ZINTER with AGGREGATE MIN - skiplist [ok]: ZUNIONSTORE with AGGREGATE MAX - skiplist [ok]: ZUNION/ZINTER with AGGREGATE MAX - skiplist [ok]: ZINTERSTORE basics - skiplist [ok]: ZINTER basics - skiplist [ok]: ZINTER RESP3 - skiplist [ok]: ZINTERSTORE with weights - skiplist [ok]: ZINTER with weights - skiplist [ok]: ZINTERSTORE with a regular set and weights - skiplist [ok]: ZINTERSTORE with AGGREGATE MIN - skiplist [ok]: ZINTERSTORE with AGGREGATE MAX - skiplist [10/66 done]: unit/multi () [ok]: ZUNIONSTORE with +inf/-inf scores - skiplist [ok]: ZUNIONSTORE with NaN weights - skiplist [ok]: ZINTERSTORE with +inf/-inf scores - skiplist [ok]: ZINTERSTORE with NaN weights - skiplist [ok]: ZDIFFSTORE basics - skiplist [ok]: ZDIFF basics - skiplist [ok]: ZDIFFSTORE with a regular set - skiplist [ok]: ZDIFF subtracting set from itself - skiplist [ok]: ZDIFF algorithm 1 - skiplist [ok]: ZDIFF algorithm 2 - skiplist [ok]: LINDEX random access - quicklist [ok]: Stress test the hash ziplist -> hashtable encoding conversion [ok]: Hash ziplist of various encodings [ok]: Hash ziplist of various encodings - sanitize dump [ok]: HINCRBYFLOAT does not allow NaN or Infinity [11/66 done]: unit/type/hash () [ok]: Check if list is still ok after a DEBUG RELOAD - quicklist [ok]: LLEN against non-list value error [ok]: LLEN against non-list value error [ok]: LLEN against non existing key [ok]: LINDEX against non-list value error [ok]: LINDEX against non-list value error [ok]: LINDEX against non existing key [ok]: LPUSH against non-list value error [ok]: LPUSH against non-list value error [ok]: RPUSH against non-list value error [ok]: RPUSH against non-list value error [ok]: RPOPLPUSH base case - linkedlist [ok]: LMOVE left left base case - linkedlist [ok]: LMOVE left right base case - linkedlist [ok]: LMOVE right left base case - linkedlist [ok]: LMOVE right right base case - linkedlist [ok]: RPOPLPUSH with the same list as src and dst - linkedlist [ok]: LMOVE left left with the same list as src and dst - linkedlist [ok]: LMOVE left right with the same list as src and dst - linkedlist [ok]: LMOVE right left with the same list as src and dst - linkedlist [ok]: LMOVE right right with the same list as src and dst - linkedlist [ok]: RPOPLPUSH with linkedlist source and existing target linkedlist [ok]: LMOVE left left with linkedlist source and existing target linkedlist [ok]: LMOVE left right with linkedlist source and existing target linkedlist [ok]: LMOVE right left with linkedlist source and existing target linkedlist [ok]: LMOVE right right with linkedlist source and existing target linkedlist [ok]: RPOPLPUSH with linkedlist source and existing target ziplist [ok]: LMOVE left left with linkedlist source and existing target ziplist [ok]: LMOVE left right with linkedlist source and existing target ziplist [ok]: LMOVE right left with linkedlist source and existing target ziplist [ok]: LMOVE right right with linkedlist source and existing target ziplist [ok]: RPOPLPUSH base case - ziplist [ok]: LMOVE left left base case - ziplist [ok]: LMOVE left right base case - ziplist [ok]: LMOVE right left base case - ziplist [ok]: LMOVE right right base case - ziplist [ok]: RPOPLPUSH with the same list as src and dst - ziplist [ok]: LMOVE left left with the same list as src and dst - ziplist [ok]: LMOVE left right with the same list as src and dst - ziplist [ok]: LMOVE right left with the same list as src and dst - ziplist [ok]: LMOVE right right with the same list as src and dst - ziplist [ok]: RPOPLPUSH with ziplist source and existing target linkedlist [ok]: LMOVE left left with ziplist source and existing target linkedlist [ok]: LMOVE left right with ziplist source and existing target linkedlist [ok]: LMOVE right left with ziplist source and existing target linkedlist [ok]: LMOVE right right with ziplist source and existing target linkedlist [ok]: RPOPLPUSH with ziplist source and existing target ziplist [ok]: LMOVE left left with ziplist source and existing target ziplist [ok]: LMOVE left right with ziplist source and existing target ziplist [ok]: LMOVE right left with ziplist source and existing target ziplist [ok]: LMOVE right right with ziplist source and existing target ziplist [ok]: RPOPLPUSH against non existing key [ok]: RPOPLPUSH against non list src key [ok]: RPOPLPUSH against non list dst key [ok]: RPOPLPUSH against non existing src key [ok]: Basic LPOP/RPOP - linkedlist [ok]: Basic LPOP/RPOP - ziplist [ok]: LPOP/RPOP against non list value [ok]: Check consistency of different data types after a reload [ok]: Mass RPOP/LPOP - quicklist [ok]: Slave enters handshake [ok]: GETRANGE fuzzing [ok]: Extended SET can detect syntax errors [ok]: Extended SET can detect syntax errors [ok]: Extended SET NX option [ok]: Extended SET XX option [ok]: Extended SET GET option [ok]: Extended SET GET option with no previous value [ok]: Extended SET GET with NX option should result in syntax err [ok]: Extended SET GET with NX option should result in syntax err [ok]: Extended SET GET with incorrect type should result in wrong type error [ok]: Extended SET GET with incorrect type should result in wrong type error [ok]: Extended SET EX option [ok]: Extended SET PX option [ok]: Extended SET EXAT option [ok]: Extended SET PXAT option [ok]: Extended SET using multiple options at once [ok]: GETRANGE with huge ranges, Github issue #1844 [ok]: STRALGO LCS string output with STRINGS option [ok]: STRALGO LCS len [ok]: LCS with KEYS option [ok]: LCS indexes [ok]: LCS indexes with match len [ok]: LCS indexes with match len and minimum match len [ok]: Mass RPOP/LPOP - quicklist [ok]: LRANGE basics - linkedlist [ok]: LRANGE inverted indexes - linkedlist [ok]: LRANGE out of range indexes including the full list - linkedlist [ok]: LRANGE out of range negative end index - linkedlist [ok]: LRANGE basics - ziplist [ok]: LRANGE inverted indexes - ziplist [ok]: LRANGE out of range indexes including the full list - ziplist [ok]: LRANGE out of range negative end index - ziplist [ok]: LRANGE against non existing key [ok]: LRANGE with start > end yields an empty array for backward compatibility [ok]: LTRIM basics - linkedlist [ok]: LTRIM out of range negative end index - linkedlist [ok]: LTRIM basics - ziplist [ok]: SETRANGE with huge offset [ok]: LTRIM out of range negative end index - ziplist [ok]: LSET - linkedlist [ok]: LSET out of range index - linkedlist [ok]: LSET - ziplist [ok]: LSET out of range index - ziplist [ok]: LSET against non existing key [ok]: LSET against non list value [ok]: LREM remove all the occurrences - linkedlist [ok]: LREM remove the first occurrence - linkedlist [ok]: LREM remove non existing element - linkedlist [ok]: LREM starting from tail with negative count - linkedlist [ok]: LREM starting from tail with negative count (2) - linkedlist [ok]: LREM deleting objects that may be int encoded - linkedlist [ok]: LREM remove all the occurrences - ziplist [ok]: LREM remove the first occurrence - ziplist [ok]: LREM remove non existing element - ziplist [ok]: LREM starting from tail with negative count - ziplist [ok]: LREM starting from tail with negative count (2) - ziplist [ok]: LREM deleting objects that may be int encoded - ziplist [12/66 done]: unit/type/string () [ok]: EXPIRE precision is now the millisecond [ok]: Empty stream with no lastid can be rewrite into AOF correctly [13/66 done]: unit/type/stream-cgroups () [ok]: LTRIM stress testing - linkedlist [ok]: First server should have role slave after SLAVEOF [ok]: If min-slaves-to-write is honored, write is accepted [ok]: No write if min-slaves-to-write is < attached slaves [ok]: If min-slaves-to-write is honored, write is accepted (again) [ok]: First server should have role slave after SLAVEOF [ok]: First server should have role slave after SLAVEOF [ok]: PEXPIRE/PSETEX/PEXPIREAT can set sub-second expires [ok]: TTL returns time to live in [ok]: PTTL returns time to live in milliseconds [ok]: TTL / PTTL return -1 if key has no expire [ok]: TTL / PTTL return -2 if key does not exit [ok]: Same dataset digest if saving/reloading as AOF? [ok]: Regression for bug 593 - chaining BRPOPLPUSH with other blocking cmds [ok]: client unblock tests [ok]: List ziplist of various encodings [ok]: List ziplist of various encodings - sanitize dump [14/66 done]: unit/type/list () [ok]: Big Hash table: SORT BY key [ok]: Big Hash table: SORT BY key with limit [ok]: XDEL fuzz test [ok]: Redis should actively expire keys incrementally [ok]: EXPIRES after a reload (snapshot + append only file rewrite) [ok]: Big Hash table: SORT BY hash field [ok]: SORT GET # [ok]: SORT GET [ok]: SORT GET (key and hash) with sanity check [ok]: SORT BY key STORE [ok]: SORT BY hash field STORE [ok]: SORT extracts STORE correctly [ok]: SORT extracts multiple STORE correctly [ok]: SORT DESC [ok]: SORT ALPHA against integer encoded strings [ok]: SORT sorted set [ok]: SORT sorted set BY nosort should retain ordering [ok]: SORT sorted set BY nosort + LIMIT [ok]: SORT sorted set BY nosort works as expected from scripts [ok]: SORT sorted set: +inf and -inf handling [ok]: SORT regression for issue #19, sorting floats [ok]: SORT with STORE returns zero if result is empty (github issue 224) [ok]: SORT with STORE does not create empty lists (github issue 224) [ok]: SORT with STORE removes key if result is empty (github issue 227) [ok]: SORT with BY and STORE should still order output [ok]: SORT will complain with numerical sorting and bad doubles (1) [ok]: SORT will complain with numerical sorting and bad doubles (2) [ok]: SORT BY sub-sorts lexicographically if score is the same [ok]: SORT GET with pattern ending with just -> does not get hash field [ok]: SORT by nosort retains native order for lists [ok]: SORT by nosort plus store retains native order for lists [ok]: SORT by nosort with limit returns based on original list order [ok]: Test latency events logging [ok]: LATENCY HISTORY output is ok [ok]: LATENCY LATEST output is ok [ok]: LATENCY HISTORY / RESET with wrong event name is fine [ok]: LATENCY DOCTOR produces some output [ok]: LATENCY RESET is able to reset events [ok]: SORT speed, 100 element list BY key, 100 times [ok]: First server should have role slave after SLAVEOF [ok]: SORT speed, 100 element list BY hash field, 100 times [ok]: SORT speed, 100 element list directly, 100 times [ok]: SORT speed, 100 element list BY , 100 times [ok]: SETRANGE with huge offset [15/66 done]: unit/sort () [ok]: Redis should lazy expire keys [ok]: Slave should be able to synchronize with the master [ok]: EXPIRE should not resurrect keys (issue #1026) [ok]: 5 keys in, 5 keys out [ok]: EXPIRE with empty string as TTL should report an error [ok]: EXPIRE with empty string as TTL should report an error [ok]: SET with EX with big integer should report an error [ok]: SET with EX with big integer should report an error [ok]: SET with EX with smallest integer should report an error [ok]: SET with EX with smallest integer should report an error [ok]: GETEX with big integer should report an error [ok]: GETEX with big integer should report an error [ok]: GETEX with smallest integer should report an error [ok]: GETEX with smallest integer should report an error [ok]: EXPIRE with big integer overflows when converted to milliseconds [ok]: PEXPIRE with big integer overflow when basetime is added [ok]: EXPIRE with big negative integer [ok]: PEXPIREAT with big integer works [ok]: PEXPIREAT with big negative integer works [ok]: Detect write load to master [ok]: Test replication partial resync: no reconnection, just sync (diskless: no, disabled, reconnect: 0) [ok]: No write if min-slaves-max-lag is > of the slave lag [ok]: min-slaves-to-write is ignored by slaves [ok]: Slave should be able to synchronize with the master [ok]: EXPIRES after AOF reload (without rewrite) [ok]: Detect write load to master [ok]: EXPIRE and SET/GETEX EX/PX/EXAT/PXAT option, TTL should not be reset after loadaof [ok]: EXPIRE relative and absolute propagation to replicas [ok]: SET command will remove expire [ok]: SET - use KEEPTTL option, TTL should not be removed [ok]: PIPELINING stresser (also a regression for the old epoll bug) [ok]: APPEND basics [ok]: APPEND basics, integer encoded values [ok]: ZDIFF fuzzing - skiplist [ok]: Basic ZPOP with a single key - skiplist [ok]: ZPOP with count - skiplist [ok]: BZPOP with a single existing sorted set - skiplist [ok]: BZPOP with multiple existing sorted sets - skiplist [ok]: BZPOP second sorted set has members - skiplist [ok]: Basic ZPOP - skiplist RESP3 [ok]: ZPOP with count - skiplist RESP3 [ok]: BZPOP - skiplist RESP3 [ok]: ZINTERSTORE regression with two sets, intset+hashtable [ok]: ZUNIONSTORE regression, should not create NaN in scores [ok]: ZINTERSTORE #516 regression, mixed sets and ziplist zsets [ok]: ZUNIONSTORE result is sorted [ok]: ZUNIONSTORE/ZINTERSTORE/ZDIFFSTORE error if using WITHSCORES [ok]: ZUNIONSTORE/ZINTERSTORE/ZDIFFSTORE error if using WITHSCORES [ok]: ZMSCORE retrieve [ok]: ZMSCORE retrieve from empty set [ok]: ZMSCORE retrieve with missing member [ok]: ZMSCORE retrieve single member [ok]: ZMSCORE retrieve requires one or more members [ok]: ZSET commands don't accept the empty strings as valid score [ok]: ZSCORE - ziplist [ok]: ZMSCORE - ziplist [ok]: APPEND fuzzing [ok]: ziplist implementation: encoding stress testing [ok]: FLUSHDB [ok]: Perform a final SAVE to leave a clean DB on disk [ok]: RESET clears client state [ok]: RESET clears MONITOR state [ok]: RESET clears and discards MULTI state [ok]: RESET clears Pub/Sub state [ok]: RESET clears authenticated state [ok]: ZSCORE after a DEBUG RELOAD - ziplist [ok]: ZSET sorting stresser - ziplist [16/66 done]: unit/type/list-3 () [ok]: Unfinished MULTI: Server should start if load-truncated is yes [ok]: Short read: Server should start if load-truncated is yes [ok]: Truncated AOF loaded: we expect foo to be equal to 5 [ok]: Append a new command after loading an incomplete AOF [ok]: Don't rehash if redis has child proecess [ok]: Test replication with parallel clients writing in different DBs [ok]: LATENCY of expire events are correctly collected [ok]: LATENCY HELP should not have unexpected options [ok]: Short read + command: Server should start [ok]: Truncated AOF loaded: we expect foo to be equal to 6 now [17/66 done]: unit/latency-monitor () [ok]: Process title set as expected [18/66 done]: unit/other () [ok]: Bad format: Server should have logged an error [ok]: Bad format: Server should have logged an error [ok]: Unfinished MULTI: Server should have logged an error [ok]: Unfinished MULTI: Server should have logged an error [ok]: RDB encoding loading test [ok]: SET - use KEEPTTL option, TTL should not be removed after loadaof [ok]: GETEX use of PERSIST option should remove TTL [ok]: corrupt payload: #7445 - with sanitize [ok]: First server should have role slave after SLAVEOF [ok]: Short read: Server should have logged an error [ok]: Short read: Server should have logged an error [ok]: With min-slaves-to-write (1,3): master should be writable [ok]: With min-slaves-to-write (2,3): master should not be writable [ok]: With not enough good slaves, read in Lua script is still accepted [ok]: Server started empty with non-existing RDB file [ok]: Short read: Utility should confirm the AOF is not valid [ok]: Short read: Utility should show the abnormal line num in AOF [ok]: Short read: Utility should be able to fix the AOF [ok]: Server started empty with empty RDB file [ok]: Fixed AOF: Server should have been started [ok]: Fixed AOF: Keyspace should contain values that were parseable [ok]: corrupt payload: #7445 - without sanitize - 1 [ok]: AOF+SPOP: Server should have been started [ok]: AOF+SPOP: Set should have 1 member [ok]: corrupt payload: #7445 - without sanitize - 2 [ok]: Test RDB stream encoding [ok]: Test RDB stream encoding - sanitize dump [ok]: corrupt payload: hash with valid zip list header, invalid entry len [ok]: AOF+SPOP: Server should have been started [ok]: AOF+SPOP: Set should have 1 member [ok]: Server should not start if RDB is corrupted [ok]: corrupt payload: invalid zlbytes header [ok]: corrupt payload: valid zipped hash header, dup records [ok]: AOF+EXPIRE: Server should have been started [ok]: AOF+EXPIRE: List should be empty [ok]: Test FLUSHALL aborts bgsave [ok]: bgsave resets the change counter [ok]: corrupt payload: quicklist big ziplist prev len [ok]: Redis should not try to convert DEL into EXPIREAT for EXPIRE -1 [ok]: corrupt payload: quicklist small ziplist prev len [ok]: corrupt payload: quicklist ziplist wrong count [ok]: ZRANGEBYSCORE fuzzy test, 100 ranges in 128 element sorted set - ziplist [ok]: corrupt payload: #3080 - quicklist [ok]: corrupt payload: quicklist with empty ziplist [ok]: ZRANGEBYLEX fuzzy test, 100 ranges in 128 element sorted set - ziplist [ok]: Slave is able to detect timeout during handshake [ok]: MIGRATE cached connections are released after some time [ok]: GETEX use of PERSIST option should remove TTL after loadaof [ok]: GETEX propagate as to replica as PERSIST, DEL, or nothing [ok]: corrupt payload: #3080 - ziplist [ok]: MASTER and SLAVE consistency with expire [ok]: corrupt payload: load corrupted rdb with no CRC - #3505 [ok]: MIGRATE is able to migrate a key between two instances [19/66 done]: unit/expire () [ok]: ZREMRANGEBYLEX fuzzy test, 100 ranges in 128 element sorted set - ziplist [ok]: ZSETs skiplist implementation backlink consistency test - ziplist [ok]: MIGRATE is able to copy a key between two instances [ok]: Set instance A as slave of B [ok]: corrupt payload: load corrupted rdb with empty keys [ok]: LTRIM stress testing - ziplist [ok]: MIGRATE will not overwrite existing keys, unless REPLACE is used [20/66 done]: unit/type/list-2 () [ok]: With min-slaves-to-write: master not writable with lagged slave [ok]: corrupt payload: load corrupted rdb with empty keys [ok]: RDB load zipmap hash: converts to ziplist [ok]: MIGRATE propagates TTL correctly [ok]: RDB load zipmap hash: converts to hash table when hash-max-ziplist-entries is exceeded [ok]: corrupt payload: listpack invalid size header [ok]: corrupt payload: listpack too long entry len [ok]: ZSETs ZRANK augmented skip list stress testing - ziplist [ok]: BZPOPMIN, ZADD + DEL should not awake blocked client [ok]: BZPOPMIN, ZADD + DEL + SET should not awake blocked client [ok]: BZPOPMIN with same key multiple times should work [ok]: MULTI/EXEC is isolated from the point of view of BZPOPMIN [ok]: BZPOPMIN with variadic ZADD [ok]: First server should have role slave after SLAVEOF [ok]: RDB load zipmap hash: converts to hash table when hash-max-ziplist-value is exceeded [ok]: corrupt payload: listpack very long entry len [21/66 done]: integration/convert-zipmap-hash-on-load () [22/66 done]: integration/logging () [ok]: INCRBYFLOAT replication, should not remove expire [ok]: GETSET replication [ok]: BRPOPLPUSH replication, when blocking against empty list [ok]: corrupt payload: listpack too long entry prev len [ok]: MASTER and SLAVE dataset should be identical after complex ops [ok]: PSYNC2: --- CYCLE 1 --- [ok]: PSYNC2: [NEW LAYOUT] Set #1 as master [ok]: PSYNC2: Set #0 to replicate from #1 [ok]: PSYNC2: Set #3 to replicate from #1 [ok]: PSYNC2: Set #2 to replicate from #1 [ok]: PSYNC2: Set #4 to replicate from #3 [ok]: corrupt payload: hash ziplist with duplicate records [23/66 done]: integration/replication-2 () [ok]: Test replication partial resync: ok psync (diskless: no, disabled, reconnect: 1) [ok]: corrupt payload: hash ziplist uneven record count [ok]: BZPOPMIN with zero timeout should block indefinitely [ok]: ZSCORE - skiplist [ok]: corrupt payload: hash dupliacte records [ok]: ZMSCORE - skiplist [ok]: ZSCORE after a DEBUG RELOAD - skiplist [ok]: ZSET sorting stresser - skiplist [ok]: corrupt payload: hash empty zipmap [ok]: BRPOPLPUSH replication, list exists [ok]: BLMOVE (left, left) replication, when blocking against empty list [ok]: corrupt payload: fuzzer findings - NPD in streamIteratorGetID [ok]: Slave should be able to synchronize with the master [ok]: corrupt payload: fuzzer findings - listpack NPD on invalid stream [ok]: PSYNC2: cluster is consistent after failover [ok]: corrupt payload: fuzzer findings - NPD in quicklistIndex [ok]: corrupt payload: fuzzer findings - invalid read in ziplistFind [ok]: corrupt payload: fuzzer findings - invalid ziplist encoding [ok]: PSYNC2 #3899 regression: setup [ok]: corrupt payload: fuzzer findings - hash crash [ok]: SRANDMEMBER with a dict containing long chain [ok]: SMOVE basics - from regular set to intset [ok]: SMOVE basics - from intset to regular set [ok]: SMOVE non existing key [ok]: SMOVE non existing src set [ok]: SMOVE from regular set to non existing destination set [ok]: SMOVE from intset to non existing destination set [ok]: SMOVE wrong src key type [ok]: SMOVE wrong dst key type [ok]: SMOVE with identical source and destination [ok]: SMOVE only notify dstset when the addition is successful [ok]: BLMOVE (left, left) replication, list exists [ok]: BLMOVE (left, right) replication, when blocking against empty list [ok]: corrupt payload: fuzzer findings - uneven entry count in hash [ok]: Detect write load to master [ok]: corrupt payload: fuzzer findings - invalid read in lzf_decompress [ok]: PSYNC2 #3899 regression: kill first replica [ok]: corrupt payload: fuzzer findings - leak in rdbloading due to dup entry in set [ok]: corrupt payload: fuzzer findings - empty intset [ok]: corrupt payload: fuzzer findings - valgrind ziplist - crash report prints freed memory [ok]: corrupt payload: fuzzer findings - valgrind ziplist prevlen reaches outside the ziplist [ok]: PSYNC2 #3899 regression: kill chained replica [ok]: BLMOVE (left, right) replication, list exists [ok]: BLMOVE (right, left) replication, when blocking against empty list [ok]: corrupt payload: fuzzer findings - valgrind - bad rdbLoadDoubleValue [ok]: ZRANGEBYSCORE fuzzy test, 100 ranges in 100 element sorted set - skiplist [ok]: AOF fsync always barrier issue [ok]: corrupt payload: fuzzer findings - valgrind ziplist prev too big [ok]: ZRANGEBYLEX fuzzy test, 100 ranges in 100 element sorted set - skiplist [ok]: GETEX should not append to AOF [ok]: corrupt payload: fuzzer findings - lzf decompression fails, avoid valgrind invalid read [24/66 done]: integration/aof () [ok]: PSYNC2 #3899 regression: kill first replica [ok]: ZREMRANGEBYLEX fuzzy test, 100 ranges in 100 element sorted set - skiplist [ok]: corrupt payload: fuzzer findings - stream bad lp_count [ok]: ZSETs skiplist implementation backlink consistency test - skiplist [ok]: BLMOVE (right, left) replication, list exists [ok]: BLMOVE (right, right) replication, when blocking against empty list [ok]: PSYNC2 #3899 regression: kill first replica [ok]: corrupt payload: fuzzer findings - stream bad lp_count - unsanitized [ok]: intsets implementation stress testing [25/66 done]: unit/type/set () [ok]: corrupt payload: fuzzer findings - stream integrity check issue [ok]: corrupt payload: fuzzer findings - infinite loop [ok]: Slave is able to evict keys created in writable slaves [ok]: failover command fails without connected replica [ok]: corrupt payload: fuzzer findings - hash convert asserts on RESTORE with shallow sanitization [ok]: setup replication for following tests [ok]: failover command fails with invalid host [ok]: failover command fails with invalid port [ok]: failover command fails with just force and timeout [ok]: failover command fails when sent to a replica [ok]: failover command fails with force without timeout [ok]: PSYNC2 pingoff: setup [ok]: PSYNC2 pingoff: write and wait replication [ok]: BLMOVE (right, right) replication, list exists [ok]: corrupt payload: OOM in rdbGenericLoadStringObject [ok]: AOF rewrite during write load: RDB preamble=yes [ok]: BLPOP followed by role change, issue #2473 [ok]: ZSETs ZRANK augmented skip list stress testing - skiplist [ok]: BZPOPMIN, ZADD + DEL should not awake blocked client [ok]: BZPOPMIN, ZADD + DEL + SET should not awake blocked client [ok]: BZPOPMIN with same key multiple times should work [ok]: MULTI/EXEC is isolated from the point of view of BZPOPMIN [ok]: BZPOPMIN with variadic ZADD [ok]: First server should have role slave after SLAVEOF [ok]: corrupt payload: fuzzer findings - OOM in dictExpand [ok]: PSYNC2 #3899 regression: kill first replica [ok]: corrupt payload: fuzzer findings - invalid tail offset after removal [ok]: failover command to specific replica works [ok]: XRANGE fuzzing [ok]: Second server should have role master at first [ok]: SLAVEOF should start with link status "down" [ok]: XREVRANGE regression test for issue #5006 [ok]: The role should immediately be changed to "replica" [ok]: XREAD streamID edge (no-blocking) [ok]: XREAD streamID edge (blocking) [ok]: XADD streamID edge [ok]: corrupt payload: fuzzer findings - negative reply length [ok]: Sync should have transferred keys from master [ok]: Sync should have transferred keys from master [ok]: The link status should be up [ok]: SET on the master should immediately propagate [ok]: FLUSHALL should replicate [ok]: ROLE in master reports master with a slave [ok]: ROLE in slave reports slave in connected state [ok]: PSYNC2: generate load while killing replication links [ok]: PSYNC2: cluster is consistent after load (x = 47351) [ok]: XTRIM with MAXLEN option basic test [ok]: XADD with LIMIT consecutive calls [ok]: XTRIM with ~ is limited [ok]: PSYNC2: total sum of full synchronizations is exactly 4 [ok]: XTRIM without ~ is not limited [ok]: PSYNC2: --- CYCLE 2 --- [ok]: PSYNC2: [NEW LAYOUT] Set #2 as master [ok]: PSYNC2: Set #0 to replicate from #2 [ok]: PSYNC2: Set #1 to replicate from #2 [ok]: PSYNC2: Set #3 to replicate from #2 [ok]: PSYNC2: Set #4 to replicate from #0 [ok]: XTRIM without ~ and with LIMIT [ok]: XTRIM with LIMIT delete entries no more than limit [ok]: BZPOPMIN with zero timeout should block indefinitely [ok]: corrupt payload: fuzzer findings - valgrind negative malloc [ok]: corrupt payload: fuzzer findings - valgrind invalid read [ok]: XADD with MAXLEN > xlen can propagate correctly [ok]: failover command to any replica works [ok]: corrupt payload: fuzzer findings - empty hash ziplist [ok]: corrupt payload: fuzzer findings - stream with no records [ok]: PSYNC2: cluster is consistent after failover [ok]: XADD with MINID > lastid can propagate correctly [ok]: failover to a replica with force works [ok]: corrupt payload: fuzzer findings - quicklist ziplist tail followed by extra data which start with 0xff [ok]: XADD with ~ MAXLEN can propagate correctly [ok]: failover with timeout aborts if replica never catches up [ok]: corrupt payload: fuzzer findings - dict init to huge size [ok]: failovers can be aborted [ok]: XADD with ~ MAXLEN and LIMIT can propagate correctly [ok]: ZSET skiplist order consistency when elements are moved [ok]: ZRANGESTORE basic [ok]: ZRANGESTORE RESP3 [ok]: ZRANGESTORE range [ok]: ZRANGESTORE BYLEX [ok]: ZRANGESTORE BYSCORE [ok]: ZRANGESTORE BYSCORE LIMIT [ok]: ZRANGESTORE BYSCORE REV LIMIT [ok]: ZRANGE BYSCORE REV LIMIT [ok]: ZRANGESTORE - src key missing [ok]: ZRANGESTORE - src key wrong type [ok]: ZRANGESTORE - empty range [ok]: ZRANGESTORE BYLEX - empty range [ok]: ZRANGESTORE BYSCORE - empty range [ok]: ZRANGE BYLEX [ok]: ZRANGESTORE invalid syntax [ok]: ZRANGESTORE with zset-max-ziplist-entries 0 #10767 case [ok]: ZRANGESTORE with zset-max-ziplist-entries 1 dst key should use skiplist encoding [ok]: ZRANGE invalid syntax [ok]: corrupt payload: fuzzer findings - huge string [ok]: ZRANDMEMBER - ziplist [ok]: ZRANDMEMBER - skiplist [ok]: ZRANDMEMBER with RESP3 [ok]: ZRANDMEMBER count of 0 is handled correctly [ok]: ZRANDMEMBER with against non existing key [ok]: ZRANDMEMBER count overflow [ok]: ZRANDMEMBER count of 0 is handled correctly - emptyarray [ok]: ZRANDMEMBER with against non existing key - emptyarray [ok]: MIGRATE can correctly transfer large values [ok]: corrupt payload: fuzzer findings - stream PEL without consumer [ok]: XADD with ~ MINID can propagate correctly [ok]: failover aborts if target rejects sync request [ok]: ZRANDMEMBER with - skiplist [ok]: MIGRATE can correctly transfer hashes [ok]: Fuzzer corrupt restore payloads - sanitize_dump: no [ok]: corrupt payload: fuzzer findings - stream listpack valgrind issue [ok]: Test replication partial resync: no backlog (diskless: no, disabled, reconnect: 1) [ok]: PSYNC2 pingoff: pause replica and promote it [ok]: XADD with ~ MINID and LIMIT can propagate correctly [ok]: ZRANDMEMBER with - ziplist [ok]: corrupt payload: fuzzer findings - stream with bad lpFirst [26/66 done]: unit/type/zset () [ok]: MIGRATE timeout actually works [27/66 done]: integration/failover () [ok]: Interactive CLI: INFO response should be printed raw [ok]: Interactive CLI: Status reply [ok]: Interactive CLI: Integer reply [ok]: Interactive CLI: Bulk reply [ok]: Interactive CLI: Multi-bulk reply [ok]: corrupt payload: fuzzer findings - stream listpack lpPrev valgrind issue [ok]: Slave should be able to synchronize with the master [ok]: MIGRATE can migrate multiple keys at once [ok]: MIGRATE with multiple keys must have empty key arg [ok]: XTRIM with ~ MAXLEN can propagate correctly [ok]: Make the old master a replica of the new one and check conditions [ok]: benchmark: set,get [ok]: PSYNC2 #3899 regression: kill chained replica [ok]: Interactive CLI: Parsing quotes [ok]: Non-interactive TTY CLI: Status reply [ok]: Non-interactive TTY CLI: Integer reply [ok]: Non-interactive TTY CLI: Bulk reply [ok]: Non-interactive TTY CLI: Multi-bulk reply [ok]: Non-interactive TTY CLI: Read last argument from pipe [ok]: Non-interactive TTY CLI: Read last argument from file [ok]: Non-interactive non-TTY CLI: Status reply [ok]: corrupt payload: fuzzer findings - stream with non-integer entry id [ok]: Non-interactive non-TTY CLI: Integer reply [ok]: MIGRATE with multiple keys migrate just existing ones [ok]: Non-interactive non-TTY CLI: Bulk reply [ok]: benchmark: full test suite [ok]: Non-interactive non-TTY CLI: Multi-bulk reply [ok]: XADD can CREATE an empty stream [ok]: XSETID can set a specific ID [ok]: XSETID cannot SETID with smaller ID [ok]: XSETID cannot SETID on non-existent key [ok]: Non-interactive non-TTY CLI: ASK redirect test [ok]: Non-interactive non-TTY CLI: Quoted input arguments [ok]: Non-interactive non-TTY CLI: No accidental unquoting of input arguments [ok]: Non-interactive non-TTY CLI: Invalid quoted input arguments [ok]: Detect write load to master [ok]: Non-interactive non-TTY CLI: Read last argument from pipe [ok]: Non-interactive non-TTY CLI: Read last argument from file [ok]: corrupt payload: fuzzer findings - empty quicklist [ok]: benchmark: multi-thread set,get [ok]: benchmark: pipelined full set,get [ok]: MIGRATE with multiple keys: stress command rewriting [ok]: benchmark: arbitrary command [ok]: PSYNC2: generate load while killing replication links [ok]: PSYNC2: cluster is consistent after load (x = 67012) [ok]: PSYNC2: total sum of full synchronizations is exactly 4 [ok]: benchmark: keyspace length [ok]: PSYNC2: --- CYCLE 3 --- [ok]: PSYNC2: [NEW LAYOUT] Set #3 as master [ok]: PSYNC2: Set #2 to replicate from #3 [ok]: PSYNC2: Set #4 to replicate from #3 [ok]: PSYNC2: Set #0 to replicate from #3 [ok]: PSYNC2: Set #1 to replicate from #4 [ok]: PSYNC2: cluster is consistent after failover [ok]: corrupt payload: fuzzer findings - empty zset [ok]: MIGRATE with multiple keys: delete just ack keys [ok]: corrupt payload: fuzzer findings - hash with len of 0 [28/66 done]: integration/redis-benchmark () [ok]: MIGRATE AUTH: correct and wrong password cases [ok]: Pub/Sub PING [ok]: PUBLISH/SUBSCRIBE basics [ok]: PUBLISH/SUBSCRIBE with two clients [ok]: PUBLISH/SUBSCRIBE after UNSUBSCRIBE without arguments [ok]: SUBSCRIBE to one channel more than once [ok]: UNSUBSCRIBE from non-subscribed channels [ok]: PUBLISH/PSUBSCRIBE basics [ok]: PUBLISH/PSUBSCRIBE with two clients [ok]: PUBLISH/PSUBSCRIBE after PUNSUBSCRIBE without arguments [ok]: PubSub messages with CLIENT REPLY OFF [ok]: PUNSUBSCRIBE from non-subscribed channels [ok]: NUMSUB returns numbers, not strings (#1561) [ok]: NUMPATs returns the number of unique patterns [ok]: Mix SUBSCRIBE and PSUBSCRIBE [ok]: PUNSUBSCRIBE and UNSUBSCRIBE should always reply [ok]: Keyspace notifications: we receive keyspace notifications [ok]: Keyspace notifications: we receive keyevent notifications [ok]: Keyspace notifications: we can receive both kind of events [ok]: Keyspace notifications: we are able to mask events [ok]: Keyspace notifications: general events test [ok]: Keyspace notifications: list events test [ok]: Keyspace notifications: set events test [ok]: Keyspace notifications: zset events test [ok]: Keyspace notifications: hash events test [ok]: Empty stream can be rewrite into AOF correctly [ok]: Keyspace notifications: expired events (triggered expire) [ok]: Keyspace notifications: expired events (background expire) [ok]: Keyspace notifications: evicted events [ok]: Keyspace notifications: test CONFIG GET/SET of event flags [ok]: corrupt payload: fuzzer findings - stream double free listpack when insert dup node to rax returns 0 [29/66 done]: unit/dump () [30/66 done]: unit/pubsub () [ok]: SLOWLOG - check that it starts with an empty log [ok]: EVAL - Does Lua interpreter replies to our requests? [ok]: EVAL - Return _G [ok]: EVAL - Return table with a metatable that raise error [ok]: EVAL - Return table with a metatable that raise error [ok]: EVAL - Return table with a metatable that call redis [ok]: EVAL - Lua integer -> Redis protocol type conversion [ok]: EVAL - Lua string -> Redis protocol type conversion [ok]: EVAL - Lua true boolean -> Redis protocol type conversion [ok]: EVAL - Lua false boolean -> Redis protocol type conversion [ok]: EVAL - Lua status code reply -> Redis protocol type conversion [ok]: EVAL - Lua error reply -> Redis protocol type conversion [ok]: EVAL - Lua error reply -> Redis protocol type conversion [ok]: EVAL - Lua table -> Redis protocol type conversion [ok]: EVAL - Are the KEYS and ARGV arrays populated correctly? [ok]: EVAL - is Lua able to call Redis API? [ok]: EVALSHA - Can we call a SHA1 if already defined? [ok]: EVALSHA - Can we call a SHA1 in uppercase? [ok]: EVALSHA - Do we get an error on invalid SHA1? [ok]: EVALSHA - Do we get an error on invalid SHA1? [ok]: EVALSHA - Do we get an error on non defined SHA1? [ok]: EVALSHA - Do we get an error on non defined SHA1? [ok]: EVAL - Redis integer -> Lua type conversion [ok]: EVAL - Redis bulk -> Lua type conversion [ok]: EVAL - Redis multi bulk -> Lua type conversion [ok]: EVAL - Redis status reply -> Lua type conversion [ok]: EVAL - Redis error reply -> Lua type conversion [ok]: EVAL - Redis error reply -> Lua type conversion [ok]: EVAL - Redis nil bulk reply -> Lua type conversion [ok]: EVAL - Is the Lua client using the currently selected DB? [ok]: EVAL - SELECT inside Lua should not affect the caller [ok]: EVAL - Scripts can't run blpop command [ok]: EVAL - Scripts can't run brpop command [ok]: EVAL - Scripts can't run brpoplpush command [ok]: EVAL - Scripts can't run blmove command [ok]: EVAL - Scripts can't run bzpopmin command [ok]: EVAL - Scripts can't run bzpopmax command [ok]: EVAL - Scripts can't run XREAD and XREADGROUP with BLOCK option [ok]: EVAL - Scripts can't run certain commands [ok]: EVAL - No arguments to redis.call/pcall is considered an error [ok]: EVAL - No arguments to redis.call/pcall is considered an error [ok]: EVAL - redis.call variant raises a Lua error on Redis cmd error (1) [ok]: EVAL - redis.call variant raises a Lua error on Redis cmd error (1) [ok]: EVAL - redis.call variant raises a Lua error on Redis cmd error (1) [ok]: EVAL - redis.call variant raises a Lua error on Redis cmd error (1) [ok]: EVAL - redis.call variant raises a Lua error on Redis cmd error (1) [ok]: EVAL - redis.call variant raises a Lua error on Redis cmd error (1) [ok]: EVAL - JSON numeric decoding [ok]: EVAL - JSON string decoding [ok]: EVAL - JSON smoke test [ok]: EVAL - cmsgpack can pack double? [ok]: EVAL - cmsgpack can pack negative int64? [ok]: corrupt payload: fuzzer findings - invalid access in ziplist tail prevlen decoding [31/66 done]: integration/corrupt-dump () [ok]: SLOWLOG - only logs commands taking more time than specified [ok]: SLOWLOG - max entries is correctly handled [ok]: SLOWLOG - GET optional argument to limit output len works [ok]: SLOWLOG - RESET subcommand works [ok]: Without maxmemory small integers are shared [ok]: With maxmemory and non-LRU policy integers are still shared [ok]: With maxmemory and LRU policy integers are not shared [ok]: SLOWLOG - logged entry sanity check [ok]: EVAL - cmsgpack pack/unpack smoke test [ok]: Test replication with blocking lists and sorted sets operations [ok]: EVAL - cmsgpack can pack and unpack circular references? [ok]: EVAL - Numerical sanity check from bitop [ok]: EVAL - Verify minimal bitop functionality [ok]: EVAL - Able to parse trailing comments [ok]: SLOWLOG - Certain commands are omitted that contain sensitive information [ok]: SLOWLOG - Some commands can redact sensitive fields [ok]: SLOWLOG - Rewritten commands are logged as their original command [ok]: SLOWLOG - commands with too many arguments are trimmed [ok]: SLOWLOG - too long arguments are trimmed [ok]: SCRIPTING FLUSH - is able to clear the scripts cache? [ok]: Stream can be rewrite into AOF correctly after XDEL lastid [ok]: SCRIPTING FLUSH ASYNC [ok]: SCRIPT EXISTS - can detect already defined scripts? [ok]: SCRIPT LOAD - is able to register scripts in the scripting cache [ok]: In the context of Lua the output of random commands gets ordered [ok]: SORT is normally not alpha re-ordered for the scripting engine [ok]: SORT BY output gets ordered for scripting [ok]: SORT BY with GET gets ordered for scripting [ok]: redis.sha1hex() implementation [ok]: Globals protection reading an undeclared global variable [ok]: Globals protection setting an undeclared global* [ok]: Test an example script DECR_IF_GT [ok]: Scripting engine resets PRNG at every script execution [ok]: Scripting engine PRNG can be seeded correctly [ok]: SLOWLOG - EXEC is not logged, just executed commands [ok]: EVAL does not leak in the Lua stack [ok]: SLOWLOG - can clean older entries [32/66 done]: integration/block-repl () [ok]: XGROUP HELP should not have unexpected options [ok]: maxmemory - is the memory limit honoured? (policy allkeys-random) [ok]: CLIENT LIST [ok]: CLIENT LIST with IDs [ok]: CLIENT INFO [ok]: CLIENT REPLY OFF/ON: disable all commands reply [ok]: CLIENT REPLY SKIP: skip the next command reply [ok]: CLIENT REPLY ON: unset SKIP flag [ok]: MONITOR can log executed commands [ok]: MONITOR can log commands issued by the scripting engine [33/66 done]: unit/type/stream () [ok]: MONITOR supports redacting command arguments [ok]: MONITOR correctly handles multi-exec cases [ok]: CLIENT GETNAME should return NIL if name is not assigned [ok]: CLIENT LIST shows empty fields for unassigned names [ok]: CLIENT SETNAME does not accept spaces [ok]: CLIENT SETNAME can assign a name to this connection [ok]: CLIENT SETNAME can change the name of an existing connection [ok]: SLOWLOG - can be disabled [ok]: EVAL processes writes from AOF in read-only slaves [ok]: After CLIENT SETNAME, connection can still be closed [34/66 done]: unit/slowlog () [ok]: maxmemory - is the memory limit honoured? (policy allkeys-lru) [ok]: Dumping an RDB [ok]: Replication: commands with many arguments (issue #1221) [ok]: maxmemory - is the memory limit honoured? (policy allkeys-lfu) [ok]: Scan mode [ok]: CONFIG save params special case handled properly [ok]: CONFIG sanity [ok]: test various edge cases of repl topology changes with missing pings at the end [ok]: PSYNC2 #3899 regression: kill first replica [ok]: maxmemory - is the memory limit honoured? (policy volatile-lru) [ok]: Replication of SPOP command -- alsoPropagate() API [ok]: CONFIG REWRITE sanity [ok]: Check if maxclients works refusing connections [35/66 done]: unit/limits () [ok]: PSYNC2 #3899 regression: kill first replica [ok]: maxmemory - is the memory limit honoured? (policy volatile-lfu) [36/66 done]: integration/replication-4 () [ok]: BITCOUNT returns 0 against non existing key [ok]: BITCOUNT returns 0 with out of range indexes [ok]: BITCOUNT returns 0 with negative indexes where start > end [ok]: BITCOUNT against test vector #1 [ok]: BITCOUNT against test vector #2 [ok]: BITCOUNT against test vector #3 [ok]: BITCOUNT against test vector #4 [ok]: BITCOUNT against test vector #5 [ok]: PSYNC2: generate load while killing replication links [ok]: PSYNC2: cluster is consistent after load (x = 94341) [ok]: PSYNC2: total sum of full synchronizations is exactly 4 [ok]: PSYNC2: --- CYCLE 4 --- [ok]: PSYNC2: [NEW LAYOUT] Set #0 as master [ok]: PSYNC2: Set #2 to replicate from #0 [ok]: PSYNC2: Set #3 to replicate from #0 [ok]: PSYNC2: Set #4 to replicate from #3 [ok]: PSYNC2: Set #1 to replicate from #3 [ok]: Connecting as a replica [ok]: maxmemory - is the memory limit honoured? (policy volatile-random) [ok]: BITCOUNT fuzzing without start/end [ok]: CONFIG REWRITE handles save properly [37/66 done]: unit/introspection () [ok]: maxmemory - is the memory limit honoured? (policy volatile-ttl) [ok]: TTL, TYPE and EXISTS do not alter the last access time of a key [ok]: BITCOUNT fuzzing with start/end [ok]: BITCOUNT with start, end [ok]: BITCOUNT syntax error #1 [ok]: BITCOUNT syntax error #1 [ok]: BITCOUNT regression test for github issue #582 [ok]: BITCOUNT misaligned prefix [ok]: BITCOUNT misaligned prefix + full words + remainder [ok]: BITFIELD signed SET and GET basics [ok]: BITOP NOT (empty string) [ok]: BITOP NOT (known string) [ok]: BITOP where dest and target are the same key [ok]: BITFIELD unsigned SET and GET basics [ok]: BITOP AND|OR|XOR don't change the string with single input key [ok]: BITFIELD # form [ok]: BITOP missing key is considered a stream of zero [ok]: BITFIELD basic INCRBY form [ok]: BITOP shorter keys are zero-padded to the key with max length [ok]: BITFIELD chaining of multiple commands [ok]: BITFIELD unsigned overflow wrap [ok]: BITFIELD unsigned overflow sat [ok]: BITFIELD signed overflow wrap [ok]: Piping raw protocol [ok]: BITFIELD signed overflow sat [38/66 done]: integration/redis-cli () [ok]: GEO with wrong type src key [ok]: GEO with non existing src key [ok]: GEO BYLONLAT with empty search [ok]: GEO BYMEMBER with non existing member [ok]: GEOADD create [ok]: GEOADD update [ok]: GEOADD update with CH option [ok]: GEOADD update with NX option [ok]: GEOADD update with XX option [ok]: GEOADD update with CH NX option [ok]: GEOADD update with CH XX option [ok]: GEOADD update with XX NX option will return syntax error [ok]: GEOADD update with XX NX option will return syntax error [ok]: GEOADD update with invalid option [ok]: GEOADD invalid coordinates [ok]: GEOADD multi add [ok]: Check geoset values [ok]: GEORADIUS simple (sorted) [ok]: GEOSEARCH simple (sorted) [ok]: GEOSEARCH FROMLONLAT and FROMMEMBER cannot exist at the same time [ok]: GEOSEARCH FROMLONLAT and FROMMEMBER one must exist [ok]: GEOSEARCH BYRADIUS and BYBOX cannot exist at the same time [ok]: GEOSEARCH BYRADIUS and BYBOX one must exist [ok]: GEOSEARCH with STOREDIST option [ok]: GEORADIUS withdist (sorted) [ok]: GEOSEARCH withdist (sorted) [ok]: GEORADIUS with COUNT [ok]: GEORADIUS with ANY not sorted by default [ok]: GEORADIUS with ANY sorted by ASC [ok]: GEORADIUS with ANY but no COUNT [ok]: GEORADIUS with COUNT but missing integer argument [ok]: GEORADIUS with COUNT DESC [ok]: GEORADIUS HUGE, issue #2767 [ok]: GEORADIUSBYMEMBER simple (sorted) [ok]: GEORADIUSBYMEMBER search areas contain satisfied points in oblique direction [ok]: GEORADIUSBYMEMBER crossing pole search [ok]: GEOSEARCH FROMMEMBER simple (sorted) [ok]: GEOSEARCH vs GEORADIUS [ok]: GEOSEARCH non square, long and narrow [ok]: GEOSEARCH corner point test [ok]: GEORADIUSBYMEMBER withdist (sorted) [ok]: GEOHASH is able to return geohash strings [ok]: GEOPOS simple [ok]: GEOPOS missing element [ok]: GEODIST simple & unit [ok]: GEODIST missing elements [ok]: GEORADIUS STORE option: syntax error [ok]: GEORADIUS STORE option: syntax error [ok]: GEOSEARCHSTORE STORE option: syntax error [ok]: GEOSEARCHSTORE STORE option: syntax error [ok]: GEORANGE STORE option: incompatible options [ok]: GEORANGE STORE option: plain usage [ok]: GEORADIUSBYMEMBER STORE/STOREDIST option: plain usage [ok]: GEOSEARCHSTORE STORE option: plain usage [ok]: GEORANGE STOREDIST option: plain usage [ok]: GEOSEARCHSTORE STOREDIST option: plain usage [ok]: GEORANGE STOREDIST option: COUNT ASC and DESC [ok]: GEOSEARCH the box spans -180° or 180° [ok]: BITFIELD overflow detection fuzzing [ok]: BITOP and fuzzing [ok]: maxmemory - only allkeys-* should remove non-volatile keys (allkeys-random) [ok]: PSYNC2 #3899 regression: kill first replica [ok]: BITFIELD overflow wrap fuzzing [ok]: BITFIELD regression for #3221 [ok]: BITFIELD regression for #3564 [ok]: BITOP or fuzzing [ok]: PSYNC2: cluster is consistent after failover [ok]: BITOP xor fuzzing [ok]: BITOP NOT fuzzing [ok]: BITOP with integer encoded source objects [ok]: BITOP with non string source key [ok]: BITOP with empty string after non empty string (issue #529) [ok]: BITPOS bit=0 with empty key returns 0 [ok]: BITPOS bit=1 with empty key returns -1 [ok]: BITPOS bit=0 with string less than 1 word works [ok]: BITPOS bit=1 with string less than 1 word works [ok]: BITPOS bit=0 starting at unaligned address [ok]: BITPOS bit=1 starting at unaligned address [ok]: BITPOS bit=0 unaligned+full word+reminder [ok]: BITPOS bit=1 unaligned+full word+reminder [ok]: BITPOS bit=1 returns -1 if string is all 0 bits [ok]: BITPOS bit=0 works with intervals [ok]: BITPOS bit=1 works with intervals [ok]: BITPOS bit=0 changes behavior if end is given [ok]: BITFIELD: setup slave [ok]: BITFIELD: write on master, read on slave [ok]: BITFIELD_RO fails when write option is used [ok]: PSYNC2 #3899 regression: kill first replica [ok]: maxmemory - only allkeys-* should remove non-volatile keys (allkeys-lru) [ok]: Client output buffer hard limit is enforced [ok]: PSYNC2 #3899 regression: kill first replica [ok]: EVAL timeout from AOF [ok]: We can call scripts rewriting client->argv from Lua [ok]: Call Redis command with many args from Lua (issue #1764) [ok]: Number conversion precision test (issue #1118) [ok]: String containing number precision test (regression of issue #1118) [ok]: Verify negative arg count is error instead of crash (issue #1842) [ok]: Verify negative arg count is error instead of crash (issue #1842) [ok]: Correct handling of reused argv (issue #1939) [ok]: Functions in the Redis namespace are able to report errors [ok]: Functions in the Redis namespace are able to report errors [ok]: Script with RESP3 map [ok]: Try trick global protection 1 [ok]: Try trick global protection 2 [ok]: Try trick global protection 3 [ok]: Try trick global protection 4 [ok]: Try trick readonly table on redis table [ok]: Try trick readonly table on json table [ok]: Try trick readonly table on cmsgpack table [ok]: Try trick readonly table on bit table [ok]: Test loadfile are not available [ok]: Test dofile are not available [ok]: Test print is available to avoid breaking change [39/66 done]: unit/bitfield () [ok]: BITPOS bit=1 fuzzy testing using SETBIT [ok]: Script return recursive object [ok]: Script check unpack with massive arguments [ok]: BITPOS bit=0 fuzzy testing using SETBIT [ok]: Memory efficiency with values in range 32 [ok]: Chained replicas disconnect when replica re-connect with the same master [ok]: maxmemory - only allkeys-* should remove non-volatile keys (volatile-lru) [ok]: Memory efficiency with values in range 64 [ok]: Timedout read-only scripts can be killed by SCRIPT KILL [ok]: Fuzzer corrupt restore payloads - sanitize_dump: yes [40/66 done]: integration/corrupt-dump-fuzzer () [ok]: Timedout read-only scripts can be killed by SCRIPT KILL even when use pcall [41/66 done]: integration/psync2-pingoff () [ok]: maxmemory - only allkeys-* should remove non-volatile keys (volatile-random) [ok]: Timedout script does not cause a false dead client [ok]: PSYNC2 #3899 regression: kill chained replica [ok]: Memory efficiency with values in range 128 [ok]: Timedout script link is still usable after Lua returns [ok]: BIT pos larger than UINT_MAX [ok]: Test replication partial resync: ok after delay (diskless: no, disabled, reconnect: 1) [ok]: TOUCH alters the last access time of a key [ok]: TOUCH returns the number of existing keys specified [ok]: command stats for GEOADD [ok]: command stats for EXPIRE [ok]: command stats for BRPOP [ok]: command stats for MULTI [ok]: command stats for scripts [ok]: Timedout scripts that modified data can't be killed by SCRIPT KILL [ok]: SHUTDOWN NOSAVE can kill a timedout script anyway [ok]: UNLINK can reclaim memory in background [42/66 done]: unit/bitops () [43/66 done]: unit/introspection-2 () [ok]: Memory efficiency with values in range 1024 [ok]: PSYNC2 #3899 regression: kill first replica [ok]: Test read commands are not blocked by client pause [ok]: Test write commands are paused by RO [ok]: Test special commands are paused by RO [ok]: Test read/admin mutli-execs are not blocked by pause RO [ok]: Test write mutli-execs are blocked by pause RO [ok]: Test scripts are blocked by pause RO [ok]: Test multiple clients can be queued up and unblocked [ok]: Test clients with syntax errors will get responses immediately [ok]: Test clients with syntax errors will get responses immediately [ok]: maxmemory - only allkeys-* should remove non-volatile keys (volatile-ttl) [ok]: Before the replica connects we issue two EVAL commands (scripts replication) [ok]: Setup slave [ok]: FLUSHDB ASYNC can reclaim memory in background [ok]: WAIT should acknowledge 1 additional copy of the data [ok]: Test both active and passive expires are skipped during client pause [ok]: Test that client pause starts at the end of a transaction [ok]: Connect a replica to the master instance (scripts replication) [ok]: PSYNC2 #3899 regression: verify consistency [ok]: Now use EVALSHA against the master, with both SHAs (scripts replication) [ok]: If EVALSHA was replicated as EVAL, 'x' should be '4' (scripts replication) [ok]: Replication of script multiple pushes to list with BLPOP (scripts replication) [ok]: EVALSHA replication when first call is readonly (scripts replication) [ok]: Lua scripts using SELECT are replicated correctly (scripts replication) [44/66 done]: unit/lazyfree () [ok]: Slave should be able to synchronize with the master [ok]: Test when replica paused, offset would not grow [ok]: Test replica offset would grow after unpause [ok]: maxmemory - policy volatile-lru should only remove volatile keys. [ok]: HyperLogLog self test passes [ok]: PFADD without arguments creates an HLL value [ok]: Approximated cardinality after creation is zero [ok]: PFADD returns 1 when at least 1 reg was modified [ok]: PFADD returns 0 when no reg was modified [ok]: PFADD works with empty string (regression) [ok]: PFCOUNT returns approximated cardinality of set [45/66 done]: integration/psync2-reg () [ok]: Before the replica connects we issue two EVAL commands (commands replication) [46/66 done]: unit/pause () [ok]: Connect a replica to the master instance (commands replication) [ok]: Now use EVALSHA against the master, with both SHAs (commands replication) [ok]: If EVALSHA was replicated as EVAL, 'x' should be '4' (commands replication) [ok]: Replication of script multiple pushes to list with BLPOP (commands replication) [ok]: EVALSHA replication when first call is readonly (commands replication) [ok]: Lua scripts using SELECT are replicated correctly (commands replication) [47/66 done]: unit/tls () [48/66 done]: unit/oom-score-adj () [ok]: Clients are able to enable tracking and redirect it [ok]: maxmemory - policy volatile-lfu should only remove volatile keys. [ok]: The other connection is able to get invalidations [ok]: The client is now able to disable tracking [ok]: Clients can enable the BCAST mode with the empty prefix [ok]: The connection gets invalidation messages about all the keys [ok]: Clients can enable the BCAST mode with prefixes [ok]: Adding prefixes to BCAST mode works [ok]: Tracking NOLOOP mode in standard mode works [ok]: Tracking NOLOOP mode in BCAST mode works [ok]: HyperLogLogs are promote from sparse to dense [ok]: WAIT should not acknowledge 2 additional copies of the data [ok]: Memory efficiency with values in range 16384 [ok]: Client output buffer soft limit is enforced if time is overreached [ok]: Client output buffer soft limit is enforced if time is overreached [ok]: Temp rdb will be deleted if we use bg_unlink when shutdown [ok]: Detect write load to master [ok]: Connect a replica to the master instance [ok]: Redis.replicate_commands() must be issued before any write [ok]: Redis.replicate_commands() must be issued before any write (2) [49/66 done]: unit/memefficiency () [ok]: Redis.set_repl() must be issued after replicate_commands() [ok]: Redis.set_repl() don't accept invalid values [ok]: Temp rdb will be deleted in signal handle [ok]: Test selective replication of certain Redis commands from Lua [ok]: PRNG is seeded randomly for command replication [ok]: Using side effects is not a problem with command replication [ok]: maxmemory - policy volatile-random should only remove volatile keys. [50/66 done]: unit/shutdown () [ok]: CONFIG SET port number [ok]: Tracking gets notification of expired keys [ok]: Tracking gets notification of lazy expired keys [ok]: HELLO 3 reply is correct [ok]: HELLO without protover [ok]: RESP3 based basic invalidation [ok]: RESP3 tracking redirection [ok]: Invalidations of previous keys can be redirected after switching to RESP3 [ok]: Invalidations of new keys can be redirected after switching to RESP3 [ok]: Invalid keys should not be tracked for scripts in NOLOOP mode [ok]: RESP3 Client gets tracking-redir-broken push message after cached key changed when rediretion client is terminated [ok]: Different clients can redirect to the same connection [ok]: Different clients using different protocols can track the same key [ok]: No invalidation message when using OPTIN option [ok]: Invalidation message sent when using OPTIN option with CLIENT CACHING yes [ok]: Invalidation message sent when using OPTOUT option [ok]: No invalidation message when using OPTOUT option with CLIENT CACHING no [ok]: Able to redirect to a RESP3 client [ok]: After switching from normal tracking to BCAST mode, no invalidation message is produced for pre-BCAST keys [ok]: BCAST with prefix collisions throw errors [ok]: BCAST with prefix collisions throw errors [ok]: hdel deliver invlidate message after response in the same connection [ok]: maxmemory - policy volatile-ttl should only remove volatile keys. [ok]: CONFIG SET bind address [51/66 done]: unit/networking () [ok]: Tracking invalidation message is not interleaved with multiple keys response [ok]: Tracking invalidation message is not interleaved with transaction response [ok]: Tracking invalidation message of eviction keys should be before response [ok]: Unblocked BLMOVE gets notification after response [ok]: Test scripting debug protocol parsing [ok]: Tracking gets notification on tracking table key eviction [ok]: Invalidation message received for flushall [ok]: Invalidation message received for flushdb [ok]: Test ASYNC flushall [ok]: flushdb tracking invalidation message is not interleaved with transaction response [52/66 done]: unit/scripting () [ok]: HyperLogLog sparse encoding stress test [ok]: Corrupted sparse HyperLogLogs are detected: Additional at tail [ok]: Corrupted sparse HyperLogLogs are detected: Broken magic [ok]: Corrupted sparse HyperLogLogs are detected: Invalid encoding [ok]: Corrupted dense HyperLogLogs are detected: Wrong length [ok]: WAIT should not acknowledge 1 additional copy if slave is blocked [ok]: Server is able to evacuate enough keys when num of keys surpasses limit by more than defined initial effort [ok]: Tracking info is correct [ok]: CLIENT GETREDIR provides correct client id [ok]: CLIENT TRACKINGINFO provides reasonable results when tracking off [ok]: CLIENT TRACKINGINFO provides reasonable results when tracking on [ok]: CLIENT TRACKINGINFO provides reasonable results when tracking on with options [ok]: CLIENT TRACKINGINFO provides reasonable results when tracking optin [ok]: CLIENT TRACKINGINFO provides reasonable results when tracking optout [ok]: CLIENT TRACKINGINFO provides reasonable results when tracking bcast mode [ok]: CLIENT TRACKINGINFO provides reasonable results when tracking redir broken [ok]: Regression test for #11715 [ok]: RESP3 based basic invalidation with client reply off [ok]: RESP2 based basic invalidation with client reply off [ok]: RESP3 based basic redirect invalidation with client reply off [ok]: RESP3 based basic tracking-redir-broken with client reply off [53/66 done]: unit/tracking () [ok]: PSYNC2: generate load while killing replication links [ok]: PSYNC2: cluster is consistent after load (x = 134939) [ok]: PSYNC2: total sum of full synchronizations is exactly 4 [ok]: PSYNC2: --- CYCLE 5 --- [ok]: PSYNC2: [NEW LAYOUT] Set #1 as master [ok]: PSYNC2: Set #2 to replicate from #1 [ok]: PSYNC2: Set #4 to replicate from #2 [ok]: PSYNC2: Set #0 to replicate from #1 [ok]: PSYNC2: Set #3 to replicate from #0 [ok]: WAIT implicitly blocks on client pause since ACKs aren't sent [ok]: PSYNC2: cluster is consistent after failover [54/66 done]: unit/wait () [ok]: Create 3 node cluster [ok]: Run blocking command on cluster node3 [ok]: Perform a Resharding [ok]: Verify command got unblocked after resharding [ok]: Wait for cluster to be stable [ok]: Sanity test push cmd after resharding [ok]: Run blocking command again on cluster node1 [ok]: Kill a cluster node and wait for fail state [ok]: Verify command got unblocked after cluster failure [55/66 done]: unit/cluster () [ok]: pending querybuf: check size of pending_querybuf after set a big value [56/66 done]: unit/pendingquerybuf () [ok]: Client output buffer soft limit is not enforced too early and is enforced when no traffic [ok]: No response for single command if client output buffer hard limit is enforced [ok]: MASTER and SLAVE consistency with EVALSHA replication [ok]: Connect multiple replicas at the same time (issue #141), master diskless=no, replica diskless=disabled [ok]: No response for multi commands in pipeline if client output buffer limit is enforced [ok]: Execute transactions completely even if client output buffer limit is enforced [ok]: Obuf limit, HRANDFIELD with huge count stopped mid-run [57/66 done]: unit/obuf-limits () [ok]: SLAVE can reload "lua" AUX RDB fields of duplicated scripts [58/66 done]: integration/replication-3 () [ok]: PSYNC2: generate load while killing replication links [ok]: PSYNC2: cluster is consistent after load (x = 205582) [ok]: PSYNC2: total sum of full synchronizations is exactly 4 [ok]: PSYNC2: --- CYCLE 6 --- [ok]: PSYNC2: [NEW LAYOUT] Set #3 as master [ok]: PSYNC2: Set #1 to replicate from #3 [ok]: PSYNC2: Set #4 to replicate from #1 [ok]: PSYNC2: Set #2 to replicate from #3 [ok]: PSYNC2: Set #0 to replicate from #1 [ok]: Fuzzing dense/sparse encoding: Redis should always detect errors [ok]: Fuzzing dense/sparse encoding: Redis should always detect errors [ok]: PFADD, PFCOUNT, PFMERGE type checking works [ok]: PFMERGE results on the cardinality of union of sets [ok]: PSYNC2: cluster is consistent after failover [ok]: Test replication partial resync: backlog expired (diskless: no, disabled, reconnect: 1) [ok]: Slave should be able to synchronize with the master [ok]: client freed during loading [59/66 done]: integration/rdb () [ok]: Detect write load to master [ok]: Test replication partial resync: no reconnection, just sync (diskless: no, swapdb, reconnect: 0) [ok]: Slave should be able to synchronize with the master [ok]: Detect write load to master [ok]: slave buffer are counted correctly [ok]: PSYNC2: generate load while killing replication links [ok]: PSYNC2: cluster is consistent after load (x = 261890) [ok]: PSYNC2: total sum of full synchronizations is exactly 4 [ok]: PSYNC2: --- CYCLE 7 --- [ok]: PSYNC2: [NEW LAYOUT] Set #2 as master [ok]: PSYNC2: Set #0 to replicate from #2 [ok]: PSYNC2: Set #3 to replicate from #0 [ok]: PSYNC2: Set #4 to replicate from #3 [ok]: PSYNC2: Set #1 to replicate from #0 [ok]: PSYNC2: cluster is consistent after failover [ok]: PFCOUNT multiple-keys merge returns cardinality of union #1 [ok]: PFCOUNT multiple-keys merge returns cardinality of union #2 [ok]: PFDEBUG GETREG returns the HyperLogLog raw registers [ok]: PFADD / PFCOUNT cache invalidation works [ok]: GEOSEARCH fuzzy test - byradius [60/66 done]: unit/hyperloglog () [ok]: Test replication partial resync: ok psync (diskless: no, swapdb, reconnect: 1) [ok]: PSYNC2: generate load while killing replication links [ok]: PSYNC2: cluster is consistent after load (x = 326007) [ok]: PSYNC2: total sum of full synchronizations is exactly 4 [ok]: Slave should be able to synchronize with the master [ok]: Detect write load to master [ok]: PSYNC2: Bring the master back again for next test [ok]: replica buffer don't induce eviction [ok]: PSYNC2: Partial resync after restart using RDB aux fields [ok]: Don't rehash if used memory exceeds maxmemory after rehash [ok]: AOF rewrite during write load: RDB preamble=no [ok]: PSYNC2: Replica RDB restart with EVALSHA in backlog issue #4483 [61/66 done]: integration/psync2 () [ok]: client tracking don't cause eviction feedback loop [62/66 done]: unit/maxmemory () [ok]: Turning off AOF kills the background writing child if any [ok]: AOF rewrite of list with quicklist encoding, string data [ok]: AOF rewrite of list with quicklist encoding, int data [ok]: Test replication partial resync: no backlog (diskless: no, swapdb, reconnect: 1) [ok]: Slave should be able to synchronize with the master [ok]: Detect write load to master [ok]: AOF rewrite of set with intset encoding, string data [ok]: AOF rewrite of set with hashtable encoding, string data [ok]: Connect multiple replicas at the same time (issue #141), master diskless=no, replica diskless=swapdb [ok]: AOF rewrite of set with intset encoding, int data [ok]: GEOSEARCH fuzzy test - bybox [ok]: GEOSEARCH box edges fuzzy test [63/66 done]: north () [ok]: AOF rewrite of set with hashtable encoding, int data [ok]: AOF rewrite of hash with ziplist encoding, string data [ok]: AOF rewrite of hash with hashtable encoding, string data [ok]: AOF rewrite of hash with ziplist encoding, int data [ok]: AOF rewrite of hash with hashtable encoding, int data [ok]: AOF rewrite of zset with ziplist encoding, string data [ok]: Test replication partial resync: ok after delay (diskless: no, swapdb, reconnect: 1) [ok]: AOF rewrite of zset with skiplist encoding, string data [ok]: Slave should be able to synchronize with the master [ok]: Detect write load to master [ok]: AOF rewrite of zset with ziplist encoding, int data [ok]: AOF rewrite of zset with skiplist encoding, int data [ok]: BGREWRITEAOF is delayed if BGSAVE is in progress [ok]: BGREWRITEAOF is refused if already in progress [64/66 done]: unit/aofrw () [ok]: Test replication partial resync: backlog expired (diskless: no, swapdb, reconnect: 1) [ok]: Slave should be able to synchronize with the master [ok]: Detect write load to master [ok]: Test replication partial resync: no reconnection, just sync (diskless: yes, disabled, reconnect: 0) [ok]: Slave should be able to synchronize with the master [ok]: Detect write load to master [ok]: Test replication partial resync: ok psync (diskless: yes, disabled, reconnect: 1) [ok]: Connect multiple replicas at the same time (issue #141), master diskless=yes, replica diskless=disabled [ok]: Slave should be able to synchronize with the master [ok]: Detect write load to master [ok]: Test replication partial resync: no backlog (diskless: yes, disabled, reconnect: 1) [ok]: Slave should be able to synchronize with the master [ok]: Detect write load to master [ok]: Test replication partial resync: ok after delay (diskless: yes, disabled, reconnect: 1) [ok]: Slave should be able to synchronize with the master [ok]: Detect write load to master [ok]: Connect multiple replicas at the same time (issue #141), master diskless=yes, replica diskless=swapdb [ok]: Test replication partial resync: backlog expired (diskless: yes, disabled, reconnect: 1) [ok]: Slave should be able to synchronize with the master [ok]: Detect write load to master [ok]: Test replication partial resync: no reconnection, just sync (diskless: yes, swapdb, reconnect: 0) [ok]: Slave should be able to synchronize with the master [ok]: Detect write load to master [ok]: Test replication partial resync: ok psync (diskless: yes, swapdb, reconnect: 1) [ok]: Slave should be able to synchronize with the master [ok]: Detect write load to master [ok]: Test replication partial resync: no backlog (diskless: yes, swapdb, reconnect: 1) [ok]: Master stream is correctly processed while the replica has a script in -BUSY state [ok]: Slave should be able to synchronize with the master [ok]: Detect write load to master [ok]: slave fails full sync and diskless load swapdb recovers it [ok]: diskless loading short read [ok]: Test replication partial resync: ok after delay (diskless: yes, swapdb, reconnect: 1) [ok]: Slave should be able to synchronize with the master [ok]: Detect write load to master [ok]: Test replication partial resync: backlog expired (diskless: yes, swapdb, reconnect: 1) [65/66 done]: integration/replication-psync () [ok]: diskless no replicas drop during rdb pipe [ok]: diskless slow replicas drop during rdb pipe [ok]: diskless fast replicas drop during rdb pipe [ok]: diskless all replicas drop during rdb pipe [ok]: diskless timeout replicas drop during rdb pipe [ok]: diskless replication child being killed is collected [ok]: replication child dies when parent is killed - diskless: yes [ok]: replication child dies when parent is killed - diskless: no [ok]: diskless replication read pipe cleanup [ok]: replicaof right after disconnection [ok]: Kill rdb child process if its dumping RDB is not useful [66/66 done]: integration/replication () [66/66 done]: defrag () \o/ All tests passed without errors!