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,060 Ported Tests
708 Intentional Exclusions
0 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. 236
Observability Differences Tests for Redis-specific INFO fields, stats, or monitoring behavior that FrogDB reports differently or doesn't expose. 130
Encoding Differences Tests that assert specific internal encoding types (ziplist, listpack, intset) which FrogDB does not use. 101
Configuration Differences Tests relying on Redis-specific configuration mechanisms (redis.conf, ACL files, CONFIG REWRITE) that FrogDB replaces with TOML config. 48
Tested Elsewhere Functionality covered by other FrogDB tests (fuzz tests, integration tests, or different regression suites). 40
Replication Differences Tests for Redis replication internals (SLAVEOF, replica propagation) that differ in FrogDB's Raft-based replication. 33
Protocol Differences Tests for RESP3/HELLO protocol negotiation or protocol-level behaviors that FrogDB handles differently. 31
DEBUG Command Tests requiring the Redis DEBUG command, which is not exposed in FrogDB. 23
Memory Management Tests for Redis-specific memory management (MEMORY USAGE internals, jemalloc stats, maxmemory policies). 22
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. 9
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

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 64 71
CONFIG introspection2_tcl.rs, introspection_tcl.rs 62 39
DBSIZE keyspace_tcl.rs 36 4
DEBUG introspection_tcl.rs 45 23
DECR incr_tcl.rs 27 3
DECRBY incr_tcl.rs 27 3
DISCARD multi_tcl.rs 25 23
DUMP dump_regression.rs, dump_tcl.rs 14 15
ECHO protocol_tcl.rs 20 10
EVAL cluster_scripting_regression.rs, cluster_scripting_tcl.rs, scripting_tcl.rs 115 26
EVALSHA cluster_scripting_regression.rs, cluster_scripting_tcl.rs, scripting_tcl.rs 115 26
EXEC multi_tcl.rs 25 23
EXPIRE expire_regression.rs, expire_tcl.rs 63 6
FLUSHDB lazyfree_tcl.rs 2 8
FUNCTION functions_regression.rs, functions_tcl.rs 78 6
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 48 26
HGET hash_tcl.rs 48 26
HGETALL hash_tcl.rs 48 26
HOTKEYS hotkeys_tcl.rs 0 43
HSCAN scan_tcl.rs 24 4
HSET hash_tcl.rs 48 26
INCR incr_tcl.rs 27 3
INCRBY incr_tcl.rs 27 3
INFO info_keysizes_tcl.rs, info_regression.rs, info_tcl.rs 6 69
KEYS keyspace_tcl.rs 36 4
LATENCY latency_monitor_tcl.rs 1 15
LLEN list_tcl.rs 105 37
LPOP list_tcl.rs 105 37
LPUSH list_tcl.rs 105 37
LRANGE list_tcl.rs 105 37
MAXMEMORY maxmemory_regression.rs, maxmemory_tcl.rs 30 18
MEMORY memefficiency_tcl.rs 0 12
MGET string_tcl.rs 124 16
MSET string_tcl.rs 124 16
MULTI multi_tcl.rs 25 23
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 20 10
PUBLISH pubsub_regression.rs, pubsub_tcl.rs 19 30
RESTORE dump_regression.rs, dump_tcl.rs 14 15
RPOP list_tcl.rs 105 37
RPUSH list_tcl.rs 105 37
SADD set_tcl.rs 44 16
SCAN scan_tcl.rs 24 4
SCARD set_tcl.rs 44 16
SCRIPT scripting_tcl.rs 106 26
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 44 16
SORT sort_tcl.rs 33 5
SREM set_tcl.rs 44 16
SSCAN scan_tcl.rs 24 4
SUBSCRIBE pubsub_regression.rs, pubsub_tcl.rs 19 30
TTL expire_regression.rs, expire_tcl.rs 63 6
TYPE other_tcl.rs 8 33
UNLINK lazyfree_tcl.rs 2 8
WATCH multi_tcl.rs 25 23
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 93 49
ZRANGE zset_tcl.rs 93 49
ZRANK zset_tcl.rs 93 49
ZREM zset_tcl.rs 93 49
ZSCAN scan_tcl.rs 24 4
ZSCORE zset_tcl.rs 93 49

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
client_eviction_tcl.rs — 0 tests, 15 exclusions
Excluded TestCategoryReason
client evicted due to large argvMemory Management`maxmemory-clients` not implemented
client evicted due to large query bufMemory Management`maxmemory-clients` not implemented
client evicted due to percentage of maxmemoryMemory Management`maxmemory-clients` not implemented
client evicted due to large multi bufMemory Management`maxmemory-clients` not implemented
client evicted due to watched key listMemory Management`maxmemory-clients` not implemented
client evicted due to pubsub subscriptionsMemory Management`maxmemory-clients` not implemented
client evicted due to tracking redirectionMemory Management`maxmemory-clients` not implemented
client evicted due to client tracking prefixesMemory Management`maxmemory-clients` not implemented
client evicted due to output bufMemory Management`maxmemory-clients` not implemented
client no-evict $no_evictMemory Management`maxmemory-clients` not implemented
avoid client eviction when client is freed by output buffer limitMemory Management`maxmemory-clients` not implemented
decrease maxmemory-clients causes client evictionMemory Management`maxmemory-clients` not implemented
evict clients only until below limitMemory Management`maxmemory-clients` not implemented
evict clients in right order (large to small)Memory Management`maxmemory-clients` not implemented
client total memory grows during $typeMemory Management`maxmemory-clients` not implemented
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 — 73 tests, 6 exclusions
Excluded TestCategoryReason
FUNCTION - test debug reload different optionsDEBUG Commandneeds:debug
FUNCTION - test debug reload with nosave and noflushDEBUG Commandneeds:debug
FUNCTION - test function dump and restoreRedis-Specific InternalsRedis-internal feature (FUNCTION DUMP/RESTORE binary)
FUNCTION - deny oomConfiguration Differencesneeds:config-maxmemory
FUNCTION - deny oom on no-writes functionConfiguration Differencesneeds:config-maxmemory
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 — 48 tests, 26 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
Hash fuzzing #1 - $size fieldsTested Elsewherefuzzing/stress
Hash fuzzing #2 - $size fieldsTested Elsewherefuzzing/stress
HRANDFIELD with RESP3Protocol DifferencesRESP3-only
HGETDEL propagated as HDEL command to replicaReplication Differencesreplication-internal
KEYS command return expired keys when allow_access_expired is 1Configuration DifferencesRedis-internal config flag
hotkeys_tcl.rs — 0 tests, 43 exclusions
Excluded TestCategoryReason
HOTKEYS START - METRICS requiredObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - METRICS with CPU onlyObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - METRICS with NET onlyObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - METRICS with both CPU and NETObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - Error: session already startedObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - Error: invalid METRICS countObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - Error: METRICS count mismatchObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - Error: METRICS invalid metricsObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - Error: METRICS same parameterObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - with COUNT parameterObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - Error: COUNT out of rangeObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - with DURATION parameterObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - with SAMPLE parameterObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - Error: SAMPLE ratio invalidObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - Error: SLOTS not allowed in non-cluster modeObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS STOP - basic functionalityObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS RESET - basic functionalityObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS RESET - Error: session in progressObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS GET - returns nil when not startedObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS GET - sample-ratio fieldObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS - nested commandsObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS - commands inside MULTI/EXECObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS - EVAL inside MULTI/EXEC with nested callsObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS GET - no conditional fields without selected slotsObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS detection with biased key access, sample ratio = $sample_ratioObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS GET - RESP3 returns map with flat array values for hotkeysObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS GET - selected-slots returns full range in non-cluster modeObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - with SLOTS parameter in cluster modeObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - Error: SLOTS count mismatchObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - Error: duplicate slotsObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - Error: SLOTS already specifiedObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - Error: invalid slot - negative valueObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - Error: invalid slot - out of rangeObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - Error: invalid slot - non-integerObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS GET - selected-slots field with individual slotsObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS GET - selected-slots with unordered input slots are sortedObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS GET - selected-slots returns node's slot ranges when no SLOTS specified in cluster modeObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS GET - conditional fields with sample_ratio > 1 and selected slotsObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS GET - no conditional fields with sample_ratio = 1Observability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS - tracks only keys in selected slotsObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS - multiple selected slotsObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS START - Error: slot not handled by this nodeObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
HOTKEYS GET - selected-slots returns each node's slot ranges in multi-node clusterObservability DifferencesCLIENT TRACKING HOTKEYS not implemented in FrogDB
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 — 0 tests, 41 exclusions
Excluded TestCategoryReason
KEYSIZES - Test i'th bin counts keysizes between (2^i) and (2^(i+1)-1) as expected $suffixReplObservability DifferencesDEBUG KEYSIZES / INFO keysizes not implemented in FrogDB
KEYSIZES - Histogram values of Bytes, Kilo and Mega $suffixReplObservability DifferencesDEBUG KEYSIZES / INFO keysizes not implemented in FrogDB
KEYSIZES - Test hyperloglog $suffixReplObservability DifferencesDEBUG KEYSIZES / INFO keysizes not implemented in FrogDB
KEYSIZES - Test List $suffixReplObservability DifferencesDEBUG KEYSIZES / INFO keysizes not implemented in FrogDB
KEYSIZES - Test SET $suffixReplObservability DifferencesDEBUG KEYSIZES / INFO keysizes not implemented in FrogDB
KEYSIZES - Test ZSET $suffixReplObservability DifferencesDEBUG KEYSIZES / INFO keysizes not implemented in FrogDB
KEYSIZES - Test STRING $suffixReplObservability DifferencesDEBUG KEYSIZES / INFO keysizes not implemented in FrogDB
KEYSIZES - Test complex dataset $suffixReplObservability DifferencesDEBUG KEYSIZES / INFO keysizes not implemented in FrogDB
KEYSIZES - Test DEBUG KEYSIZES-HIST-ASSERT commandObservability DifferencesDEBUG KEYSIZES-HIST-ASSERT not implemented in FrogDB
KEYSIZES - Test HASH ($type) $suffixReplObservability DifferencesDEBUG KEYSIZES / INFO keysizes not implemented in FrogDB
KEYSIZES - Test Hash field lazy expiration ($type) $suffixReplObservability DifferencesDEBUG KEYSIZES / INFO keysizes not implemented in FrogDB
KEYSIZES - Test STRING BITS $suffixReplObservability DifferencesDEBUG KEYSIZES / INFO keysizes not implemented in FrogDB
KEYSIZES - Test RESTORE $suffixReplObservability DifferencesDEBUG KEYSIZES / INFO keysizes not implemented in FrogDB
KEYSIZES - Test RENAME $suffixReplObservability DifferencesDEBUG KEYSIZES / INFO keysizes not implemented in FrogDB
KEYSIZES - Test MOVE $suffixReplObservability DifferencesDEBUG KEYSIZES / INFO keysizes + MOVE (singledb) not implemented in FrogDB
KEYSIZES - Test SWAPDB $suffixReplObservability DifferencesDEBUG KEYSIZES / INFO keysizes + SWAPDB (singledb) not implemented in FrogDB
KEYSIZES - DEBUG RELOAD reset keysizes $suffixReplPersistence DifferencesDEBUG RELOAD not implemented in FrogDB
KEYSIZES - Test RDB $suffixReplObservability DifferencesDEBUG KEYSIZES / INFO keysizes + RDB not implemented in FrogDB
KEY-MEMORY-STATS - Empty database should have empty key memory histogramObservability Differenceskey-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS - List keys should appear in key memory histogramObservability Differenceskey-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS - All data types should appear in key memory histogramObservability Differenceskey-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS - Histogram bins should use power-of-2 labelsObservability Differenceskey-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS - DEL should remove key from key memory histogramObservability Differenceskey-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS - Modifying a list should update key memory histogramObservability Differenceskey-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS - FLUSHALL clears key memory histogramObservability Differenceskey-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS - Larger allocations go to higher binsObservability Differenceskey-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS - EXPIRE eventually removes from histogramObservability Differenceskey-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS - Test RESTORE adds to histogramObservability Differenceskey-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS - DEBUG RELOAD preserves key memory histogramObservability DifferencesDEBUG RELOAD + key-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS - RENAME should preserve key memory histogramObservability Differenceskey-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS - Test DEBUG KEYSIZES-HIST-ASSERT commandObservability DifferencesDEBUG KEYSIZES-HIST-ASSERT not implemented in FrogDB
KEY-MEMORY-STATS - RDB save and restart preserves key memory histogramObservability DifferencesRDB + key-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS - Hash field lazy expiration ($type)Observability Differenceskey-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS disabled - key memory histogram should not appearObservability Differenceskey-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS - cannot enable key-memory-histograms at runtime when disabled at startupObservability Differenceskey-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS - can disable key-memory-histograms at runtime and distrib_*_sizes disappearObservability Differenceskey-memory-histograms not implemented in FrogDB
KEY-MEMORY-STATS - cannot re-enable key-memory-histograms at runtime after disablingObservability Differenceskey-memory-histograms not implemented in FrogDB
SLOT-ALLOCSIZE - Test DEBUG ALLOCSIZE-SLOTS-ASSERT commandObservability DifferencesDEBUG ALLOCSIZE-SLOTS-ASSERT not implemented in FrogDB
KEY-MEMORY-STATS - key memory histogram should appearObservability Differenceskey-memory-histograms not implemented in FrogDB
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
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
introspection2_tcl.rs — 17 tests, 16 exclusions
Excluded TestCategoryReason
TTL, TYPE and EXISTS do not alter the last access time of a keyDEBUG Commandneeds:debug (OBJECT IDLETIME)
TOUCH alters the last access time of a keyDEBUG Commandneeds:debug (OBJECT IDLETIME)
Operations in no-touch mode do not alter the last access time of a keyDEBUG Commandneeds:debug (OBJECT IDLETIME)
Operations in no-touch mode TOUCH alters the last access time of a keyDEBUG Commandneeds:debug (OBJECT IDLETIME)
Operations in no-touch mode TOUCH from script alters the last access time of a keyDEBUG Commandneeds:debug (OBJECT IDLETIME)
command stats for GEOADDObservability DifferencesRedis-internal cmdstat format
errors stats for GEOADDObservability DifferencesRedis-internal errorstat format
command stats for EXPIREObservability DifferencesRedis-internal cmdstat format
command stats for BRPOPObservability DifferencesRedis-internal cmdstat format
command stats for MULTIObservability DifferencesRedis-internal cmdstat format
command stats for scriptsObservability DifferencesRedis-internal cmdstat format
COMMAND GETKEYSANDFLAGSRedis-Specific InternalsRedis-internal key-flags format
COMMAND GETKEYSANDFLAGS invalid argsRedis-Specific InternalsRedis-internal key-flags format
COMMAND GETKEYSANDFLAGS MSETEXRedis-Specific InternalsRedis-internal key-flags format
$cmd command will not be marked with movablekeysRedis-Specific InternalsRedis-internal command spec
$cmd command is marked with movablekeysRedis-Specific InternalsRedis-internal command spec
introspection_tcl.rs — 45 tests, 23 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 sanityConfiguration DifferencesRedis-internal config sanity
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
RESET does NOT clean library nameProtocol DifferencesRedis-internal RESET semantics
config during loadingConfiguration DifferencesRedis-internal config-during-RDB-load behavior
CLIENT REPLY OFF/ON: disable all commands replyProtocol Differencestested via CLIENT REPLY SKIP/ON tests below
CLIENT command unhappy path coverageProtocol DifferencesCLIENT CACHING / TRACKING unhappy paths not implemented; CLIENT REPLY/KILL/PAUSE covered by individual tests
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 — 2 tests, 8 exclusions
Excluded TestCategoryReason
lazy free a stream with all types of metadataConfiguration Differencesneeds:config-resetstat and lazyfreed_objects counter
lazy free a stream with deleted cgroupConfiguration Differencesneeds:config-resetstat and lazyfreed_objects counter
FLUSHALL SYNC optimized to run in bg as blocking FLUSHALL ASYNCRedis-Specific Internalslazyfreed_objects counter
Run consecutive blocking FLUSHALL ASYNC successfullyRedis-Specific Internalslazyfreed_objects counter
FLUSHALL SYNC in MULTI not optimized to run as blocking FLUSHALL ASYNCRedis-Specific Internalslazyfreed_objects / lazyfree_pending_objects counters
Client closed in the middle of blocking FLUSHALL ASYNCRedis-Specific Internalslazyfreed_objects counter
Pending commands in querybuf processed once unblocking FLUSHALL ASYNCRedis-Specific Internalslazyfreed_objects counter
Unblocks client blocked on lazyfree via REPLICAOF commandRedis-Specific Internalsexternal:skip and lazyfree_pending_objects counter
list_tcl.rs — 105 tests, 37 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
Check if list is still ok after a DEBUG RELOAD - $typeDEBUG Commandneeds:debug
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 — 16 tests, 18 exclusions
Excluded TestCategoryReason
SET and RESTORE key nearly as large as the memory limitPersistence DifferencesDUMP/RESTORE not implemented
eviction due to output buffers of many MGET clients, client eviction: falseMemory Managementclient eviction
eviction due to output buffers of many MGET clients, client eviction: trueMemory Managementclient eviction
eviction due to input buffer of a dead client, client eviction: falseMemory Managementclient eviction
eviction due to input buffer of a dead client, client eviction: trueMemory Managementclient eviction
eviction due to output buffers of pubsub, client eviction: falseMemory Managementclient eviction
eviction due to output buffers of pubsub, client eviction: trueMemory Managementclient eviction
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
client tracking don't cause eviction feedback loopMemory ManagementHELLO 3 + CLIENT TRACKING feedback loop
lru/lfu value of the key just addedDEBUG CommandOBJECT IDLETIME/FREQ not tracked
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 — 25 tests, 23 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
MULTI and script timeoutRedis-Specific InternalsRedis-internal feature (script timeout)
EXEC and script timeoutRedis-Specific InternalsRedis-internal feature (script timeout)
just EXEC and script timeoutRedis-Specific InternalsRedis-internal feature (script timeout)
exec with write commands and state changeReplication Differencesreplication-internal
exec with read commands and stale replica state changeReplication Differencesreplication-internal
EXEC with only read commands should not be rejected when OOMConfiguration Differencesneeds:config-maxmemory
EXEC with at least one use-memory command should failConfiguration Differencesneeds:config-maxmemory
MULTI propagation of PUBLISHReplication Differencesreplication-internal
MULTI propagation of SCRIPT LOADReplication Differencesreplication-internal
MULTI propagation of EVALReplication Differencesreplication-internal
MULTI propagation of SCRIPT FLUSHReplication Differencesreplication-internal
MULTI propagation of XREADGROUPReplication Differencesreplication-internal
MULTI with $cmdReplication Differencesreplication-internal (inner-command propagation matrix)
WATCH stale keys should not fail EXECDEBUG Commandneeds:debug
Delete WATCHed stale keys should not fail EXECDEBUG Commandneeds:debug
FLUSHDB while watching stale keys should not fail EXECDEBUG Commandneeds:debug
SWAPDB does not touch watched stale keysDEBUG Commandneeds:debug + singledb:skip
MULTI with BGREWRITEAOFPersistence Differencesaof
MULTI with config set appendonlyPersistence Differencesaof
MULTI with config errorRedis-Specific InternalsRedis-internal CONFIG behavior
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 — 20 tests, 10 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
RESP3 attributes readrawProtocol DifferencesRESP3-only
RESP3 attributes on RESP2Protocol DifferencesRESP3-only
test big number parsingProtocol DifferencesRESP3-only + needs:debug
test bool parsingProtocol DifferencesRESP3-only + needs:debug
test verbatim str parsingProtocol DifferencesRESP3-only + needs:debug
test argument rewriting - issue 9598DEBUG Commandneeds:debug
pubsub_tcl.rs — 16 tests, 30 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)
Pub/Sub PING on RESP$respProtocol DifferencesRESP3-only
PubSub messages with CLIENT REPLY OFFProtocol DifferencesRESP3-only (CLIENT REPLY OFF push messages)
publish to self inside multiProtocol DifferencesRESP3-only (publish-to-self requires RESP3 push)
publish to self inside scriptProtocol DifferencesRESP3-only
unsubscribe inside multi, and publish to selfProtocol DifferencesRESP3-only
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 — 24 tests, 4 exclusions
Excluded TestCategoryReason
{$type} SSCAN with encoding $encEncoding Differencesinternal-encoding
{$type} HSCAN with encoding $encEncoding Differencesinternal-encoding
{$type} ZSCAN with encoding $encEncoding Differencesinternal-encoding
{$type} SCAN with expired keysDEBUG Commandneeds:debug
scripting_tcl.rs — 106 tests, 26 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 with RESP3 mapProtocol DifferencesRESP3-only
Script return recursive objectProtocol DifferencesRESP3-only
Script - disallow write on OOMConfiguration Differencesneeds:config-maxmemory
Script ACL checkScripting Differencesneeds:ACL (script-level ACL filtering)
set_tcl.rs — 44 tests, 16 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)
SDIFF fuzzingTested Elsewherefuzzing/stress
SPOP new implementation: code path #1 propagate as DEL or UNLINKReplication Differencesreplication-internal
SMOVE only notify dstset when the addition is successfulConfiguration Differencesneeds:config (notify-keyspace-events)
SMISMEMBER requires one or more membersRedis-Specific InternalsRedis-internal arity error format
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, 5 exclusions
Excluded TestCategoryReason
$command GET <const>Encoding Differencesinternal-encoding (encoding-loop variant)
SORT will complain with numerical sorting and bad doubles (1)Redis-Specific InternalsRedis-internal error message format
SORT will complain with numerical sorting and bad doubles (2)Redis-Specific InternalsRedis-internal error message format
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 — 93 tests, 49 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)
ZINTER RESP3 - $encodingProtocol DifferencesRESP3-only
Basic $popmin/$popmax - $encoding RESP3Protocol DifferencesRESP3-only
$popmin/$popmax with count - $encoding RESP3Protocol DifferencesRESP3-only
$popmin/$popmax - $encoding RESP3Protocol DifferencesRESP3-only
BZPOPMIN/BZPOPMAX readraw in RESP$respProtocol DifferencesRESP3-only
ZMPOP readraw in RESP$respProtocol DifferencesRESP3-only
BZMPOP readraw in RESP$respProtocol DifferencesRESP3-only
ZRANGESTORE RESP3Protocol DifferencesRESP3-only
ZRANDMEMBER with RESP3Protocol DifferencesRESP3-only
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
ZSCORE after a DEBUG RELOAD - $encodingDEBUG Commandneeds:debug
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)