Skip to content

Redis Test Suite

FrogDB maintains a comprehensive port of the Redis 8.6.0 regression test suite. Every ported test runs on every commit. This page documents which upstream tests were intentionally excluded and why — generated directly from the source code so it’s always in sync.

2,232 Ported Tests
558 Intentional Exclusions
1 Broken Tests
Redis 8.6.0 Upstream Version

Ported tests are Rust #[tokio::test] functions that mirror the upstream Redis TCL tests. Intentional exclusions are upstream tests that were deliberately not ported, with documented reasons. Broken tests (#[ignore]) indicate regressions that need fixing.

Each excluded test is tagged with a category explaining why it was not ported.

Category Description Count
Redis-Specific Internals Tests that exercise Redis-internal implementation details (allocator, object encoding, event loop) that don't apply to FrogDB's architecture. 218
Encoding Differences Tests that assert specific internal encoding types (ziplist, listpack, intset) which FrogDB does not use. 101
Observability Differences Tests for Redis-specific INFO fields, stats, or monitoring behavior that FrogDB reports differently or doesn't expose. 67
Configuration Differences Tests relying on Redis-specific configuration mechanisms (redis.conf, ACL files, CONFIG REWRITE) that FrogDB replaces with TOML config. 40
Tested Elsewhere Functionality covered by other FrogDB tests (fuzz tests, integration tests, or different regression suites). 37
Replication Differences Tests for Redis replication internals (SLAVEOF, replica propagation) that differ in FrogDB's Raft-based replication. 23
Persistence Differences Tests for RDB/AOF persistence mechanisms that FrogDB replaces with RocksDB-backed storage. 12
Cluster Differences Tests for Redis Cluster gossip-protocol internals that differ in FrogDB's Raft-based clustering. 11
Single Database Tests requiring SELECT/multi-DB support, which FrogDB intentionally limits to a single database. 10
DEBUG Command Tests requiring the Redis DEBUG command, which is not exposed in FrogDB. 9
Protocol Differences Tests for RESP3/HELLO protocol negotiation or protocol-level behaviors that FrogDB handles differently. 9
Needs:Repl 8
Scripting Differences Tests for Redis Lua 5.1 scripting quirks or redis.* API details that differ in FrogDB's Lua 5.4 environment. 7
CLI Differences Tests requiring the redis-cli binary or CLI-specific features. 5
Architecture:Scripting Pubsub 1

Commands with at least one excluded test, showing how many tests are ported vs. excluded per command.

Command Test Suites Ported Tests Excluded Tests
ACL acl_regression.rs, acl_tcl.rs, acl_v2_regression.rs, violations_tcl.rs 95 14
BITCOUNT bitops_regression.rs, bitops_tcl.rs 44 8
BITOP bitops_regression.rs, bitops_tcl.rs 44 8
BITPOS bitops_regression.rs, bitops_tcl.rs 44 8
CLIENT client_eviction_tcl.rs, introspection2_tcl.rs, introspection_tcl.rs, networking_tcl.rs, querybuf_tcl.rs, replybufsize_tcl.rs 104 35
CONFIG introspection2_tcl.rs, introspection_tcl.rs 84 18
DBSIZE keyspace_tcl.rs 36 4
DEBUG introspection_tcl.rs 51 18
DECR incr_tcl.rs 27 3
DECRBY incr_tcl.rs 27 3
DISCARD multi_tcl.rs 34 14
DUMP dump_regression.rs, dump_tcl.rs 14 15
ECHO protocol_tcl.rs 23 6
EVAL cluster_scripting_regression.rs, cluster_scripting_tcl.rs, scripting_tcl.rs 117 24
EVALSHA cluster_scripting_regression.rs, cluster_scripting_tcl.rs, scripting_tcl.rs 117 24
EXEC multi_tcl.rs 34 14
EXPIRE expire_regression.rs, expire_tcl.rs 63 6
FLUSHDB lazyfree_tcl.rs 9 1
FUNCTION functions_regression.rs, functions_tcl.rs 83 3
GEOADD geo_tcl.rs 61 2
GEODIST geo_tcl.rs 61 2
GEOSEARCH geo_tcl.rs 61 2
GET string_tcl.rs 124 16
HDEL hash_tcl.rs 53 23
HGET hash_tcl.rs 53 23
HGETALL hash_tcl.rs 53 23
HOTKEYS hotkeys_tcl.rs 38 6
HSCAN scan_tcl.rs 25 3
HSET hash_tcl.rs 53 23
INCR incr_tcl.rs 27 3
INCRBY incr_tcl.rs 27 3
INFO info_keysizes_tcl.rs, info_regression.rs, info_tcl.rs 40 49
KEYS keyspace_tcl.rs 36 4
LATENCY latency_monitor_tcl.rs 1 15
LLEN list_tcl.rs 106 36
LPOP list_tcl.rs 106 36
LPUSH list_tcl.rs 106 36
LRANGE list_tcl.rs 106 36
MAXMEMORY maxmemory_regression.rs, maxmemory_tcl.rs 38 10
MEMORY memefficiency_tcl.rs 0 12
MGET string_tcl.rs 124 16
MSET string_tcl.rs 124 16
MULTI multi_tcl.rs 34 14
OBJECT other_tcl.rs 8 33
PERSIST expire_tcl.rs 58 6
PEXPIRE expire_tcl.rs 58 6
PFADD hyperloglog_tcl.rs 14 16
PFCOUNT hyperloglog_tcl.rs 14 16
PFMERGE hyperloglog_tcl.rs 14 16
PING protocol_tcl.rs 23 6
PUBLISH pubsub_regression.rs, pubsub_tcl.rs 24 26
RESTORE dump_regression.rs, dump_tcl.rs 14 15
RPOP list_tcl.rs 106 36
RPUSH list_tcl.rs 106 36
SADD set_tcl.rs 47 13
SCAN scan_tcl.rs 25 3
SCARD set_tcl.rs 47 13
SCRIPT scripting_tcl.rs 108 24
SELECT keyspace_tcl.rs 36 4
SET string_tcl.rs 124 16
SETEX string_tcl.rs 124 16
SETNX string_tcl.rs 124 16
SLOWLOG slowlog_tcl.rs 13 5
SMEMBERS set_tcl.rs 47 13
SORT sort_tcl.rs 33 3
SREM set_tcl.rs 47 13
SSCAN scan_tcl.rs 25 3
SUBSCRIBE pubsub_regression.rs, pubsub_tcl.rs 24 26
TTL expire_regression.rs, expire_tcl.rs 63 6
TYPE other_tcl.rs 8 33
UNLINK lazyfree_tcl.rs 9 1
WATCH multi_tcl.rs 34 14
XACK stream_cgroups_tcl.rs 50 37
XADD event_sourcing_regression.rs, stream_regression.rs, stream_tcl.rs 93 81
XCLAIM stream_cgroups_tcl.rs 50 37
XGROUP stream_cgroups_tcl.rs 50 37
XLEN stream_regression.rs, stream_tcl.rs 69 81
XRANGE stream_regression.rs, stream_tcl.rs 69 81
XREAD event_sourcing_regression.rs, stream_tcl.rs 84 81
XREADGROUP stream_cgroups_tcl.rs 50 37
XTRIM stream_tcl.rs 60 81
ZADD zset_tcl.rs 104 39
ZRANGE zset_tcl.rs 104 39
ZRANK zset_tcl.rs 104 39
ZREM zset_tcl.rs 104 39
ZSCAN scan_tcl.rs 25 3
ZSCORE zset_tcl.rs 104 39

Expand a suite to see the full list of excluded tests with reasons.

acl_tcl.rs — 81 tests, 8 exclusions
Excluded TestCategoryReason
ACL LOAD only disconnects affected clientsConfiguration DifferencesRedis-internal feature (ACL file)
ACL LOAD disconnects affected subscriberConfiguration DifferencesRedis-internal feature (ACL file)
ACL load and saveConfiguration DifferencesRedis-internal feature (ACL file)
ACL load on replica when connected to replicaConfiguration DifferencesRedis-internal feature (ACL file)
Test loading duplicate users in config on startupConfiguration DifferencesRedis-internal feature (ACL file)
First server should have role slave after SLAVEOFReplication Differencesneeds:repl
Alice: can execute all commandRedis-Specific InternalsRedis-internal session-state ordering
Test behavior of loading ACLsConfiguration DifferencesACL v2 selectors removed (8121bfee)
bitops_tcl.rs — 40 tests, 8 exclusions
Excluded TestCategoryReason
BITOP $op fuzzingTested Elsewherefuzzing/stress
BITOP NOT fuzzingTested Elsewherefuzzing/stress
BITPOS bit=1 fuzzy testing using SETBITTested Elsewherefuzzing/stress
BITPOS bit=0 fuzzy testing using SETBITTested Elsewherefuzzing/stress
BITPOS/BITCOUNT fuzzy testing using SETBITTested Elsewherefuzzing/stress
SETBIT/BITFIELD only increase dirty when the value changedRedis-Specific InternalsRedis-internal stat (dirty counter)
BIT pos larger than UINT_MAXTested Elsewherelarge-memory
SETBIT values larger than UINT32_MAX and lzf_compress/lzf_decompress correctlyTested Elsewherelarge-memory + needs:debug
dump_tcl.rs — 9 tests, 15 exclusions
Excluded TestCategoryReason
MIGRATE is caching connectionsRedis-Specific InternalsRedis-internal feature
MIGRATE cached connections are released after some timeRedis-Specific InternalsRedis-internal feature
MIGRATE is able to migrate a key between two instancesRedis-Specific InternalsRedis-internal feature
MIGRATE is able to copy a key between two instancesRedis-Specific InternalsRedis-internal feature
MIGRATE will not overwrite existing keys, unless REPLACE is usedRedis-Specific InternalsRedis-internal feature
MIGRATE propagates TTL correctlyRedis-Specific InternalsRedis-internal feature
MIGRATE can correctly transfer large valuesRedis-Specific InternalsRedis-internal feature
MIGRATE can correctly transfer hashesRedis-Specific InternalsRedis-internal feature
MIGRATE timeout actually worksRedis-Specific InternalsRedis-internal feature
MIGRATE can migrate multiple keys at onceRedis-Specific InternalsRedis-internal feature
MIGRATE with multiple keys must have empty key argRedis-Specific InternalsRedis-internal feature
MIGRATE with multiple keys migrate just existing onesRedis-Specific InternalsRedis-internal feature
MIGRATE with multiple keys: stress command rewritingRedis-Specific InternalsRedis-internal feature
MIGRATE with multiple keys: delete just ack keysRedis-Specific InternalsRedis-internal feature
MIGRATE AUTH: correct and wrong password casesRedis-Specific InternalsRedis-internal feature
expire_tcl.rs — 58 tests, 6 exclusions
Excluded TestCategoryReason
All TTL in commands are propagated as absolute timestamp in replication streamReplication Differencesreplication-internal
GETEX propagate as to replica as PERSIST, DEL, or nothingReplication Differencesreplication-internal
Redis should not propagate the read command on lazy expireReplication Differencesreplication-internal
SCAN: Lazy-expire should not be wrapped in MULTI/EXECReplication Differencesreplication-internal
RANDOMKEY: Lazy-expire should not be wrapped in MULTI/EXECReplication Differencesreplication-internal
expire scan should skip dictionaries with lot's of empty bucketsRedis-Specific InternalsRedis-internal expire scan
functions_tcl.rs — 78 tests, 3 exclusions
Excluded TestCategoryReason
FUNCTION - test debug reload different optionsDEBUG Commandneeds:debug
FUNCTION - test debug reload with nosave and noflushDEBUG Commandneeds:debug
FUNCTION - allow staleReplication Differencesneeds:repl
geo_tcl.rs — 61 tests, 2 exclusions
Excluded TestCategoryReason
GEOSEARCH fuzzy test - $typeTested Elsewherefuzzing/stress
GEOSEARCH box edges fuzzy testTested Elsewherefuzzing/stress
hash_tcl.rs — 53 tests, 23 exclusions
Excluded TestCategoryReason
Is the small hash encoded with a listpack?Encoding Differencesinternal-encoding
Is the big hash encoded with an hash table?Encoding Differencesinternal-encoding
Is a ziplist encoded Hash promoted on big payload?Encoding Differencesinternal-encoding
HGET against the small hashEncoding Differencesinternal-encoding
HGET against the big hashEncoding Differencesinternal-encoding
HMSET - small hashEncoding Differencesinternal-encoding
HMSET - big hashEncoding Differencesinternal-encoding
HMGET - small hashEncoding Differencesinternal-encoding
HMGET - big hashEncoding Differencesinternal-encoding
HKEYS - small hashEncoding Differencesinternal-encoding
HKEYS - big hashEncoding Differencesinternal-encoding
HVALS - small hashEncoding Differencesinternal-encoding
HVALS - big hashEncoding Differencesinternal-encoding
HGETALL - small hashEncoding Differencesinternal-encoding
HGETALL - big hashEncoding Differencesinternal-encoding
HSTRLEN against the small hashEncoding Differencesinternal-encoding
HSTRLEN against the big hashEncoding Differencesinternal-encoding
HRANDFIELD - $typeEncoding Differencesinternal-encoding
Stress test the hash ziplist -> hashtable encoding conversionEncoding Differencesinternal-encoding
Hash ziplist of various encodingsEncoding Differencesinternal-encoding
Hash ziplist of various encodings - sanitize dumpEncoding Differencesinternal-encoding
HRANDFIELD with RESP3Protocol DifferencesRESP3-only
KEYS command return expired keys when allow_access_expired is 1Configuration DifferencesRedis-internal config flag
hotkeys_tcl.rs — 38 tests, 6 exclusions
Excluded TestCategoryReason
HOTKEYS START - with SLOTS parameter in cluster modeObservability Differencesrequires multi-node cluster
HOTKEYS GET - selected-slots returns node's slot ranges when no SLOTS specified in cluster modeObservability Differencesrequires multi-node cluster
HOTKEYS START - Error: slot not handled by this nodeObservability Differencesrequires multi-node cluster
HOTKEYS GET - selected-slots returns each node's slot ranges in multi-node clusterObservability Differencesrequires multi-node cluster
HOTKEYS - tracks only keys in selected slotsObservability Differencesrequires cluster mode SLOTS parameter
HOTKEYS - multiple selected slotsObservability Differencesrequires cluster mode SLOTS parameter
hyperloglog_tcl.rs — 14 tests, 16 exclusions
Excluded TestCategoryReason
HyperLogLog self test passesRedis-Specific InternalsRedis-internal HLL self-test
HyperLogLogs are promote from sparse to denseEncoding Differencesinternal-encoding (HLL)
Change hll-sparse-max-bytesEncoding Differencesinternal-encoding (HLL)
Hyperloglog promote to dense well in different hll-sparse-max-bytesEncoding Differencesinternal-encoding (HLL)
HyperLogLog sparse encoding stress testTested Elsewhereinternal-encoding (HLL) + stress
PFMERGE results with simdRedis-Specific InternalsRedis-internal SIMD path
PFDEBUG GETREG returns the HyperLogLog raw registersDEBUG Commandneeds:debug (PFDEBUG)
PFADD / PFCOUNT cache invalidation worksEncoding Differencesinternal-encoding (HLL)
Corrupted sparse HyperLogLogs are detected: Additional at tailEncoding Differencesinternal-encoding (HLL)
Corrupted sparse HyperLogLogs are detected: Broken magicEncoding Differencesinternal-encoding (HLL)
Corrupted sparse HyperLogLogs are detected: Invalid encodingEncoding Differencesinternal-encoding (HLL)
Corrupted dense HyperLogLogs are detected: Wrong lengthEncoding Differencesinternal-encoding (HLL)
Corrupted sparse HyperLogLogs doesn't cause overflow and out-of-bounds with XZERO opcodeEncoding Differencesinternal-encoding (HLL)
Corrupted sparse HyperLogLogs doesn't cause overflow and out-of-bounds with ZERO opcodeEncoding Differencesinternal-encoding (HLL)
Fuzzing dense/sparse encoding: Redis should always detect errorsTested Elsewhereinternal-encoding (HLL) + fuzzing
PFADD with 2GB entry should not crash server due to overflow in MurmurHash64ATested Elsewherelarge-memory
incr_tcl.rs — 27 tests, 3 exclusions
Excluded TestCategoryReason
INCR does not use shared objectsRedis-Specific InternalsRedis-internal object model
INCR can modify objects in-placeRedis-Specific InternalsRedis-internal object model
$cmd operation should update encoding from raw to intEncoding Differencesinternal-encoding
info_keysizes_tcl.rs — 34 tests, 21 exclusions
Excluded TestCategoryReason
KEYSIZES - Test i'th bin counts keysizes between (2^i) and (2^(i+1)-1) as expected $suffixReplObservability Differencesneeds:repl — replication keysizes not yet implemented
KEYSIZES - Histogram values of Bytes, Kilo and Mega $suffixReplObservability Differencesneeds:repl — replication keysizes not yet implemented
KEYSIZES - Test hyperloglog $suffixReplObservability Differencesneeds:repl — replication keysizes not yet implemented
KEYSIZES - Test List $suffixReplObservability Differencesneeds:repl — replication keysizes not yet implemented
KEYSIZES - Test SET $suffixReplObservability Differencesneeds:repl — replication keysizes not yet implemented
KEYSIZES - Test ZSET $suffixReplObservability Differencesneeds:repl — replication keysizes not yet implemented
KEYSIZES - Test STRING $suffixReplObservability Differencesneeds:repl — replication keysizes not yet implemented
KEYSIZES - Test complex dataset $suffixReplObservability Differencesneeds:repl — replication keysizes not yet implemented
KEYSIZES - Test HASH ($type) $suffixReplObservability Differencesneeds:repl — replication keysizes not yet implemented
KEYSIZES - Test Hash field lazy expiration ($type) $suffixReplObservability Differencesneeds:repl — replication keysizes not yet implemented
KEYSIZES - Test STRING BITS $suffixReplObservability Differencesneeds:repl — replication keysizes not yet implemented
KEYSIZES - Test RESTORE $suffixReplObservability Differencesneeds:repl — replication keysizes not yet implemented
KEYSIZES - Test RENAME $suffixReplObservability Differencesneeds:repl — replication keysizes not yet implemented
KEYSIZES - Test MOVE $suffixReplObservability DifferencesMOVE (singledb) not implemented in FrogDB
KEYSIZES - Test SWAPDB $suffixReplObservability DifferencesSWAPDB (singledb) not implemented in FrogDB
KEYSIZES - DEBUG RELOAD reset keysizes $suffixReplPersistence DifferencesDEBUG RELOAD not implemented in FrogDB
KEYSIZES - Test RDB $suffixReplObservability Differencesneeds:repl — replication keysizes not yet implemented
KEY-MEMORY-STATS - Replication updates key memory stats on replicaObservability Differencesneeds:repl — replication + key-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS - DEL on primary updates key memory stats on replicaObservability Differencesneeds:repl — replication + key-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS - DEBUG RELOAD preserves key memory histogramObservability DifferencesDEBUG RELOAD not implemented in FrogDB
KEY-MEMORY-STATS - RDB save and restart preserves key memory histogramObservability DifferencesRDB save/restart not yet implemented
info_regression.rs — 6 tests, 1 exclusions
Excluded TestCategoryReason
Verify that LUT overhead is properly updated when dicts are emptied or reused (issue #13973)Redis-Specific InternalsRedis-internal dict/LUT overhead accounting
info_tcl.rs — 0 tests, 27 exclusions
Excluded TestCategoryReason
stats: eventloop metricsRedis-Specific InternalsRedis single-threaded event loop cycle tracking
stats: instantaneous metricsRedis-Specific InternalsRedis event loop instantaneous sampling
stats: debug metricsRedis-Specific InternalsRedis DEBUG info section (AOF/cron duration sums)
stats: client input and output buffer limit disconnectionsRedis-Specific InternalsRedis buffer limit stats; also needs DEBUG
memory: database and pubsub overhead and rehashing dict countRedis-Specific InternalsRedis dict/rehashing internals (MEMORY STATS)
memory: used_memory_peak_time is updated when used_memory_peak is updatedRedis-Specific InternalsRedis-specific peak timestamp tracking
Verify that LUT overhead is properly updated when dicts are emptied or reusedCluster Differencescluster-specific Redis dict internals
errorstats: limit errors will not increase indefinitelyObservability DifferencesRedis-internal 128-error-type cap behavior
errorstats: blocking commandsObservability DifferencesCLIENT UNBLOCK error type tracking (UNBLOCKED error prefix)
latencystats: disable/enableObservability DifferencesCONFIG SET latency-tracking yes/no, p50/p99/p99.9 output
latencystats: configure percentilesObservability DifferencesCONFIG SET latency-tracking-info-percentiles
latencystats: bad configure percentilesObservability Differencesconfig validation (non-numeric, >100)
latencystats: blocking commandsObservability Differenceslatency tracking for BLPOP and similar
latencystats: subcommandsObservability Differencesper-subcommand latency (CLIENT|ID, CONFIG|SET)
latencystats: measure latencyObservability Differencesverify latency magnitude (also needs:debug)
errorstats: failed call authentication errorObservability DifferencesAUTH failure → errorstat ERR count=1
errorstats: failed call within MULTI/EXECObservability Differenceserror tracking across transactions
errorstats: failed call within LUAObservability Differenceserror tracking in EVAL/pcall
errorstats: failed call NOSCRIPT errorObservability DifferencesEVALSHA → errorstat NOSCRIPT
errorstats: failed call NOGROUP errorObservability DifferencesXGROUP CREATECONSUMER → errorstat NOGROUP
errorstats: rejected call unknown commandObservability Differencesunknown command → errorstat ERR
errorstats: rejected call within MULTI/EXECObservability Differencesarity error in MULTI queuing
errorstats: rejected call due to wrong arityObservability Differenceswrong arg count → rejected_calls=1
errorstats: rejected call by OOM errorObservability Differencesmaxmemory → errorstat OOM, rejected_calls=1
errorstats: rejected call by authorization errorObservability DifferencesACL → errorstat NOPERM, rejected_calls=1
clients: pubsub clientsObservability Differencespubsub_clients count in INFO clients section
clients: watching clientsObservability Differenceswatching_clients, total_watched_keys in INFO clients; watch=N in CLIENT INFO
introspection_tcl.rs — 51 tests, 18 exclusions
Excluded TestCategoryReason
MONITOR can log executed commandsRedis-Specific InternalsRedis-internal feature
MONITOR can log commands issued by the scripting engineRedis-Specific InternalsRedis-internal feature
MONITOR can log commands issued by functionsRedis-Specific InternalsRedis-internal feature
MONITOR supports redacting command argumentsRedis-Specific InternalsRedis-internal feature
MONITOR correctly handles multi-exec casesRedis-Specific InternalsRedis-internal feature
MONITOR log blocked command only onceRedis-Specific InternalsRedis-internal feature
CONFIG save params special case handled properlyRedis-Specific InternalsRedis-internal feature
CONFIG REWRITE sanityRedis-Specific InternalsRedis-internal feature
CONFIG REWRITE handles save and shutdown properlyRedis-Specific InternalsRedis-internal feature
CONFIG REWRITE handles rename-command properlyRedis-Specific InternalsRedis-internal feature
CONFIG REWRITE handles alias config properlyRedis-Specific InternalsRedis-internal feature
redis-server command line arguments - error casesCLI DifferencesRedis-internal CLI
redis-server command line arguments - allow passing option name and option value in the same argCLI DifferencesRedis-internal CLI
redis-server command line arguments - wrong usage that we support anywayCLI DifferencesRedis-internal CLI
redis-server command line arguments - save with empty inputCLI DifferencesRedis-internal CLI
redis-server command line arguments - take one bulk string with spaces for MULTI_ARG configs parsingCLI DifferencesRedis-internal CLI
IO threads client numberRedis-Specific InternalsRedis-internal feature
Clients are evenly distributed among io threadsRedis-Specific InternalsRedis-internal feature
keyspace_tcl.rs — 36 tests, 4 exclusions
Excluded TestCategoryReason
SET/GET keys in different DBsSingle Databasesingle-DB
Coverage: basic SWAPDB test and unhappy pathSingle Databasesingle-DB
Coverage: SWAPDB and FLUSHDBSingle Databasesingle-DB
Commands pipeliningRedis-Specific InternalsRedis-internal channel-level pipeline test
latency_monitor_tcl.rs — 1 tests, 15 exclusions
Excluded TestCategoryReason
LATENCY HISTOGRAM with empty histogramObservability Differenceshistogram always empty (FrogDB doesn't record CONFIG|RESETSTAT)
LATENCY HISTOGRAM all commandsObservability DifferencesFrogDB doesn't populate per-command histograms
LATENCY HISTOGRAM sub commandsObservability DifferencesFrogDB doesn't populate per-command histograms
LATENCY HISTOGRAM with a subset of commandsObservability DifferencesFrogDB doesn't populate per-command histograms
LATENCY HISTOGRAM commandObservability DifferencesFrogDB doesn't populate per-command histograms
LATENCY HISTOGRAM with wrong command name skips the invalid oneObservability DifferencesFrogDB doesn't populate per-command histograms
Test latency events loggingObservability Differenceslatency event collection not implemented (also `needs:debug`)
LATENCY HISTORY output is okObservability Differenceslatency event collection not implemented (also `needs:debug`)
LATENCY LATEST output is okObservability Differenceslatency event collection not implemented (also `needs:debug`)
LATENCY GRAPH can output the event graphObservability Differenceslatency event collection not implemented (also `needs:debug`)
LATENCY of expire events are correctly collectedObservability Differencesexpire-cycle timing events not recorded
LATENCY GRAPH can output the expire event graphObservability Differencesexpire-cycle timing events not recorded
LATENCY HISTORY / RESET with wrong event name is fineObservability DifferencesFrogDB strictly validates event names and errors on unknown events
LATENCY HELP should not have unexpected optionsObservability DifferencesFrogDB's LATENCY HELP accepts extra arguments without erroring
LATENCY RESET is able to reset eventsObservability Differencesupstream asserts `reset > 0` and empty `LATEST` after; FrogDB always returns 0 from RESET because no events are tracked, so the `> 0` assertion can't hold
lazyfree_tcl.rs — 9 tests, 1 exclusions
Excluded TestCategoryReason
Unblocks client blocked on lazyfree via REPLICAOF commandRedis-Specific Internalsexternal:skip and lazyfree_pending_objects counter
list_tcl.rs — 106 tests, 36 exclusions
Excluded TestCategoryReason
$container node check compression with insert and popEncoding Differencesinternal-encoding (quicklist)
$container node check compression combined with trimEncoding Differencesinternal-encoding (quicklist)
Test LPUSH and LPOP on plain nodesEncoding Differencesinternal-encoding (quicklist plain nodes)
Test LTRIM on plain nodesEncoding Differencesinternal-encoding (quicklist plain nodes)
Test LREM on plain nodesEncoding Differencesinternal-encoding (quicklist plain nodes)
Test LPOS on plain nodesEncoding Differencesinternal-encoding (quicklist plain nodes)
Test LMOVE on plain nodesEncoding Differencesinternal-encoding (quicklist plain nodes)
Crash due to delete entry from a compress quicklist nodeEncoding Differencesinternal-encoding (quicklist)
Crash due to split quicklist node wronglyEncoding Differencesinternal-encoding (quicklist)
Check compression with recompressEncoding Differencesinternal-encoding (quicklist)
Crash due to wrongly recompress after lremEncoding Differencesinternal-encoding (quicklist)
Stress tester for #3343-alike bugs comp: $compTested Elsewhereinternal-encoding (quicklist) + stress
List listpack -> quicklist encoding conversionEncoding Differencesinternal-encoding
List quicklist -> listpack encoding conversionEncoding Differencesinternal-encoding
List encoding conversion when RDB loadingEncoding Differencesinternal-encoding
List invalid list-max-listpack-size configEncoding Differencesinternal-encoding
List of various encodingsEncoding Differencesinternal-encoding
List of various encodings - sanitize dumpEncoding Differencesinternal-encoding
Test LPUSH and LPOP on plain nodes over 4GBTested Elsewherelarge-memory
Test LTRIM on plain nodes over 4GBTested Elsewherelarge-memory
Test LREM on plain nodes over 4GBTested Elsewherelarge-memory
Test LMOVE on plain nodes over 4GBTested Elsewherelarge-memory
BRPOPLPUSH - $typeEncoding Differencesinternal-encoding
BLMOVE $wherefrom $whereto - $typeEncoding Differencesinternal-encoding
LINDEX consistency test - $typeEncoding Differencesinternal-encoding
LINDEX random access - $typeEncoding Differencesinternal-encoding
RPOPLPUSH with $type source and existing target $othertypeEncoding Differencesinternal-encoding
LMOVE $wherefrom $whereto with $type source and existing target $othertypeEncoding Differencesinternal-encoding
Mass RPOP/LPOP - $typeEncoding Differencesinternal-encoding
SWAPDB awakes blocked clientSingle Databasesingle-DB
SWAPDB wants to wake blocked client, but the key already expiredSingle Databasesingle-DB
BLMPOP propagate as pop with count command to replicaReplication Differencesreplication-internal
LMPOP propagate as pop with count command to replicaReplication Differencesreplication-internal
BLPOP/BLMOVE should increase dirtyRedis-Specific InternalsRedis-internal stat (CONFIG/dirty counter)
$pop: timeoutTested Elsewherecovered by `tcl_brpop_timeout` + `tcl_blpop_timeout_1s`
$pop: arguments are emptyTested Elsewherecovered by `tcl_brpop_arguments_are_empty_push_unblocks` + `tcl_blpop_arguments_are_empty_push_unblocks`
maxmemory_tcl.rs — 24 tests, 10 exclusions
Excluded TestCategoryReason
SET and RESTORE key nearly as large as the memory limitPersistence DifferencesDUMP/RESTORE not implemented
slave buffer are counted correctlyReplication Differencesreplication-internal
replica buffer don't induce evictionReplication Differencesreplication-internal
propagation with evictionReplication Differencesreplication-internal
propagation with eviction in MULTIReplication Differencesreplication-internal
Don't rehash if used memory exceeds maxmemory after rehashDEBUG Commanduses populate (DEBUG), dict rehashing internals
LRM: Basic write updates idle timeRedis-Specific InternalsLRM not implemented
LRM: RENAME updates destination key LRMRedis-Specific InternalsLRM not implemented
LRM: XREADGROUP updates stream LRMRedis-Specific InternalsLRM not implemented
LRM: Keys with only read operations should be removed firstRedis-Specific InternalsLRM not implemented
memefficiency_tcl.rs — 0 tests, 12 exclusions
Excluded TestCategoryReason
Memory efficiency with values in range $size_rangeRedis-Specific Internalsallocator-calibrated ratio assertion, `external:skip`
Active defrag main dictionary: $typeRedis-Specific Internalsjemalloc defrag not exposed in FrogDB
Active defrag - AOF loadingRedis-Specific Internalsjemalloc defrag not exposed in FrogDB
Active defrag eval scripts: $typeRedis-Specific Internalsjemalloc defrag not exposed in FrogDB
Active defrag big keys: $typeRedis-Specific Internalsjemalloc defrag not exposed in FrogDB
Active defrag pubsub: $typeRedis-Specific Internalsjemalloc defrag not exposed in FrogDB
Active defrag IDMP streams: $typeRedis-Specific Internalsjemalloc defrag not exposed in FrogDB
Active Defrag HFE with $eb_container: $typeRedis-Specific Internalsjemalloc defrag not exposed in FrogDB
Active defrag for argv retained by the main thread from IO thread: $typeRedis-Specific Internalsjemalloc defrag not exposed in FrogDB
Active defrag big list: $typeRedis-Specific Internalsjemalloc defrag not exposed in FrogDB
Active defrag edge case: $typeRedis-Specific Internalsjemalloc defrag not exposed in FrogDB
Active defrag can't be triggered during replicaof database flush. See issue #14267Redis-Specific Internalsjemalloc defrag not exposed in FrogDB
multi_tcl.rs — 34 tests, 14 exclusions
Excluded TestCategoryReason
SWAPDB does not touch non-existing key replaced with stale keySingle Databasesingle-DB
SWAPDB does not touch stale key replaced with another stale keySingle Databasesingle-DB
WATCH is able to remember the DB a key belongs toSingle Databasesingle-DB
SWAPDB does not touch watched stale keysSingle Databasesingle-DB + needs:debug
MULTI propagation of PUBLISHNeeds:Replrequires primary+replica pair
MULTI propagation of SCRIPT LOADNeeds:Replrequires primary+replica pair
MULTI propagation of EVALNeeds:Replrequires primary+replica pair
MULTI propagation of SCRIPT FLUSHNeeds:Replrequires primary+replica pair
MULTI propagation of XREADGROUPNeeds:Replrequires primary+replica pair
MULTI with $cmdNeeds:Replrequires primary+replica pair (inner-command propagation matrix)
exec with write commands and state changeNeeds:Replrequires min-replicas-to-write
exec with read commands and stale replica state changeNeeds:Replrequires replica state tracking
MULTI with BGREWRITEAOFPersistence Differencesaof
MULTI with config set appendonlyPersistence Differencesaof
networking_tcl.rs — 1 tests, 13 exclusions
Excluded TestCategoryReason
CONFIG SET port numberConfiguration Differencesexternal:skip; FrogDB port is immutable
CONFIG SET bind addressConfiguration Differencesexternal:skip; FrogDB bind is immutable
CONFIG SET bind-source-addrConfiguration Differencesexternal:skip; FrogDB does not implement bind-source-addr
Default bind address configuration handlingConfiguration Differencesexternal:skip; depends on CONFIG REWRITE and runtime bind mutation
Protected mode works as expectedConfiguration DifferencesFrogDB does not implement protected mode; no DENIED response for non-loopback clients
prefetch works as expected when killing a client from the middle of prefetch commands batchRedis-Specific InternalsRedis-internal io-threads prefetch feature
prefetch works as expected when changing the batch size while executing the commands batchRedis-Specific InternalsRedis-internal io-threads prefetch feature
no prefetch when the batch size is set to 0Redis-Specific InternalsRedis-internal io-threads prefetch feature
Prefetch can resume working when the configuration option is set to a non-zero valueRedis-Specific InternalsRedis-internal io-threads prefetch feature
Prefetch works with batch size greater than 16 (buffer overflow regression test)Redis-Specific InternalsRedis-internal io-threads prefetch feature
Prefetch works with maximum batch size of 128 and client number larger than batch sizeRedis-Specific InternalsRedis-internal io-threads prefetch feature
Multiple clients idle timeout testConfiguration DifferencesFrogDB does not implement client-idle `timeout` config
Pending command pool expansion and shrinkingRedis-Specific InternalsRedis-internal pending command pool; FrogDB uses Tokio channels with different sizing semantics
other_tcl.rs — 8 tests, 33 exclusions
Excluded TestCategoryReason
Failing testRedis-Specific Internals`$::force_failure` helper, not a real test
Coverage: MEMORY MALLOC-STATSRedis-Specific Internalsjemalloc-only subcommand
SAVE - make sure there are all the types as valuesPersistence Differencesneeds:save — requires RDB
FLUSHALL should not reset the dirty counter if we disable savePersistence Differencesneeds:save — RDB dirty counter
FLUSHALL should reset the dirty counter to 0 if we enable savePersistence Differencesneeds:save — RDB dirty counter
FLUSHALL and bgsavePersistence Differencesneeds:save — requires BGSAVE+DEBUG SLEEP
BGSAVEPersistence Differencesneeds:debug needs:save — DEBUG RELOAD required
Perform a final SAVE to leave a clean DB on diskPersistence Differencesneeds:save — RDB save
Check consistency of different data types after a reloadPersistence Differencesneeds:debug — DEBUG RELOAD
Same dataset digest if saving/reloading as AOF?DEBUG Commandneeds:debug — DEBUG DIGEST + AOF
EXPIRES after a reload (snapshot + append only file rewrite)Persistence Differencesneeds:debug needs:save — DEBUG RELOAD + LOADAOF
EXPIRES after AOF reload (without rewrite)DEBUG Commandneeds:debug — DEBUG LOADAOF
FUZZ stresser with data model $fuzztypeTested Elsewhereslow — fuzz stresser
SELECT an out of range DBSingle Databasesingledb — SELECT non-zero rejected outright
RESET clears client stateProtocol Differencesneeds:reset — RESET not implemented
RESET clears MONITOR stateProtocol Differencesneeds:reset — RESET not implemented
RESET clears and discards MULTI stateProtocol Differencesneeds:reset — RESET not implemented
RESET clears Pub/Sub stateProtocol Differencesneeds:reset — RESET not implemented
RESET clears authenticated stateProtocol Differencesneeds:reset — RESET not implemented
Don't rehash if redis has child processDEBUG Commandneeds:debug — DEBUG HTSTATS + fork
Redis can trigger resizingDEBUG Commandneeds:debug — DEBUG HTSTATS + dict-resizing
Redis can rewind and trigger smaller slot resizingDEBUG Commandneeds:debug — DEBUG HTSTATS
Redis can resize empty dictRedis-Specific InternalsMEMORY STATS `db.9 overhead.hashtable.main` Redis-internal
Process title set as expectedRedis-Specific Internalsplatform-specific — /proc/self/cmdline
Cross DB command is incompatible with cluster modeCluster Differencescluster:skip — multi-DB cluster metric
Function no-cluster flag is incompatible with cluster modeCluster Differencescluster:skip — no-cluster flag metric
Script no-cluster flag is incompatible with cluster modeCluster Differencescluster:skip — no-cluster flag metric
SORT command incompatible operations with cluster modeCluster Differencescluster:skip — SORT BY cluster metric
Normal cross slot commands are incompatible with cluster modeCluster Differencescluster:skip — cross-slot metric
Transaction is incompatible with cluster modeCluster Differencescluster:skip — transaction cluster metric
Lua scripts are incompatible with cluster modeCluster Differencescluster:skip — Lua cluster metric
Shard subscribe commands are incompatible with cluster modeCluster Differencescluster:skip — SSUBSCRIBE cluster metric
cluster-compatibility-sample-ratio configuration can workCluster Differencescluster:skip — sample-ratio config
protocol_tcl.rs — 23 tests, 6 exclusions
Excluded TestCategoryReason
Protocol desync regression test #$cRedis-Specific InternalsRedis-internal desync simulation
Regression for a crash with blocking ops and pipeliningReplication Differencesneeds:repl
Regression for a crash with cron release of client argumentsRedis-Specific InternalsRedis-internal cron path
RESP3 attributesProtocol DifferencesRESP3-only (requires attribute-mode invalidation delivery)
RESP3 attributes readrawProtocol DifferencesRESP3-only (requires attribute-mode invalidation delivery)
RESP3 attributes on RESP2Protocol DifferencesRESP3-only (requires attribute-mode invalidation delivery)
pubsub_tcl.rs — 21 tests, 26 exclusions
Excluded TestCategoryReason
Keyspace notifications: we receive keyspace notificationsConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: we receive keyevent notificationsConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: we can receive both kind of eventsConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: we are able to mask eventsConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: general events testConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: list events testConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: set events testConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: zset events testConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: hash events test ($type)Configuration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: stream events testConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications:FXX/FNX with HSETEX cmdConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: expired events (triggered expire)Configuration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: expired events (background expire)Configuration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: evicted eventsConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: test CONFIG GET/SET of event flagsConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: new key testConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: overwritten events - string to stringConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: type_changed events - hash to stringConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: both overwritten and type_changed eventsConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: configuration flags work correctlyConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: RESTORE REPLACE different type - restore, overwritten and type_changed eventsConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: SET on existing string key - overwritten eventConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: setKey on existing different type key - overwritten and type_changed eventsConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: overwritten and type_changed events for RENAME and COPY commandsConfiguration Differencesneeds:config (notify-keyspace-events)
Keyspace notifications: overwritten and type_changed for *STORE* commandsConfiguration Differencesneeds:config (notify-keyspace-events)
publish to self inside scriptArchitecture:Scripting PubsubPUBLISH not available in shard scripting context
querybuf_tcl.rs — 1 tests, 3 exclusions
Excluded TestCategoryReason
query buffer resized correctlyObservability Differencesintrospection field not implemented (requires observable `qbuf=` growth/shrink via `DEBUG PAUSE-CRON`)
query buffer resized correctly when not idleObservability Differencesintrospection field not implemented (requires observable `qbuf=` growth/shrink; also tagged `needs:debug`)
query buffer resized correctly with fat argvObservability Differencesintrospection field not implemented (requires observable `qbuf=` growth for a 1MB partial argv; needs `DEBUG PAUSE-CRON`)
replybufsize_tcl.rs — 0 tests, 1 exclusions
Excluded TestCategoryReason
verify reply buffer limitsRedis-Specific InternalsRedis-internal reply buffer sizing (requires DEBUG REPLYBUFFER and `rbs=` in CLIENT LIST)
scan_tcl.rs — 25 tests, 3 exclusions
Excluded TestCategoryReason
{$type} SSCAN with encoding $encEncoding Differencesinternal-encoding
{$type} HSCAN with encoding $encEncoding Differencesinternal-encoding
{$type} ZSCAN with encoding $encEncoding Differencesinternal-encoding
scripting_tcl.rs — 108 tests, 24 exclusions
Excluded TestCategoryReason
SORT BY <constant> output gets ordered for scriptingScripting Differencesintentional behavioral diff (strict key validation)
SORT BY <constant> with GET gets ordered for scriptingScripting Differencesintentional behavioral diff (strict key validation)
SPOP: We can call scripts rewriting client->argv from LuaScripting Differencesintentional behavioral diff (strict key validation)
EXPIRE: We can call scripts rewriting client->argv from LuaScripting Differencesintentional behavioral diff (strict key validation)
INCRBYFLOAT: We can call scripts expanding client->argv from LuaScripting Differencesintentional behavioral diff (strict key validation)
Timedout read-only scripts can be killed by SCRIPT KILLRedis-Specific InternalsRedis-internal feature
Timedout read-only scripts can be killed by SCRIPT KILL even when use pcallRedis-Specific InternalsRedis-internal feature
Timedout script does not cause a false dead clientRedis-Specific InternalsRedis-internal feature
Timedout script link is still usable after Lua returnsRedis-Specific InternalsRedis-internal feature
Timedout scripts and unblocked commandRedis-Specific InternalsRedis-internal feature
Timedout scripts that modified data can't be killed by SCRIPT KILLRedis-Specific InternalsRedis-internal feature
SHUTDOWN NOSAVE can kill a timedout script anywayRedis-Specific InternalsRedis-internal feature
Test setfenv availability lua-enable-deprecated-api=$enabledRedis-Specific InternalsRedis-internal feature
Test getfenv availability lua-enable-deprecated-api=$enabledRedis-Specific InternalsRedis-internal feature
Test newproxy availability lua-enable-deprecated-api=$enabledRedis-Specific InternalsRedis-internal feature
Verify Lua performs GC correctly after script loadingRedis-Specific InternalsRedis-internal Lua runtime
reject script do not cause a Lua stack leakRedis-Specific InternalsRedis-internal Lua runtime
LUA test trim string as expectedRedis-Specific InternalsRedis-internal Lua runtime
Functions in the Redis namespace are able to report errorsRedis-Specific InternalsRedis-internal Lua runtime
MGET: mget shouldn't be propagated in LuaReplication Differencesreplication-internal
not enough good replicasReplication Differencesneeds:repl (min-slaves-to-write)
not enough good replicas state change during long scriptReplication Differencesneeds:repl
Script - disallow write on OOMConfiguration Differencesneeds:config-maxmemory
Script ACL checkScripting Differencesneeds:ACL (script-level ACL filtering)
set_tcl.rs — 47 tests, 13 exclusions
Excluded TestCategoryReason
SADD overflows the maximum allowed elements in a listpack - $typeEncoding Differencesinternal-encoding (listpack)
Set encoding after DEBUG RELOADEncoding Differencesinternal-encoding + needs:debug
Generated sets must be encoded correctly - $typeEncoding Differencesinternal-encoding
SDIFFSTORE with three sets - $typeEncoding Differencesinternal-encoding
SUNION hashtable and listpackEncoding Differencesinternal-encoding
SRANDMEMBER - $typeEncoding Differencesinternal-encoding
SPOP integer from listpack setEncoding Differencesinternal-encoding (listpack)
SPOP new implementation: code path #1 $typeEncoding Differencesinternal-encoding
SPOP new implementation: code path #2 $typeEncoding Differencesinternal-encoding
SPOP new implementation: code path #3 $typeEncoding Differencesinternal-encoding
SRANDMEMBER histogram distribution - $typeEncoding Differencesinternal-encoding (chi-square)
SRANDMEMBER with a dict containing long chainEncoding Differencesinternal-encoding (hash collision)
SMOVE only notify dstset when the addition is successfulConfiguration Differencesneeds:config (notify-keyspace-events)
slowlog_tcl.rs — 13 tests, 5 exclusions
Excluded TestCategoryReason
SLOWLOG - Certain commands are omitted that contain sensitive informationReplication Differencesneeds:repl tag (config set masterauth/masteruser/tls-key-file-pass); FrogDB does not redact ACL SETUSER / CONFIG SET sensitive arguments in slowlog
SLOWLOG - Some commands can redact sensitive fieldsReplication Differencesneeds:repl tag (MIGRATE AUTH/AUTH2 redaction)
SLOWLOG - Rewritten commands are logged as their original commandObservability Differencestests Redis-internal command rewriting (SPOP->DEL, GEOADD->ZADD, GETSET->SET, INCRBYFLOAT->SET, blocked BLPOP->LPOP) for replication purposes; FrogDB does not implement replication command rewriting
SLOWLOG - EXEC is not logged, just executed commandsObservability DifferencesFrogDB logs each command inside a MULTI/EXEC block individually but does not skip the enclosing EXEC
SLOWLOG - blocking command is reported only after unblockedObservability DifferencesFrogDB logs blocking commands at submit time, not after unblock
sort_tcl.rs — 33 tests, 3 exclusions
Excluded TestCategoryReason
$command GET <const>Encoding Differencesinternal-encoding (encoding-loop variant)
SETRANGE with huge offsetTested Elsewherelarge-memory
sort by in cluster modeCluster Differencescluster-only (different cluster command path)
stream_cgroups_tcl.rs — 50 tests, 37 exclusions
Excluded TestCategoryReason
XREADGROUP CLAIM field types are correctRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM respects min-idle-time thresholdRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM without messagesRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM without pending messagesRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM message response formatRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM idle timeRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM with NOACKRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM with NOACK and pending messagesRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM with min-idle-time equal to zeroRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM with large min-idle-timeRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM with not integer for min-idle-timeRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM with negative integer for min-idle-timeRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM with different positionRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM verify forced entries are claimableRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM with two blocked clientsRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM claims all pending immediatelyRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM verify claiming orderRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM when pending messages get trimmedRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM state persists across RDB save/loadRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM idle time resets after RDB reloadRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM multiple groups persist correctlyRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM NOACK state not persistedRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM high delivery counts persist in RDBRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM usage stability with repeated claimsRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM with large number of PEL messagesRedis-Specific InternalsRedis-internal feature
XREADGROUP CLAIM within MULTI/EXEC transactionRedis-Specific InternalsRedis-internal feature
XREAD with CLAIM optionRedis-Specific InternalsRedis-internal feature
XACKDEL wrong number of argsRedis-Specific InternalsRedis-internal feature
XACKDEL with DELREF option acknowledges will remove entry from all PELsRedis-Specific InternalsRedis-internal feature
XACKDEL with ACKED option only deletes messages acknowledged by all groupsRedis-Specific InternalsRedis-internal feature
XACKDEL with KEEPREFRedis-Specific InternalsRedis-internal feature
XACKDEL with IDs exceeding STREAMID_STATIC_VECTOR_LEN for heap allocationRedis-Specific InternalsRedis-internal feature
XGROUP SETID with ENTRIESREAD larger than stream entries should cap the valueRedis-Specific InternalsRedis-internal feature
XREADGROUP of multiple entries changes dirty by oneRedis-Specific InternalsRedis-internal stat (dirty counter)
XREADGROUP from PEL does not change dirtyRedis-Specific InternalsRedis-internal stat (dirty counter)
Loading from legacy (Redis <= v6.2.x, rdb_ver < 10) persistenceEncoding Differencesinternal-encoding (RDB)
Loading from legacy (Redis <= v7.0.x, rdb_ver < 11) persistenceEncoding Differencesinternal-encoding (RDB)
stream_tcl.rs — 60 tests, 81 exclusions
Excluded TestCategoryReason
XADD IDMP with invalid syntaxRedis-Specific InternalsRedis-internal feature
XADD IDMP basic additionRedis-Specific InternalsRedis-internal feature
XADD IDMP with binary-safe iidRedis-Specific InternalsRedis-internal feature
XADD IDMP with maximum length iidRedis-Specific InternalsRedis-internal feature
XADD IDMP with combined optionsRedis-Specific InternalsRedis-internal feature
XADD IDMP argument order variationsRedis-Specific InternalsRedis-internal feature
XADD IDMP concurrent duplicate requestsRedis-Specific InternalsRedis-internal feature
XADD IDMP pipelined requestsRedis-Specific InternalsRedis-internal feature
XADD IDMP with consumer groupsRedis-Specific InternalsRedis-internal feature
XADD IDMP persists in RDBRedis-Specific InternalsRedis-internal feature
XADD IDMP set in AOFRedis-Specific InternalsRedis-internal feature
XADD IDMP multiple producers have isolated namespacesRedis-Specific InternalsRedis-internal feature
XADD IDMP multiple producers each have their own MAXSIZE limitRedis-Specific InternalsRedis-internal feature
XADD IDMP multiple producers persistence in RDBRedis-Specific InternalsRedis-internal feature
XADD IDMP multiple producers concurrent accessRedis-Specific InternalsRedis-internal feature
XADD IDMP multiple producers pipelined requestsRedis-Specific InternalsRedis-internal feature
XADD IDMP multiple producers with mixed IDMP and IDMPAUTORedis-Specific InternalsRedis-internal feature
XADD IDMP multiple producers stress testRedis-Specific InternalsRedis-internal feature
XADD IDMPAUTO with invalid syntaxRedis-Specific InternalsRedis-internal feature
XADD IDMPAUTO basic deduplication based on field-value pairsRedis-Specific InternalsRedis-internal feature
XADD IDMPAUTO deduplicates regardless of field orderRedis-Specific InternalsRedis-internal feature
XADD IDMPAUTO with single field-value pairRedis-Specific InternalsRedis-internal feature
XADD IDMPAUTO with many field-value pairsRedis-Specific InternalsRedis-internal feature
XADD IDMPAUTO with binary-safe valuesRedis-Specific InternalsRedis-internal feature
XADD IDMPAUTO with unicode valuesRedis-Specific InternalsRedis-internal feature
XADD IDMPAUTO with long valuesRedis-Specific InternalsRedis-internal feature
XADD IDMPAUTO argument order variationsRedis-Specific InternalsRedis-internal feature
XADD IDMPAUTO persists in RDBRedis-Specific InternalsRedis-internal feature
XADD IDMPAUTO with consumer groupsRedis-Specific InternalsRedis-internal feature
XADD IDMPAUTO field names matterRedis-Specific InternalsRedis-internal feature
XADD IDMPAUTO with numeric field names and valuesRedis-Specific InternalsRedis-internal feature
XADD IDMPAUTO multiple producers have isolated namespacesRedis-Specific InternalsRedis-internal feature
XADD IDMPAUTO multiple producersRedis-Specific InternalsRedis-internal feature
XIDMP entries expire after DURATION secondsRedis-Specific InternalsRedis-internal feature
XIDMP set evicts entries when MAXSIZE is reachedRedis-Specific InternalsRedis-internal feature
XCFGSET set IDMP-DURATION successfullyRedis-Specific InternalsRedis-internal feature
XCFGSET set IDMP-MAXSIZE successfullyRedis-Specific InternalsRedis-internal feature
XCFGSET set both IDMP-DURATION and IDMP-MAXSIZERedis-Specific InternalsRedis-internal feature
XCFGSET IDMP-DURATION maximum value validationRedis-Specific InternalsRedis-internal feature
XCFGSET IDMP-DURATION minimum value validationRedis-Specific InternalsRedis-internal feature
XCFGSET IDMP-MAXSIZE maximum value validationRedis-Specific InternalsRedis-internal feature
XCFGSET IDMP-MAXSIZE minimum value validationRedis-Specific InternalsRedis-internal feature
XCFGSET invalid syntaxRedis-Specific InternalsRedis-internal feature
XCFGSET multiple configuration changesRedis-Specific InternalsRedis-internal feature
XCFGSET configuration persists in RDBRedis-Specific InternalsRedis-internal feature
XCFGSET configuration in AOFRedis-Specific InternalsRedis-internal feature
XCFGSET changing IDMP-DURATION clears all iids historyRedis-Specific InternalsRedis-internal feature
XCFGSET changing IDMP-MAXSIZE clears all iids historyRedis-Specific InternalsRedis-internal feature
XCFGSET history cleared then new deduplication worksRedis-Specific InternalsRedis-internal feature
XCFGSET history cleared preserves stream entriesRedis-Specific InternalsRedis-internal feature
XCFGSET setting same IDMP-DURATION does not clear iids historyRedis-Specific InternalsRedis-internal feature
XCFGSET setting same IDMP-MAXSIZE does not clear iids historyRedis-Specific InternalsRedis-internal feature
XCFGSET repeated same-value calls preserve IDMP historyRedis-Specific InternalsRedis-internal feature
XCFGSET changing value after same-value sets still clears historyRedis-Specific InternalsRedis-internal feature
XCFGSET setting same value preserves iids-tracked countRedis-Specific InternalsRedis-internal feature
XCFGSET IDMP-MAXSIZE wraparound keeps last 8 entriesRedis-Specific InternalsRedis-internal feature
XCFGSET clears all producer historiesRedis-Specific InternalsRedis-internal feature
XINFO STREAM shows IDMP configuration parametersRedis-Specific InternalsRedis-internal feature
XINFO STREAM shows default IDMP parametersRedis-Specific InternalsRedis-internal feature
XINFO STREAM returns iids-tracked and iids-added fieldsRedis-Specific InternalsRedis-internal feature
XINFO STREAM iids-added is lifetime counter even after evictionRedis-Specific InternalsRedis-internal feature
XINFO STREAM iids-duplicates is lifetime counterRedis-Specific InternalsRedis-internal feature
XINFO STREAM iids-duplicates persists after evictionRedis-Specific InternalsRedis-internal feature
XINFO STREAM iids-duplicates with multiple producersRedis-Specific InternalsRedis-internal feature
XINFO STREAM iids counters after CFGSET clears historyRedis-Specific InternalsRedis-internal feature
XINFO STREAM iids-added persists in RDBRedis-Specific InternalsRedis-internal feature
XINFO STREAM returns pids-tracked fieldRedis-Specific InternalsRedis-internal feature
XINFO STREAM FULL returns pids-tracked fieldRedis-Specific InternalsRedis-internal feature
XINFO STREAM iids-tracked counts across all producersRedis-Specific InternalsRedis-internal feature
XINFO STREAM returns idmp-duration and idmp-maxsize fieldsRedis-Specific InternalsRedis-internal feature
CONFIG SET stream-idmp-duration and stream-idmp-maxsize validationRedis-Specific InternalsRedis-internal feature
XDELEX should return empty array when key doesn't existRedis-Specific InternalsRedis-internal feature
XDELEX IDS parameter validationRedis-Specific InternalsRedis-internal feature
XDELEX KEEPREF/DELREF/ACKED parameter validationRedis-Specific InternalsRedis-internal feature
XDELEX with DELREF option acknowledges will remove entry from all PELsRedis-Specific InternalsRedis-internal feature
XDELEX with ACKED option only deletes messages acknowledged by all groupsRedis-Specific InternalsRedis-internal feature
XDELEX with ACKED option won't delete messages when new consumer groups are createdRedis-Specific InternalsRedis-internal feature
XDELEX with KEEPREFRedis-Specific InternalsRedis-internal feature
XADD with LIMIT consecutive callsEncoding Differencesinternal-encoding (uses stream-node-max-entries)
XDEL fuzz testTested Elsewherefuzzing/stress
XRANGE fuzzingTested Elsewherefuzzing/stress
string_tcl.rs — 124 tests, 16 exclusions
Excluded TestCategoryReason
GETEX without argument does not propagate to replicaReplication Differencesreplication-internal
DELEX propagate as DEL command to replicaReplication Differencesreplication-internal
SETBIT fuzzingTested Elsewherefuzzing/stress
GETRANGE fuzzingTested Elsewherefuzzing/stress
MEMORY USAGE - STRINGSRedis-Specific InternalsRedis-internal allocator
Check MEMORY USAGE for embedded key strings with jemallocRedis-Specific InternalsRedis-internal allocator
DELEX with binary dataRedis-Specific InternalsRedis-internal feature
DELEX with unicode charactersRedis-Specific InternalsRedis-internal feature
DELEX with special characters and whitespaceRedis-Specific InternalsRedis-internal feature
DELEX digest consistency with same contentRedis-Specific InternalsRedis-internal feature
DELEX digest with different contentRedis-Specific InternalsRedis-internal feature
DIGEST with binary dataRedis-Specific InternalsRedis-internal feature
DIGEST with unicode charactersRedis-Specific InternalsRedis-internal feature
DIGEST with special characters and whitespaceRedis-Specific InternalsRedis-internal feature
MSETEX - flexible argument parsingRedis-Specific InternalsRedis-internal feature
MSETEX - overflow protection in numkeysRedis-Specific InternalsRedis-internal feature
violations_tcl.rs — 1 tests, 6 exclusions
Excluded TestCategoryReason
XADD one huge fieldTested Elsewherelarge-memory tag — out of scope for unit tests
XADD one huge field - 1Tested Elsewherelarge-memory tag — out of scope for unit tests
several XADD big fieldsTested Elsewherelarge-memory tag — out of scope for unit tests
single XADD big fieldsTested Elsewherelarge-memory tag — out of scope for unit tests
hash with many big fieldsTested Elsewherelarge-memory tag — out of scope for unit tests
hash with one huge fieldTested Elsewherelarge-memory tag — out of scope for unit tests
zset_tcl.rs — 104 tests, 39 exclusions
Excluded TestCategoryReason
Check encoding - $encodingEncoding Differencesinternal-encoding
ZADD with options syntax error with incomplete pair - $encodingEncoding Differencesinternal-encoding
ZINCRBY accepts hexadecimal inputs - $encodingEncoding Differencesinternal-encoding
ZINCRBY against invalid incr value - $encodingEncoding Differencesinternal-encoding
ZRANGEBYLEX with LIMIT - $encodingEncoding Differencesinternal-encoding
ZUNIONSTORE with AGGREGATE MIN - $encodingEncoding Differencesinternal-encoding
ZUNIONSTORE with AGGREGATE MAX - $encodingEncoding Differencesinternal-encoding
ZINTERSTORE with weights - $encodingEncoding Differencesinternal-encoding
ZINTERSTORE with a regular set and weights - $encodingEncoding Differencesinternal-encoding
ZINTERSTORE with AGGREGATE MIN - $encodingEncoding Differencesinternal-encoding
ZINTERSTORE with AGGREGATE MAX - $encodingEncoding Differencesinternal-encoding
$cmd with +inf/-inf scores - $encodingEncoding Differencesinternal-encoding
$cmd with NaN weights - $encodingEncoding Differencesinternal-encoding
ZDIFFSTORE with a regular set - $encodingEncoding Differencesinternal-encoding
ZSCORE - $encodingEncoding Differencesinternal-encoding
ZMSCORE - $encodingEncoding Differencesinternal-encoding
Basic $popmin/$popmax with a single key - $encodingEncoding Differencesinternal-encoding
$popmin/$popmax with count - $encodingEncoding Differencesinternal-encoding
$popmin/$popmax with a single existing sorted set - $encodingEncoding Differencesinternal-encoding
$popmin/$popmax with multiple existing sorted sets - $encodingEncoding Differencesinternal-encoding
$popmin/$popmax second sorted set has members - $encodingEncoding Differencesinternal-encoding
ZRANDMEMBER - $typeEncoding Differencesinternal-encoding
ZADD overflows the maximum allowed elements in a listpack - $typeEncoding Differencesinternal-encoding (listpack)
ZRANGESTORE with zset-max-listpack-entries 0 #10767 caseEncoding Differencesinternal-encoding (listpack)
ZMPOP propagate as pop with count command to replicaReplication Differencesreplication-internal
BZMPOP propagate as pop with count command to replicaReplication Differencesreplication-internal
ZSETs skiplist implementation backlink consistency test - $encodingEncoding Differencesinternal-encoding
ZSETs ZRANK augmented skip list stress testing - $encodingTested Elsewhereinternal-encoding (stress)
ZSET skiplist order consistency when elements are movedEncoding Differencesinternal-encoding
ZSET sorting stresser - $encodingTested Elsewherefuzzing/stress
ZRANGEBYSCORE fuzzy test, 100 ranges in $elements element sorted set - $encodingTested Elsewherefuzzing/stress
ZRANGEBYLEX fuzzy test, 100 ranges in $elements element sorted set - $encodingTested Elsewherefuzzing/stress
ZREMRANGEBYLEX fuzzy test, 100 ranges in $elements element sorted set - $encodingTested Elsewherefuzzing/stress
ZDIFF fuzzing - $encodingTested Elsewherefuzzing/stress
ZUNIONSTORE result is sortedRedis-Specific InternalsRedis-internal ordering invariant
zunionInterDiffGenericCommand acts on SET and ZSETRedis-Specific InternalsRedis-internal command name
ZRANGESTORE invalid syntaxRedis-Specific InternalsRedis-internal syntax-error format
ZRANGE invalid syntaxRedis-Specific InternalsRedis-internal syntax-error format
$pop with the count 0 returns an empty arrayScripting Differencesintentional behavioral diff (count=0 edge)