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.
Summary
Section titled “Summary”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.
Exclusion Categories
Section titled “Exclusion Categories”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 |
Command Impact
Section titled “Command Impact”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 |
Suite Details
Section titled “Suite Details”Expand a suite to see the full list of excluded tests with reasons.
acl_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
ACL LOAD only disconnects affected clients | Configuration Differences | Redis-internal feature (ACL file) |
ACL LOAD disconnects affected subscriber | Configuration Differences | Redis-internal feature (ACL file) |
ACL load and save | Configuration Differences | Redis-internal feature (ACL file) |
ACL load on replica when connected to replica | Configuration Differences | Redis-internal feature (ACL file) |
Test loading duplicate users in config on startup | Configuration Differences | Redis-internal feature (ACL file) |
First server should have role slave after SLAVEOF | Replication Differences | needs:repl |
Alice: can execute all command | Redis-Specific Internals | Redis-internal session-state ordering |
Test behavior of loading ACLs | Configuration Differences | ACL v2 selectors removed (8121bfee) |
bitops_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
BITOP $op fuzzing | Tested Elsewhere | fuzzing/stress |
BITOP NOT fuzzing | Tested Elsewhere | fuzzing/stress |
BITPOS bit=1 fuzzy testing using SETBIT | Tested Elsewhere | fuzzing/stress |
BITPOS bit=0 fuzzy testing using SETBIT | Tested Elsewhere | fuzzing/stress |
BITPOS/BITCOUNT fuzzy testing using SETBIT | Tested Elsewhere | fuzzing/stress |
SETBIT/BITFIELD only increase dirty when the value changed | Redis-Specific Internals | Redis-internal stat (dirty counter) |
BIT pos larger than UINT_MAX | Tested Elsewhere | large-memory |
SETBIT values larger than UINT32_MAX and lzf_compress/lzf_decompress correctly | Tested Elsewhere | large-memory + needs:debug |
client_eviction_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
client evicted due to large argv | Memory Management | `maxmemory-clients` not implemented |
client evicted due to large query buf | Memory Management | `maxmemory-clients` not implemented |
client evicted due to percentage of maxmemory | Memory Management | `maxmemory-clients` not implemented |
client evicted due to large multi buf | Memory Management | `maxmemory-clients` not implemented |
client evicted due to watched key list | Memory Management | `maxmemory-clients` not implemented |
client evicted due to pubsub subscriptions | Memory Management | `maxmemory-clients` not implemented |
client evicted due to tracking redirection | Memory Management | `maxmemory-clients` not implemented |
client evicted due to client tracking prefixes | Memory Management | `maxmemory-clients` not implemented |
client evicted due to output buf | Memory Management | `maxmemory-clients` not implemented |
client no-evict $no_evict | Memory Management | `maxmemory-clients` not implemented |
avoid client eviction when client is freed by output buffer limit | Memory Management | `maxmemory-clients` not implemented |
decrease maxmemory-clients causes client eviction | Memory Management | `maxmemory-clients` not implemented |
evict clients only until below limit | Memory Management | `maxmemory-clients` not implemented |
evict clients in right order (large to small) | Memory Management | `maxmemory-clients` not implemented |
client total memory grows during $type | Memory Management | `maxmemory-clients` not implemented |
dump_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
MIGRATE is caching connections | Redis-Specific Internals | Redis-internal feature |
MIGRATE cached connections are released after some time | Redis-Specific Internals | Redis-internal feature |
MIGRATE is able to migrate a key between two instances | Redis-Specific Internals | Redis-internal feature |
MIGRATE is able to copy a key between two instances | Redis-Specific Internals | Redis-internal feature |
MIGRATE will not overwrite existing keys, unless REPLACE is used | Redis-Specific Internals | Redis-internal feature |
MIGRATE propagates TTL correctly | Redis-Specific Internals | Redis-internal feature |
MIGRATE can correctly transfer large values | Redis-Specific Internals | Redis-internal feature |
MIGRATE can correctly transfer hashes | Redis-Specific Internals | Redis-internal feature |
MIGRATE timeout actually works | Redis-Specific Internals | Redis-internal feature |
MIGRATE can migrate multiple keys at once | Redis-Specific Internals | Redis-internal feature |
MIGRATE with multiple keys must have empty key arg | Redis-Specific Internals | Redis-internal feature |
MIGRATE with multiple keys migrate just existing ones | Redis-Specific Internals | Redis-internal feature |
MIGRATE with multiple keys: stress command rewriting | Redis-Specific Internals | Redis-internal feature |
MIGRATE with multiple keys: delete just ack keys | Redis-Specific Internals | Redis-internal feature |
MIGRATE AUTH: correct and wrong password cases | Redis-Specific Internals | Redis-internal feature |
expire_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
All TTL in commands are propagated as absolute timestamp in replication stream | Replication Differences | replication-internal |
GETEX propagate as to replica as PERSIST, DEL, or nothing | Replication Differences | replication-internal |
Redis should not propagate the read command on lazy expire | Replication Differences | replication-internal |
SCAN: Lazy-expire should not be wrapped in MULTI/EXEC | Replication Differences | replication-internal |
RANDOMKEY: Lazy-expire should not be wrapped in MULTI/EXEC | Replication Differences | replication-internal |
expire scan should skip dictionaries with lot's of empty buckets | Redis-Specific Internals | Redis-internal expire scan |
functions_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
FUNCTION - test debug reload different options | DEBUG Command | needs:debug |
FUNCTION - test debug reload with nosave and noflush | DEBUG Command | needs:debug |
FUNCTION - test function dump and restore | Redis-Specific Internals | Redis-internal feature (FUNCTION DUMP/RESTORE binary) |
FUNCTION - deny oom | Configuration Differences | needs:config-maxmemory |
FUNCTION - deny oom on no-writes function | Configuration Differences | needs:config-maxmemory |
FUNCTION - allow stale | Replication Differences | needs:repl |
geo_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
GEOSEARCH fuzzy test - $type | Tested Elsewhere | fuzzing/stress |
GEOSEARCH box edges fuzzy test | Tested Elsewhere | fuzzing/stress |
hash_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
Is the small hash encoded with a listpack? | Encoding Differences | internal-encoding |
Is the big hash encoded with an hash table? | Encoding Differences | internal-encoding |
Is a ziplist encoded Hash promoted on big payload? | Encoding Differences | internal-encoding |
HGET against the small hash | Encoding Differences | internal-encoding |
HGET against the big hash | Encoding Differences | internal-encoding |
HMSET - small hash | Encoding Differences | internal-encoding |
HMSET - big hash | Encoding Differences | internal-encoding |
HMGET - small hash | Encoding Differences | internal-encoding |
HMGET - big hash | Encoding Differences | internal-encoding |
HKEYS - small hash | Encoding Differences | internal-encoding |
HKEYS - big hash | Encoding Differences | internal-encoding |
HVALS - small hash | Encoding Differences | internal-encoding |
HVALS - big hash | Encoding Differences | internal-encoding |
HGETALL - small hash | Encoding Differences | internal-encoding |
HGETALL - big hash | Encoding Differences | internal-encoding |
HSTRLEN against the small hash | Encoding Differences | internal-encoding |
HSTRLEN against the big hash | Encoding Differences | internal-encoding |
HRANDFIELD - $type | Encoding Differences | internal-encoding |
Stress test the hash ziplist -> hashtable encoding conversion | Encoding Differences | internal-encoding |
Hash ziplist of various encodings | Encoding Differences | internal-encoding |
Hash ziplist of various encodings - sanitize dump | Encoding Differences | internal-encoding |
Hash fuzzing #1 - $size fields | Tested Elsewhere | fuzzing/stress |
Hash fuzzing #2 - $size fields | Tested Elsewhere | fuzzing/stress |
HRANDFIELD with RESP3 | Protocol Differences | RESP3-only |
HGETDEL propagated as HDEL command to replica | Replication Differences | replication-internal |
KEYS command return expired keys when allow_access_expired is 1 | Configuration Differences | Redis-internal config flag |
hotkeys_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
HOTKEYS START - METRICS required | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - METRICS with CPU only | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - METRICS with NET only | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - METRICS with both CPU and NET | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - Error: session already started | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - Error: invalid METRICS count | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - Error: METRICS count mismatch | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - Error: METRICS invalid metrics | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - Error: METRICS same parameter | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - with COUNT parameter | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - Error: COUNT out of range | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - with DURATION parameter | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - with SAMPLE parameter | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - Error: SAMPLE ratio invalid | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - Error: SLOTS not allowed in non-cluster mode | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS STOP - basic functionality | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS RESET - basic functionality | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS RESET - Error: session in progress | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS GET - returns nil when not started | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS GET - sample-ratio field | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS - nested commands | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS - commands inside MULTI/EXEC | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS - EVAL inside MULTI/EXEC with nested calls | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS GET - no conditional fields without selected slots | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS detection with biased key access, sample ratio = $sample_ratio | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS GET - RESP3 returns map with flat array values for hotkeys | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS GET - selected-slots returns full range in non-cluster mode | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - with SLOTS parameter in cluster mode | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - Error: SLOTS count mismatch | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - Error: duplicate slots | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - Error: SLOTS already specified | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - Error: invalid slot - negative value | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - Error: invalid slot - out of range | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - Error: invalid slot - non-integer | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS GET - selected-slots field with individual slots | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS GET - selected-slots with unordered input slots are sorted | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS GET - selected-slots returns node's slot ranges when no SLOTS specified in cluster mode | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS GET - conditional fields with sample_ratio > 1 and selected slots | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS GET - no conditional fields with sample_ratio = 1 | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS - tracks only keys in selected slots | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS - multiple selected slots | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS START - Error: slot not handled by this node | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
HOTKEYS GET - selected-slots returns each node's slot ranges in multi-node cluster | Observability Differences | CLIENT TRACKING HOTKEYS not implemented in FrogDB |
hyperloglog_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
HyperLogLog self test passes | Redis-Specific Internals | Redis-internal HLL self-test |
HyperLogLogs are promote from sparse to dense | Encoding Differences | internal-encoding (HLL) |
Change hll-sparse-max-bytes | Encoding Differences | internal-encoding (HLL) |
Hyperloglog promote to dense well in different hll-sparse-max-bytes | Encoding Differences | internal-encoding (HLL) |
HyperLogLog sparse encoding stress test | Tested Elsewhere | internal-encoding (HLL) + stress |
PFMERGE results with simd | Redis-Specific Internals | Redis-internal SIMD path |
PFDEBUG GETREG returns the HyperLogLog raw registers | DEBUG Command | needs:debug (PFDEBUG) |
PFADD / PFCOUNT cache invalidation works | Encoding Differences | internal-encoding (HLL) |
Corrupted sparse HyperLogLogs are detected: Additional at tail | Encoding Differences | internal-encoding (HLL) |
Corrupted sparse HyperLogLogs are detected: Broken magic | Encoding Differences | internal-encoding (HLL) |
Corrupted sparse HyperLogLogs are detected: Invalid encoding | Encoding Differences | internal-encoding (HLL) |
Corrupted dense HyperLogLogs are detected: Wrong length | Encoding Differences | internal-encoding (HLL) |
Corrupted sparse HyperLogLogs doesn't cause overflow and out-of-bounds with XZERO opcode | Encoding Differences | internal-encoding (HLL) |
Corrupted sparse HyperLogLogs doesn't cause overflow and out-of-bounds with ZERO opcode | Encoding Differences | internal-encoding (HLL) |
Fuzzing dense/sparse encoding: Redis should always detect errors | Tested Elsewhere | internal-encoding (HLL) + fuzzing |
PFADD with 2GB entry should not crash server due to overflow in MurmurHash64A | Tested Elsewhere | large-memory |
incr_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
INCR does not use shared objects | Redis-Specific Internals | Redis-internal object model |
INCR can modify objects in-place | Redis-Specific Internals | Redis-internal object model |
$cmd operation should update encoding from raw to int | Encoding Differences | internal-encoding |
info_keysizes_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
KEYSIZES - Test i'th bin counts keysizes between (2^i) and (2^(i+1)-1) as expected $suffixRepl | Observability Differences | DEBUG KEYSIZES / INFO keysizes not implemented in FrogDB |
KEYSIZES - Histogram values of Bytes, Kilo and Mega $suffixRepl | Observability Differences | DEBUG KEYSIZES / INFO keysizes not implemented in FrogDB |
KEYSIZES - Test hyperloglog $suffixRepl | Observability Differences | DEBUG KEYSIZES / INFO keysizes not implemented in FrogDB |
KEYSIZES - Test List $suffixRepl | Observability Differences | DEBUG KEYSIZES / INFO keysizes not implemented in FrogDB |
KEYSIZES - Test SET $suffixRepl | Observability Differences | DEBUG KEYSIZES / INFO keysizes not implemented in FrogDB |
KEYSIZES - Test ZSET $suffixRepl | Observability Differences | DEBUG KEYSIZES / INFO keysizes not implemented in FrogDB |
KEYSIZES - Test STRING $suffixRepl | Observability Differences | DEBUG KEYSIZES / INFO keysizes not implemented in FrogDB |
KEYSIZES - Test complex dataset $suffixRepl | Observability Differences | DEBUG KEYSIZES / INFO keysizes not implemented in FrogDB |
KEYSIZES - Test DEBUG KEYSIZES-HIST-ASSERT command | Observability Differences | DEBUG KEYSIZES-HIST-ASSERT not implemented in FrogDB |
KEYSIZES - Test HASH ($type) $suffixRepl | Observability Differences | DEBUG KEYSIZES / INFO keysizes not implemented in FrogDB |
KEYSIZES - Test Hash field lazy expiration ($type) $suffixRepl | Observability Differences | DEBUG KEYSIZES / INFO keysizes not implemented in FrogDB |
KEYSIZES - Test STRING BITS $suffixRepl | Observability Differences | DEBUG KEYSIZES / INFO keysizes not implemented in FrogDB |
KEYSIZES - Test RESTORE $suffixRepl | Observability Differences | DEBUG KEYSIZES / INFO keysizes not implemented in FrogDB |
KEYSIZES - Test RENAME $suffixRepl | Observability Differences | DEBUG KEYSIZES / INFO keysizes not implemented in FrogDB |
KEYSIZES - Test MOVE $suffixRepl | Observability Differences | DEBUG KEYSIZES / INFO keysizes + MOVE (singledb) not implemented in FrogDB |
KEYSIZES - Test SWAPDB $suffixRepl | Observability Differences | DEBUG KEYSIZES / INFO keysizes + SWAPDB (singledb) not implemented in FrogDB |
KEYSIZES - DEBUG RELOAD reset keysizes $suffixRepl | Persistence Differences | DEBUG RELOAD not implemented in FrogDB |
KEYSIZES - Test RDB $suffixRepl | Observability Differences | DEBUG KEYSIZES / INFO keysizes + RDB not implemented in FrogDB |
KEY-MEMORY-STATS - Empty database should have empty key memory histogram | Observability Differences | key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS - List keys should appear in key memory histogram | Observability Differences | key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS - All data types should appear in key memory histogram | Observability Differences | key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS - Histogram bins should use power-of-2 labels | Observability Differences | key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS - DEL should remove key from key memory histogram | Observability Differences | key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS - Modifying a list should update key memory histogram | Observability Differences | key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS - FLUSHALL clears key memory histogram | Observability Differences | key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS - Larger allocations go to higher bins | Observability Differences | key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS - EXPIRE eventually removes from histogram | Observability Differences | key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS - Test RESTORE adds to histogram | Observability Differences | key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS - DEBUG RELOAD preserves key memory histogram | Observability Differences | DEBUG RELOAD + key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS - RENAME should preserve key memory histogram | Observability Differences | key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS - Test DEBUG KEYSIZES-HIST-ASSERT command | Observability Differences | DEBUG KEYSIZES-HIST-ASSERT not implemented in FrogDB |
KEY-MEMORY-STATS - RDB save and restart preserves key memory histogram | Observability Differences | RDB + key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS - Hash field lazy expiration ($type) | Observability Differences | key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS disabled - key memory histogram should not appear | Observability Differences | key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS - cannot enable key-memory-histograms at runtime when disabled at startup | Observability Differences | key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS - can disable key-memory-histograms at runtime and distrib_*_sizes disappear | Observability Differences | key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS - cannot re-enable key-memory-histograms at runtime after disabling | Observability Differences | key-memory-histograms not implemented in FrogDB |
SLOT-ALLOCSIZE - Test DEBUG ALLOCSIZE-SLOTS-ASSERT command | Observability Differences | DEBUG ALLOCSIZE-SLOTS-ASSERT not implemented in FrogDB |
KEY-MEMORY-STATS - key memory histogram should appear | Observability Differences | key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS - Replication updates key memory stats on replica | Observability Differences | needs:repl — replication + key-memory-histograms not implemented in FrogDB |
KEY-MEMORY-STATS - DEL on primary updates key memory stats on replica | Observability Differences | needs:repl — replication + key-memory-histograms not implemented in FrogDB |
info_regression.rs
| Excluded Test | Category | Reason |
|---|---|---|
Verify that LUT overhead is properly updated when dicts are emptied or reused (issue #13973) | Redis-Specific Internals | Redis-internal dict/LUT overhead accounting |
info_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
stats: eventloop metrics | Redis-Specific Internals | Redis single-threaded event loop cycle tracking |
stats: instantaneous metrics | Redis-Specific Internals | Redis event loop instantaneous sampling |
stats: debug metrics | Redis-Specific Internals | Redis DEBUG info section (AOF/cron duration sums) |
stats: client input and output buffer limit disconnections | Redis-Specific Internals | Redis buffer limit stats; also needs DEBUG |
memory: database and pubsub overhead and rehashing dict count | Redis-Specific Internals | Redis dict/rehashing internals (MEMORY STATS) |
memory: used_memory_peak_time is updated when used_memory_peak is updated | Redis-Specific Internals | Redis-specific peak timestamp tracking |
Verify that LUT overhead is properly updated when dicts are emptied or reused | Cluster Differences | cluster-specific Redis dict internals |
errorstats: limit errors will not increase indefinitely | Observability Differences | Redis-internal 128-error-type cap behavior |
errorstats: blocking commands | Observability Differences | CLIENT UNBLOCK error type tracking (UNBLOCKED error prefix) |
latencystats: disable/enable | Observability Differences | CONFIG SET latency-tracking yes/no, p50/p99/p99.9 output |
latencystats: configure percentiles | Observability Differences | CONFIG SET latency-tracking-info-percentiles |
latencystats: bad configure percentiles | Observability Differences | config validation (non-numeric, >100) |
latencystats: blocking commands | Observability Differences | latency tracking for BLPOP and similar |
latencystats: subcommands | Observability Differences | per-subcommand latency (CLIENT|ID, CONFIG|SET) |
latencystats: measure latency | Observability Differences | verify latency magnitude (also needs:debug) |
errorstats: failed call authentication error | Observability Differences | AUTH failure → errorstat ERR count=1 |
errorstats: failed call within MULTI/EXEC | Observability Differences | error tracking across transactions |
errorstats: failed call within LUA | Observability Differences | error tracking in EVAL/pcall |
errorstats: failed call NOSCRIPT error | Observability Differences | EVALSHA → errorstat NOSCRIPT |
errorstats: failed call NOGROUP error | Observability Differences | XGROUP CREATECONSUMER → errorstat NOGROUP |
errorstats: rejected call unknown command | Observability Differences | unknown command → errorstat ERR |
errorstats: rejected call within MULTI/EXEC | Observability Differences | arity error in MULTI queuing |
errorstats: rejected call due to wrong arity | Observability Differences | wrong arg count → rejected_calls=1 |
errorstats: rejected call by OOM error | Observability Differences | maxmemory → errorstat OOM, rejected_calls=1 |
errorstats: rejected call by authorization error | Observability Differences | ACL → errorstat NOPERM, rejected_calls=1 |
clients: pubsub clients | Observability Differences | pubsub_clients count in INFO clients section |
clients: watching clients | Observability Differences | watching_clients, total_watched_keys in INFO clients; watch=N in CLIENT INFO |
introspection2_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
TTL, TYPE and EXISTS do not alter the last access time of a key | DEBUG Command | needs:debug (OBJECT IDLETIME) |
TOUCH alters the last access time of a key | DEBUG Command | needs:debug (OBJECT IDLETIME) |
Operations in no-touch mode do not alter the last access time of a key | DEBUG Command | needs:debug (OBJECT IDLETIME) |
Operations in no-touch mode TOUCH alters the last access time of a key | DEBUG Command | needs:debug (OBJECT IDLETIME) |
Operations in no-touch mode TOUCH from script alters the last access time of a key | DEBUG Command | needs:debug (OBJECT IDLETIME) |
command stats for GEOADD | Observability Differences | Redis-internal cmdstat format |
errors stats for GEOADD | Observability Differences | Redis-internal errorstat format |
command stats for EXPIRE | Observability Differences | Redis-internal cmdstat format |
command stats for BRPOP | Observability Differences | Redis-internal cmdstat format |
command stats for MULTI | Observability Differences | Redis-internal cmdstat format |
command stats for scripts | Observability Differences | Redis-internal cmdstat format |
COMMAND GETKEYSANDFLAGS | Redis-Specific Internals | Redis-internal key-flags format |
COMMAND GETKEYSANDFLAGS invalid args | Redis-Specific Internals | Redis-internal key-flags format |
COMMAND GETKEYSANDFLAGS MSETEX | Redis-Specific Internals | Redis-internal key-flags format |
$cmd command will not be marked with movablekeys | Redis-Specific Internals | Redis-internal command spec |
$cmd command is marked with movablekeys | Redis-Specific Internals | Redis-internal command spec |
introspection_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
MONITOR can log executed commands | Redis-Specific Internals | Redis-internal feature |
MONITOR can log commands issued by the scripting engine | Redis-Specific Internals | Redis-internal feature |
MONITOR can log commands issued by functions | Redis-Specific Internals | Redis-internal feature |
MONITOR supports redacting command arguments | Redis-Specific Internals | Redis-internal feature |
MONITOR correctly handles multi-exec cases | Redis-Specific Internals | Redis-internal feature |
MONITOR log blocked command only once | Redis-Specific Internals | Redis-internal feature |
CONFIG save params special case handled properly | Redis-Specific Internals | Redis-internal feature |
CONFIG sanity | Configuration Differences | Redis-internal config sanity |
CONFIG REWRITE sanity | Redis-Specific Internals | Redis-internal feature |
CONFIG REWRITE handles save and shutdown properly | Redis-Specific Internals | Redis-internal feature |
CONFIG REWRITE handles rename-command properly | Redis-Specific Internals | Redis-internal feature |
CONFIG REWRITE handles alias config properly | Redis-Specific Internals | Redis-internal feature |
redis-server command line arguments - error cases | CLI Differences | Redis-internal CLI |
redis-server command line arguments - allow passing option name and option value in the same arg | CLI Differences | Redis-internal CLI |
redis-server command line arguments - wrong usage that we support anyway | CLI Differences | Redis-internal CLI |
redis-server command line arguments - save with empty input | CLI Differences | Redis-internal CLI |
redis-server command line arguments - take one bulk string with spaces for MULTI_ARG configs parsing | CLI Differences | Redis-internal CLI |
IO threads client number | Redis-Specific Internals | Redis-internal feature |
Clients are evenly distributed among io threads | Redis-Specific Internals | Redis-internal feature |
RESET does NOT clean library name | Protocol Differences | Redis-internal RESET semantics |
config during loading | Configuration Differences | Redis-internal config-during-RDB-load behavior |
CLIENT REPLY OFF/ON: disable all commands reply | Protocol Differences | tested via CLIENT REPLY SKIP/ON tests below |
CLIENT command unhappy path coverage | Protocol Differences | CLIENT CACHING / TRACKING unhappy paths not implemented; CLIENT REPLY/KILL/PAUSE covered by individual tests |
keyspace_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
SET/GET keys in different DBs | Single Database | single-DB |
Coverage: basic SWAPDB test and unhappy path | Single Database | single-DB |
Coverage: SWAPDB and FLUSHDB | Single Database | single-DB |
Commands pipelining | Redis-Specific Internals | Redis-internal channel-level pipeline test |
latency_monitor_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
LATENCY HISTOGRAM with empty histogram | Observability Differences | histogram always empty (FrogDB doesn't record CONFIG|RESETSTAT) |
LATENCY HISTOGRAM all commands | Observability Differences | FrogDB doesn't populate per-command histograms |
LATENCY HISTOGRAM sub commands | Observability Differences | FrogDB doesn't populate per-command histograms |
LATENCY HISTOGRAM with a subset of commands | Observability Differences | FrogDB doesn't populate per-command histograms |
LATENCY HISTOGRAM command | Observability Differences | FrogDB doesn't populate per-command histograms |
LATENCY HISTOGRAM with wrong command name skips the invalid one | Observability Differences | FrogDB doesn't populate per-command histograms |
Test latency events logging | Observability Differences | latency event collection not implemented (also `needs:debug`) |
LATENCY HISTORY output is ok | Observability Differences | latency event collection not implemented (also `needs:debug`) |
LATENCY LATEST output is ok | Observability Differences | latency event collection not implemented (also `needs:debug`) |
LATENCY GRAPH can output the event graph | Observability Differences | latency event collection not implemented (also `needs:debug`) |
LATENCY of expire events are correctly collected | Observability Differences | expire-cycle timing events not recorded |
LATENCY GRAPH can output the expire event graph | Observability Differences | expire-cycle timing events not recorded |
LATENCY HISTORY / RESET with wrong event name is fine | Observability Differences | FrogDB strictly validates event names and errors on unknown events |
LATENCY HELP should not have unexpected options | Observability Differences | FrogDB's LATENCY HELP accepts extra arguments without erroring |
LATENCY RESET is able to reset events | Observability Differences | upstream 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
| Excluded Test | Category | Reason |
|---|---|---|
lazy free a stream with all types of metadata | Configuration Differences | needs:config-resetstat and lazyfreed_objects counter |
lazy free a stream with deleted cgroup | Configuration Differences | needs:config-resetstat and lazyfreed_objects counter |
FLUSHALL SYNC optimized to run in bg as blocking FLUSHALL ASYNC | Redis-Specific Internals | lazyfreed_objects counter |
Run consecutive blocking FLUSHALL ASYNC successfully | Redis-Specific Internals | lazyfreed_objects counter |
FLUSHALL SYNC in MULTI not optimized to run as blocking FLUSHALL ASYNC | Redis-Specific Internals | lazyfreed_objects / lazyfree_pending_objects counters |
Client closed in the middle of blocking FLUSHALL ASYNC | Redis-Specific Internals | lazyfreed_objects counter |
Pending commands in querybuf processed once unblocking FLUSHALL ASYNC | Redis-Specific Internals | lazyfreed_objects counter |
Unblocks client blocked on lazyfree via REPLICAOF command | Redis-Specific Internals | external:skip and lazyfree_pending_objects counter |
list_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
$container node check compression with insert and pop | Encoding Differences | internal-encoding (quicklist) |
$container node check compression combined with trim | Encoding Differences | internal-encoding (quicklist) |
Test LPUSH and LPOP on plain nodes | Encoding Differences | internal-encoding (quicklist plain nodes) |
Test LTRIM on plain nodes | Encoding Differences | internal-encoding (quicklist plain nodes) |
Test LREM on plain nodes | Encoding Differences | internal-encoding (quicklist plain nodes) |
Test LPOS on plain nodes | Encoding Differences | internal-encoding (quicklist plain nodes) |
Test LMOVE on plain nodes | Encoding Differences | internal-encoding (quicklist plain nodes) |
Crash due to delete entry from a compress quicklist node | Encoding Differences | internal-encoding (quicklist) |
Crash due to split quicklist node wrongly | Encoding Differences | internal-encoding (quicklist) |
Check compression with recompress | Encoding Differences | internal-encoding (quicklist) |
Crash due to wrongly recompress after lrem | Encoding Differences | internal-encoding (quicklist) |
Stress tester for #3343-alike bugs comp: $comp | Tested Elsewhere | internal-encoding (quicklist) + stress |
List listpack -> quicklist encoding conversion | Encoding Differences | internal-encoding |
List quicklist -> listpack encoding conversion | Encoding Differences | internal-encoding |
List encoding conversion when RDB loading | Encoding Differences | internal-encoding |
List invalid list-max-listpack-size config | Encoding Differences | internal-encoding |
List of various encodings | Encoding Differences | internal-encoding |
List of various encodings - sanitize dump | Encoding Differences | internal-encoding |
Test LPUSH and LPOP on plain nodes over 4GB | Tested Elsewhere | large-memory |
Test LTRIM on plain nodes over 4GB | Tested Elsewhere | large-memory |
Test LREM on plain nodes over 4GB | Tested Elsewhere | large-memory |
Test LMOVE on plain nodes over 4GB | Tested Elsewhere | large-memory |
BRPOPLPUSH - $type | Encoding Differences | internal-encoding |
BLMOVE $wherefrom $whereto - $type | Encoding Differences | internal-encoding |
LINDEX consistency test - $type | Encoding Differences | internal-encoding |
LINDEX random access - $type | Encoding Differences | internal-encoding |
RPOPLPUSH with $type source and existing target $othertype | Encoding Differences | internal-encoding |
LMOVE $wherefrom $whereto with $type source and existing target $othertype | Encoding Differences | internal-encoding |
Mass RPOP/LPOP - $type | Encoding Differences | internal-encoding |
Check if list is still ok after a DEBUG RELOAD - $type | DEBUG Command | needs:debug |
SWAPDB awakes blocked client | Single Database | single-DB |
SWAPDB wants to wake blocked client, but the key already expired | Single Database | single-DB |
BLMPOP propagate as pop with count command to replica | Replication Differences | replication-internal |
LMPOP propagate as pop with count command to replica | Replication Differences | replication-internal |
BLPOP/BLMOVE should increase dirty | Redis-Specific Internals | Redis-internal stat (CONFIG/dirty counter) |
$pop: timeout | Tested Elsewhere | covered by `tcl_brpop_timeout` + `tcl_blpop_timeout_1s` |
$pop: arguments are empty | Tested Elsewhere | covered by `tcl_brpop_arguments_are_empty_push_unblocks` + `tcl_blpop_arguments_are_empty_push_unblocks` |
maxmemory_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
SET and RESTORE key nearly as large as the memory limit | Persistence Differences | DUMP/RESTORE not implemented |
eviction due to output buffers of many MGET clients, client eviction: false | Memory Management | client eviction |
eviction due to output buffers of many MGET clients, client eviction: true | Memory Management | client eviction |
eviction due to input buffer of a dead client, client eviction: false | Memory Management | client eviction |
eviction due to input buffer of a dead client, client eviction: true | Memory Management | client eviction |
eviction due to output buffers of pubsub, client eviction: false | Memory Management | client eviction |
eviction due to output buffers of pubsub, client eviction: true | Memory Management | client eviction |
slave buffer are counted correctly | Replication Differences | replication-internal |
replica buffer don't induce eviction | Replication Differences | replication-internal |
propagation with eviction | Replication Differences | replication-internal |
propagation with eviction in MULTI | Replication Differences | replication-internal |
Don't rehash if used memory exceeds maxmemory after rehash | DEBUG Command | uses populate (DEBUG), dict rehashing internals |
client tracking don't cause eviction feedback loop | Memory Management | HELLO 3 + CLIENT TRACKING feedback loop |
lru/lfu value of the key just added | DEBUG Command | OBJECT IDLETIME/FREQ not tracked |
LRM: Basic write updates idle time | Redis-Specific Internals | LRM not implemented |
LRM: RENAME updates destination key LRM | Redis-Specific Internals | LRM not implemented |
LRM: XREADGROUP updates stream LRM | Redis-Specific Internals | LRM not implemented |
LRM: Keys with only read operations should be removed first | Redis-Specific Internals | LRM not implemented |
memefficiency_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
Memory efficiency with values in range $size_range | Redis-Specific Internals | allocator-calibrated ratio assertion, `external:skip` |
Active defrag main dictionary: $type | Redis-Specific Internals | jemalloc defrag not exposed in FrogDB |
Active defrag - AOF loading | Redis-Specific Internals | jemalloc defrag not exposed in FrogDB |
Active defrag eval scripts: $type | Redis-Specific Internals | jemalloc defrag not exposed in FrogDB |
Active defrag big keys: $type | Redis-Specific Internals | jemalloc defrag not exposed in FrogDB |
Active defrag pubsub: $type | Redis-Specific Internals | jemalloc defrag not exposed in FrogDB |
Active defrag IDMP streams: $type | Redis-Specific Internals | jemalloc defrag not exposed in FrogDB |
Active Defrag HFE with $eb_container: $type | Redis-Specific Internals | jemalloc defrag not exposed in FrogDB |
Active defrag for argv retained by the main thread from IO thread: $type | Redis-Specific Internals | jemalloc defrag not exposed in FrogDB |
Active defrag big list: $type | Redis-Specific Internals | jemalloc defrag not exposed in FrogDB |
Active defrag edge case: $type | Redis-Specific Internals | jemalloc defrag not exposed in FrogDB |
Active defrag can't be triggered during replicaof database flush. See issue #14267 | Redis-Specific Internals | jemalloc defrag not exposed in FrogDB |
multi_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
SWAPDB does not touch non-existing key replaced with stale key | Single Database | single-DB |
SWAPDB does not touch stale key replaced with another stale key | Single Database | single-DB |
WATCH is able to remember the DB a key belongs to | Single Database | single-DB |
MULTI and script timeout | Redis-Specific Internals | Redis-internal feature (script timeout) |
EXEC and script timeout | Redis-Specific Internals | Redis-internal feature (script timeout) |
just EXEC and script timeout | Redis-Specific Internals | Redis-internal feature (script timeout) |
exec with write commands and state change | Replication Differences | replication-internal |
exec with read commands and stale replica state change | Replication Differences | replication-internal |
EXEC with only read commands should not be rejected when OOM | Configuration Differences | needs:config-maxmemory |
EXEC with at least one use-memory command should fail | Configuration Differences | needs:config-maxmemory |
MULTI propagation of PUBLISH | Replication Differences | replication-internal |
MULTI propagation of SCRIPT LOAD | Replication Differences | replication-internal |
MULTI propagation of EVAL | Replication Differences | replication-internal |
MULTI propagation of SCRIPT FLUSH | Replication Differences | replication-internal |
MULTI propagation of XREADGROUP | Replication Differences | replication-internal |
MULTI with $cmd | Replication Differences | replication-internal (inner-command propagation matrix) |
WATCH stale keys should not fail EXEC | DEBUG Command | needs:debug |
Delete WATCHed stale keys should not fail EXEC | DEBUG Command | needs:debug |
FLUSHDB while watching stale keys should not fail EXEC | DEBUG Command | needs:debug |
SWAPDB does not touch watched stale keys | DEBUG Command | needs:debug + singledb:skip |
MULTI with BGREWRITEAOF | Persistence Differences | aof |
MULTI with config set appendonly | Persistence Differences | aof |
MULTI with config error | Redis-Specific Internals | Redis-internal CONFIG behavior |
networking_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
CONFIG SET port number | Configuration Differences | external:skip; FrogDB port is immutable |
CONFIG SET bind address | Configuration Differences | external:skip; FrogDB bind is immutable |
CONFIG SET bind-source-addr | Configuration Differences | external:skip; FrogDB does not implement bind-source-addr |
Default bind address configuration handling | Configuration Differences | external:skip; depends on CONFIG REWRITE and runtime bind mutation |
Protected mode works as expected | Configuration Differences | FrogDB 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 batch | Redis-Specific Internals | Redis-internal io-threads prefetch feature |
prefetch works as expected when changing the batch size while executing the commands batch | Redis-Specific Internals | Redis-internal io-threads prefetch feature |
no prefetch when the batch size is set to 0 | Redis-Specific Internals | Redis-internal io-threads prefetch feature |
Prefetch can resume working when the configuration option is set to a non-zero value | Redis-Specific Internals | Redis-internal io-threads prefetch feature |
Prefetch works with batch size greater than 16 (buffer overflow regression test) | Redis-Specific Internals | Redis-internal io-threads prefetch feature |
Prefetch works with maximum batch size of 128 and client number larger than batch size | Redis-Specific Internals | Redis-internal io-threads prefetch feature |
Multiple clients idle timeout test | Configuration Differences | FrogDB does not implement client-idle `timeout` config |
Pending command pool expansion and shrinking | Redis-Specific Internals | Redis-internal pending command pool; FrogDB uses Tokio channels with different sizing semantics |
other_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
Failing test | Redis-Specific Internals | `$::force_failure` helper, not a real test |
Coverage: MEMORY MALLOC-STATS | Redis-Specific Internals | jemalloc-only subcommand |
SAVE - make sure there are all the types as values | Persistence Differences | needs:save — requires RDB |
FLUSHALL should not reset the dirty counter if we disable save | Persistence Differences | needs:save — RDB dirty counter |
FLUSHALL should reset the dirty counter to 0 if we enable save | Persistence Differences | needs:save — RDB dirty counter |
FLUSHALL and bgsave | Persistence Differences | needs:save — requires BGSAVE+DEBUG SLEEP |
BGSAVE | Persistence Differences | needs:debug needs:save — DEBUG RELOAD required |
Perform a final SAVE to leave a clean DB on disk | Persistence Differences | needs:save — RDB save |
Check consistency of different data types after a reload | Persistence Differences | needs:debug — DEBUG RELOAD |
Same dataset digest if saving/reloading as AOF? | DEBUG Command | needs:debug — DEBUG DIGEST + AOF |
EXPIRES after a reload (snapshot + append only file rewrite) | Persistence Differences | needs:debug needs:save — DEBUG RELOAD + LOADAOF |
EXPIRES after AOF reload (without rewrite) | DEBUG Command | needs:debug — DEBUG LOADAOF |
FUZZ stresser with data model $fuzztype | Tested Elsewhere | slow — fuzz stresser |
SELECT an out of range DB | Single Database | singledb — SELECT non-zero rejected outright |
RESET clears client state | Protocol Differences | needs:reset — RESET not implemented |
RESET clears MONITOR state | Protocol Differences | needs:reset — RESET not implemented |
RESET clears and discards MULTI state | Protocol Differences | needs:reset — RESET not implemented |
RESET clears Pub/Sub state | Protocol Differences | needs:reset — RESET not implemented |
RESET clears authenticated state | Protocol Differences | needs:reset — RESET not implemented |
Don't rehash if redis has child process | DEBUG Command | needs:debug — DEBUG HTSTATS + fork |
Redis can trigger resizing | DEBUG Command | needs:debug — DEBUG HTSTATS + dict-resizing |
Redis can rewind and trigger smaller slot resizing | DEBUG Command | needs:debug — DEBUG HTSTATS |
Redis can resize empty dict | Redis-Specific Internals | MEMORY STATS `db.9 overhead.hashtable.main` Redis-internal |
Process title set as expected | Redis-Specific Internals | platform-specific — /proc/self/cmdline |
Cross DB command is incompatible with cluster mode | Cluster Differences | cluster:skip — multi-DB cluster metric |
Function no-cluster flag is incompatible with cluster mode | Cluster Differences | cluster:skip — no-cluster flag metric |
Script no-cluster flag is incompatible with cluster mode | Cluster Differences | cluster:skip — no-cluster flag metric |
SORT command incompatible operations with cluster mode | Cluster Differences | cluster:skip — SORT BY cluster metric |
Normal cross slot commands are incompatible with cluster mode | Cluster Differences | cluster:skip — cross-slot metric |
Transaction is incompatible with cluster mode | Cluster Differences | cluster:skip — transaction cluster metric |
Lua scripts are incompatible with cluster mode | Cluster Differences | cluster:skip — Lua cluster metric |
Shard subscribe commands are incompatible with cluster mode | Cluster Differences | cluster:skip — SSUBSCRIBE cluster metric |
cluster-compatibility-sample-ratio configuration can work | Cluster Differences | cluster:skip — sample-ratio config |
protocol_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
Protocol desync regression test #$c | Redis-Specific Internals | Redis-internal desync simulation |
Regression for a crash with blocking ops and pipelining | Replication Differences | needs:repl |
Regression for a crash with cron release of client arguments | Redis-Specific Internals | Redis-internal cron path |
RESP3 attributes | Protocol Differences | RESP3-only |
RESP3 attributes readraw | Protocol Differences | RESP3-only |
RESP3 attributes on RESP2 | Protocol Differences | RESP3-only |
test big number parsing | Protocol Differences | RESP3-only + needs:debug |
test bool parsing | Protocol Differences | RESP3-only + needs:debug |
test verbatim str parsing | Protocol Differences | RESP3-only + needs:debug |
test argument rewriting - issue 9598 | DEBUG Command | needs:debug |
pubsub_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
Keyspace notifications: we receive keyspace notifications | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: we receive keyevent notifications | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: we can receive both kind of events | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: we are able to mask events | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: general events test | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: list events test | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: set events test | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: zset events test | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: hash events test ($type) | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: stream events test | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications:FXX/FNX with HSETEX cmd | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: expired events (triggered expire) | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: expired events (background expire) | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: evicted events | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: test CONFIG GET/SET of event flags | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: new key test | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: overwritten events - string to string | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: type_changed events - hash to string | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: both overwritten and type_changed events | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: configuration flags work correctly | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: RESTORE REPLACE different type - restore, overwritten and type_changed events | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: SET on existing string key - overwritten event | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: setKey on existing different type key - overwritten and type_changed events | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: overwritten and type_changed events for RENAME and COPY commands | Configuration Differences | needs:config (notify-keyspace-events) |
Keyspace notifications: overwritten and type_changed for *STORE* commands | Configuration Differences | needs:config (notify-keyspace-events) |
Pub/Sub PING on RESP$resp | Protocol Differences | RESP3-only |
PubSub messages with CLIENT REPLY OFF | Protocol Differences | RESP3-only (CLIENT REPLY OFF push messages) |
publish to self inside multi | Protocol Differences | RESP3-only (publish-to-self requires RESP3 push) |
publish to self inside script | Protocol Differences | RESP3-only |
unsubscribe inside multi, and publish to self | Protocol Differences | RESP3-only |
querybuf_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
query buffer resized correctly | Observability Differences | introspection field not implemented (requires observable `qbuf=` growth/shrink via `DEBUG PAUSE-CRON`) |
query buffer resized correctly when not idle | Observability Differences | introspection field not implemented (requires observable `qbuf=` growth/shrink; also tagged `needs:debug`) |
query buffer resized correctly with fat argv | Observability Differences | introspection field not implemented (requires observable `qbuf=` growth for a 1MB partial argv; needs `DEBUG PAUSE-CRON`) |
replybufsize_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
verify reply buffer limits | Redis-Specific Internals | Redis-internal reply buffer sizing (requires DEBUG REPLYBUFFER and `rbs=` in CLIENT LIST) |
scan_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
{$type} SSCAN with encoding $enc | Encoding Differences | internal-encoding |
{$type} HSCAN with encoding $enc | Encoding Differences | internal-encoding |
{$type} ZSCAN with encoding $enc | Encoding Differences | internal-encoding |
{$type} SCAN with expired keys | DEBUG Command | needs:debug |
scripting_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
SORT BY <constant> output gets ordered for scripting | Scripting Differences | intentional behavioral diff (strict key validation) |
SORT BY <constant> with GET gets ordered for scripting | Scripting Differences | intentional behavioral diff (strict key validation) |
SPOP: We can call scripts rewriting client->argv from Lua | Scripting Differences | intentional behavioral diff (strict key validation) |
EXPIRE: We can call scripts rewriting client->argv from Lua | Scripting Differences | intentional behavioral diff (strict key validation) |
INCRBYFLOAT: We can call scripts expanding client->argv from Lua | Scripting Differences | intentional behavioral diff (strict key validation) |
Timedout read-only scripts can be killed by SCRIPT KILL | Redis-Specific Internals | Redis-internal feature |
Timedout read-only scripts can be killed by SCRIPT KILL even when use pcall | Redis-Specific Internals | Redis-internal feature |
Timedout script does not cause a false dead client | Redis-Specific Internals | Redis-internal feature |
Timedout script link is still usable after Lua returns | Redis-Specific Internals | Redis-internal feature |
Timedout scripts and unblocked command | Redis-Specific Internals | Redis-internal feature |
Timedout scripts that modified data can't be killed by SCRIPT KILL | Redis-Specific Internals | Redis-internal feature |
SHUTDOWN NOSAVE can kill a timedout script anyway | Redis-Specific Internals | Redis-internal feature |
Test setfenv availability lua-enable-deprecated-api=$enabled | Redis-Specific Internals | Redis-internal feature |
Test getfenv availability lua-enable-deprecated-api=$enabled | Redis-Specific Internals | Redis-internal feature |
Test newproxy availability lua-enable-deprecated-api=$enabled | Redis-Specific Internals | Redis-internal feature |
Verify Lua performs GC correctly after script loading | Redis-Specific Internals | Redis-internal Lua runtime |
reject script do not cause a Lua stack leak | Redis-Specific Internals | Redis-internal Lua runtime |
LUA test trim string as expected | Redis-Specific Internals | Redis-internal Lua runtime |
Functions in the Redis namespace are able to report errors | Redis-Specific Internals | Redis-internal Lua runtime |
MGET: mget shouldn't be propagated in Lua | Replication Differences | replication-internal |
not enough good replicas | Replication Differences | needs:repl (min-slaves-to-write) |
not enough good replicas state change during long script | Replication Differences | needs:repl |
Script with RESP3 map | Protocol Differences | RESP3-only |
Script return recursive object | Protocol Differences | RESP3-only |
Script - disallow write on OOM | Configuration Differences | needs:config-maxmemory |
Script ACL check | Scripting Differences | needs:ACL (script-level ACL filtering) |
set_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
SADD overflows the maximum allowed elements in a listpack - $type | Encoding Differences | internal-encoding (listpack) |
Set encoding after DEBUG RELOAD | Encoding Differences | internal-encoding + needs:debug |
Generated sets must be encoded correctly - $type | Encoding Differences | internal-encoding |
SDIFFSTORE with three sets - $type | Encoding Differences | internal-encoding |
SUNION hashtable and listpack | Encoding Differences | internal-encoding |
SRANDMEMBER - $type | Encoding Differences | internal-encoding |
SPOP integer from listpack set | Encoding Differences | internal-encoding (listpack) |
SPOP new implementation: code path #1 $type | Encoding Differences | internal-encoding |
SPOP new implementation: code path #2 $type | Encoding Differences | internal-encoding |
SPOP new implementation: code path #3 $type | Encoding Differences | internal-encoding |
SRANDMEMBER histogram distribution - $type | Encoding Differences | internal-encoding (chi-square) |
SRANDMEMBER with a dict containing long chain | Encoding Differences | internal-encoding (hash collision) |
SDIFF fuzzing | Tested Elsewhere | fuzzing/stress |
SPOP new implementation: code path #1 propagate as DEL or UNLINK | Replication Differences | replication-internal |
SMOVE only notify dstset when the addition is successful | Configuration Differences | needs:config (notify-keyspace-events) |
SMISMEMBER requires one or more members | Redis-Specific Internals | Redis-internal arity error format |
slowlog_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
SLOWLOG - Certain commands are omitted that contain sensitive information | Replication Differences | needs: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 fields | Replication Differences | needs:repl tag (MIGRATE AUTH/AUTH2 redaction) |
SLOWLOG - Rewritten commands are logged as their original command | Observability Differences | tests 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 commands | Observability Differences | FrogDB logs each command inside a MULTI/EXEC block individually but does not skip the enclosing EXEC |
SLOWLOG - blocking command is reported only after unblocked | Observability Differences | FrogDB logs blocking commands at submit time, not after unblock |
sort_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
$command GET <const> | Encoding Differences | internal-encoding (encoding-loop variant) |
SORT will complain with numerical sorting and bad doubles (1) | Redis-Specific Internals | Redis-internal error message format |
SORT will complain with numerical sorting and bad doubles (2) | Redis-Specific Internals | Redis-internal error message format |
SETRANGE with huge offset | Tested Elsewhere | large-memory |
sort by in cluster mode | Cluster Differences | cluster-only (different cluster command path) |
stream_cgroups_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
XREADGROUP CLAIM field types are correct | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM respects min-idle-time threshold | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM without messages | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM without pending messages | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM message response format | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM idle time | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM with NOACK | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM with NOACK and pending messages | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM with min-idle-time equal to zero | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM with large min-idle-time | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM with not integer for min-idle-time | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM with negative integer for min-idle-time | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM with different position | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM verify forced entries are claimable | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM with two blocked clients | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM claims all pending immediately | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM verify claiming order | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM when pending messages get trimmed | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM state persists across RDB save/load | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM idle time resets after RDB reload | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM multiple groups persist correctly | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM NOACK state not persisted | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM high delivery counts persist in RDB | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM usage stability with repeated claims | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM with large number of PEL messages | Redis-Specific Internals | Redis-internal feature |
XREADGROUP CLAIM within MULTI/EXEC transaction | Redis-Specific Internals | Redis-internal feature |
XREAD with CLAIM option | Redis-Specific Internals | Redis-internal feature |
XACKDEL wrong number of args | Redis-Specific Internals | Redis-internal feature |
XACKDEL with DELREF option acknowledges will remove entry from all PELs | Redis-Specific Internals | Redis-internal feature |
XACKDEL with ACKED option only deletes messages acknowledged by all groups | Redis-Specific Internals | Redis-internal feature |
XACKDEL with KEEPREF | Redis-Specific Internals | Redis-internal feature |
XACKDEL with IDs exceeding STREAMID_STATIC_VECTOR_LEN for heap allocation | Redis-Specific Internals | Redis-internal feature |
XGROUP SETID with ENTRIESREAD larger than stream entries should cap the value | Redis-Specific Internals | Redis-internal feature |
XREADGROUP of multiple entries changes dirty by one | Redis-Specific Internals | Redis-internal stat (dirty counter) |
XREADGROUP from PEL does not change dirty | Redis-Specific Internals | Redis-internal stat (dirty counter) |
Loading from legacy (Redis <= v6.2.x, rdb_ver < 10) persistence | Encoding Differences | internal-encoding (RDB) |
Loading from legacy (Redis <= v7.0.x, rdb_ver < 11) persistence | Encoding Differences | internal-encoding (RDB) |
stream_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
XADD IDMP with invalid syntax | Redis-Specific Internals | Redis-internal feature |
XADD IDMP basic addition | Redis-Specific Internals | Redis-internal feature |
XADD IDMP with binary-safe iid | Redis-Specific Internals | Redis-internal feature |
XADD IDMP with maximum length iid | Redis-Specific Internals | Redis-internal feature |
XADD IDMP with combined options | Redis-Specific Internals | Redis-internal feature |
XADD IDMP argument order variations | Redis-Specific Internals | Redis-internal feature |
XADD IDMP concurrent duplicate requests | Redis-Specific Internals | Redis-internal feature |
XADD IDMP pipelined requests | Redis-Specific Internals | Redis-internal feature |
XADD IDMP with consumer groups | Redis-Specific Internals | Redis-internal feature |
XADD IDMP persists in RDB | Redis-Specific Internals | Redis-internal feature |
XADD IDMP set in AOF | Redis-Specific Internals | Redis-internal feature |
XADD IDMP multiple producers have isolated namespaces | Redis-Specific Internals | Redis-internal feature |
XADD IDMP multiple producers each have their own MAXSIZE limit | Redis-Specific Internals | Redis-internal feature |
XADD IDMP multiple producers persistence in RDB | Redis-Specific Internals | Redis-internal feature |
XADD IDMP multiple producers concurrent access | Redis-Specific Internals | Redis-internal feature |
XADD IDMP multiple producers pipelined requests | Redis-Specific Internals | Redis-internal feature |
XADD IDMP multiple producers with mixed IDMP and IDMPAUTO | Redis-Specific Internals | Redis-internal feature |
XADD IDMP multiple producers stress test | Redis-Specific Internals | Redis-internal feature |
XADD IDMPAUTO with invalid syntax | Redis-Specific Internals | Redis-internal feature |
XADD IDMPAUTO basic deduplication based on field-value pairs | Redis-Specific Internals | Redis-internal feature |
XADD IDMPAUTO deduplicates regardless of field order | Redis-Specific Internals | Redis-internal feature |
XADD IDMPAUTO with single field-value pair | Redis-Specific Internals | Redis-internal feature |
XADD IDMPAUTO with many field-value pairs | Redis-Specific Internals | Redis-internal feature |
XADD IDMPAUTO with binary-safe values | Redis-Specific Internals | Redis-internal feature |
XADD IDMPAUTO with unicode values | Redis-Specific Internals | Redis-internal feature |
XADD IDMPAUTO with long values | Redis-Specific Internals | Redis-internal feature |
XADD IDMPAUTO argument order variations | Redis-Specific Internals | Redis-internal feature |
XADD IDMPAUTO persists in RDB | Redis-Specific Internals | Redis-internal feature |
XADD IDMPAUTO with consumer groups | Redis-Specific Internals | Redis-internal feature |
XADD IDMPAUTO field names matter | Redis-Specific Internals | Redis-internal feature |
XADD IDMPAUTO with numeric field names and values | Redis-Specific Internals | Redis-internal feature |
XADD IDMPAUTO multiple producers have isolated namespaces | Redis-Specific Internals | Redis-internal feature |
XADD IDMPAUTO multiple producers | Redis-Specific Internals | Redis-internal feature |
XIDMP entries expire after DURATION seconds | Redis-Specific Internals | Redis-internal feature |
XIDMP set evicts entries when MAXSIZE is reached | Redis-Specific Internals | Redis-internal feature |
XCFGSET set IDMP-DURATION successfully | Redis-Specific Internals | Redis-internal feature |
XCFGSET set IDMP-MAXSIZE successfully | Redis-Specific Internals | Redis-internal feature |
XCFGSET set both IDMP-DURATION and IDMP-MAXSIZE | Redis-Specific Internals | Redis-internal feature |
XCFGSET IDMP-DURATION maximum value validation | Redis-Specific Internals | Redis-internal feature |
XCFGSET IDMP-DURATION minimum value validation | Redis-Specific Internals | Redis-internal feature |
XCFGSET IDMP-MAXSIZE maximum value validation | Redis-Specific Internals | Redis-internal feature |
XCFGSET IDMP-MAXSIZE minimum value validation | Redis-Specific Internals | Redis-internal feature |
XCFGSET invalid syntax | Redis-Specific Internals | Redis-internal feature |
XCFGSET multiple configuration changes | Redis-Specific Internals | Redis-internal feature |
XCFGSET configuration persists in RDB | Redis-Specific Internals | Redis-internal feature |
XCFGSET configuration in AOF | Redis-Specific Internals | Redis-internal feature |
XCFGSET changing IDMP-DURATION clears all iids history | Redis-Specific Internals | Redis-internal feature |
XCFGSET changing IDMP-MAXSIZE clears all iids history | Redis-Specific Internals | Redis-internal feature |
XCFGSET history cleared then new deduplication works | Redis-Specific Internals | Redis-internal feature |
XCFGSET history cleared preserves stream entries | Redis-Specific Internals | Redis-internal feature |
XCFGSET setting same IDMP-DURATION does not clear iids history | Redis-Specific Internals | Redis-internal feature |
XCFGSET setting same IDMP-MAXSIZE does not clear iids history | Redis-Specific Internals | Redis-internal feature |
XCFGSET repeated same-value calls preserve IDMP history | Redis-Specific Internals | Redis-internal feature |
XCFGSET changing value after same-value sets still clears history | Redis-Specific Internals | Redis-internal feature |
XCFGSET setting same value preserves iids-tracked count | Redis-Specific Internals | Redis-internal feature |
XCFGSET IDMP-MAXSIZE wraparound keeps last 8 entries | Redis-Specific Internals | Redis-internal feature |
XCFGSET clears all producer histories | Redis-Specific Internals | Redis-internal feature |
XINFO STREAM shows IDMP configuration parameters | Redis-Specific Internals | Redis-internal feature |
XINFO STREAM shows default IDMP parameters | Redis-Specific Internals | Redis-internal feature |
XINFO STREAM returns iids-tracked and iids-added fields | Redis-Specific Internals | Redis-internal feature |
XINFO STREAM iids-added is lifetime counter even after eviction | Redis-Specific Internals | Redis-internal feature |
XINFO STREAM iids-duplicates is lifetime counter | Redis-Specific Internals | Redis-internal feature |
XINFO STREAM iids-duplicates persists after eviction | Redis-Specific Internals | Redis-internal feature |
XINFO STREAM iids-duplicates with multiple producers | Redis-Specific Internals | Redis-internal feature |
XINFO STREAM iids counters after CFGSET clears history | Redis-Specific Internals | Redis-internal feature |
XINFO STREAM iids-added persists in RDB | Redis-Specific Internals | Redis-internal feature |
XINFO STREAM returns pids-tracked field | Redis-Specific Internals | Redis-internal feature |
XINFO STREAM FULL returns pids-tracked field | Redis-Specific Internals | Redis-internal feature |
XINFO STREAM iids-tracked counts across all producers | Redis-Specific Internals | Redis-internal feature |
XINFO STREAM returns idmp-duration and idmp-maxsize fields | Redis-Specific Internals | Redis-internal feature |
CONFIG SET stream-idmp-duration and stream-idmp-maxsize validation | Redis-Specific Internals | Redis-internal feature |
XDELEX should return empty array when key doesn't exist | Redis-Specific Internals | Redis-internal feature |
XDELEX IDS parameter validation | Redis-Specific Internals | Redis-internal feature |
XDELEX KEEPREF/DELREF/ACKED parameter validation | Redis-Specific Internals | Redis-internal feature |
XDELEX with DELREF option acknowledges will remove entry from all PELs | Redis-Specific Internals | Redis-internal feature |
XDELEX with ACKED option only deletes messages acknowledged by all groups | Redis-Specific Internals | Redis-internal feature |
XDELEX with ACKED option won't delete messages when new consumer groups are created | Redis-Specific Internals | Redis-internal feature |
XDELEX with KEEPREF | Redis-Specific Internals | Redis-internal feature |
XADD with LIMIT consecutive calls | Encoding Differences | internal-encoding (uses stream-node-max-entries) |
XDEL fuzz test | Tested Elsewhere | fuzzing/stress |
XRANGE fuzzing | Tested Elsewhere | fuzzing/stress |
string_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
GETEX without argument does not propagate to replica | Replication Differences | replication-internal |
DELEX propagate as DEL command to replica | Replication Differences | replication-internal |
SETBIT fuzzing | Tested Elsewhere | fuzzing/stress |
GETRANGE fuzzing | Tested Elsewhere | fuzzing/stress |
MEMORY USAGE - STRINGS | Redis-Specific Internals | Redis-internal allocator |
Check MEMORY USAGE for embedded key strings with jemalloc | Redis-Specific Internals | Redis-internal allocator |
DELEX with binary data | Redis-Specific Internals | Redis-internal feature |
DELEX with unicode characters | Redis-Specific Internals | Redis-internal feature |
DELEX with special characters and whitespace | Redis-Specific Internals | Redis-internal feature |
DELEX digest consistency with same content | Redis-Specific Internals | Redis-internal feature |
DELEX digest with different content | Redis-Specific Internals | Redis-internal feature |
DIGEST with binary data | Redis-Specific Internals | Redis-internal feature |
DIGEST with unicode characters | Redis-Specific Internals | Redis-internal feature |
DIGEST with special characters and whitespace | Redis-Specific Internals | Redis-internal feature |
MSETEX - flexible argument parsing | Redis-Specific Internals | Redis-internal feature |
MSETEX - overflow protection in numkeys | Redis-Specific Internals | Redis-internal feature |
violations_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
XADD one huge field | Tested Elsewhere | large-memory tag — out of scope for unit tests |
XADD one huge field - 1 | Tested Elsewhere | large-memory tag — out of scope for unit tests |
several XADD big fields | Tested Elsewhere | large-memory tag — out of scope for unit tests |
single XADD big fields | Tested Elsewhere | large-memory tag — out of scope for unit tests |
hash with many big fields | Tested Elsewhere | large-memory tag — out of scope for unit tests |
hash with one huge field | Tested Elsewhere | large-memory tag — out of scope for unit tests |
zset_tcl.rs
| Excluded Test | Category | Reason |
|---|---|---|
Check encoding - $encoding | Encoding Differences | internal-encoding |
ZADD with options syntax error with incomplete pair - $encoding | Encoding Differences | internal-encoding |
ZINCRBY accepts hexadecimal inputs - $encoding | Encoding Differences | internal-encoding |
ZINCRBY against invalid incr value - $encoding | Encoding Differences | internal-encoding |
ZRANGEBYLEX with LIMIT - $encoding | Encoding Differences | internal-encoding |
ZUNIONSTORE with AGGREGATE MIN - $encoding | Encoding Differences | internal-encoding |
ZUNIONSTORE with AGGREGATE MAX - $encoding | Encoding Differences | internal-encoding |
ZINTERSTORE with weights - $encoding | Encoding Differences | internal-encoding |
ZINTERSTORE with a regular set and weights - $encoding | Encoding Differences | internal-encoding |
ZINTERSTORE with AGGREGATE MIN - $encoding | Encoding Differences | internal-encoding |
ZINTERSTORE with AGGREGATE MAX - $encoding | Encoding Differences | internal-encoding |
$cmd with +inf/-inf scores - $encoding | Encoding Differences | internal-encoding |
$cmd with NaN weights - $encoding | Encoding Differences | internal-encoding |
ZDIFFSTORE with a regular set - $encoding | Encoding Differences | internal-encoding |
ZSCORE - $encoding | Encoding Differences | internal-encoding |
ZMSCORE - $encoding | Encoding Differences | internal-encoding |
Basic $popmin/$popmax with a single key - $encoding | Encoding Differences | internal-encoding |
$popmin/$popmax with count - $encoding | Encoding Differences | internal-encoding |
$popmin/$popmax with a single existing sorted set - $encoding | Encoding Differences | internal-encoding |
$popmin/$popmax with multiple existing sorted sets - $encoding | Encoding Differences | internal-encoding |
$popmin/$popmax second sorted set has members - $encoding | Encoding Differences | internal-encoding |
ZRANDMEMBER - $type | Encoding Differences | internal-encoding |
ZADD overflows the maximum allowed elements in a listpack - $type | Encoding Differences | internal-encoding (listpack) |
ZRANGESTORE with zset-max-listpack-entries 0 #10767 case | Encoding Differences | internal-encoding (listpack) |
ZINTER RESP3 - $encoding | Protocol Differences | RESP3-only |
Basic $popmin/$popmax - $encoding RESP3 | Protocol Differences | RESP3-only |
$popmin/$popmax with count - $encoding RESP3 | Protocol Differences | RESP3-only |
$popmin/$popmax - $encoding RESP3 | Protocol Differences | RESP3-only |
BZPOPMIN/BZPOPMAX readraw in RESP$resp | Protocol Differences | RESP3-only |
ZMPOP readraw in RESP$resp | Protocol Differences | RESP3-only |
BZMPOP readraw in RESP$resp | Protocol Differences | RESP3-only |
ZRANGESTORE RESP3 | Protocol Differences | RESP3-only |
ZRANDMEMBER with RESP3 | Protocol Differences | RESP3-only |
ZMPOP propagate as pop with count command to replica | Replication Differences | replication-internal |
BZMPOP propagate as pop with count command to replica | Replication Differences | replication-internal |
ZSETs skiplist implementation backlink consistency test - $encoding | Encoding Differences | internal-encoding |
ZSETs ZRANK augmented skip list stress testing - $encoding | Tested Elsewhere | internal-encoding (stress) |
ZSET skiplist order consistency when elements are moved | Encoding Differences | internal-encoding |
ZSCORE after a DEBUG RELOAD - $encoding | DEBUG Command | needs:debug |
ZSET sorting stresser - $encoding | Tested Elsewhere | fuzzing/stress |
ZRANGEBYSCORE fuzzy test, 100 ranges in $elements element sorted set - $encoding | Tested Elsewhere | fuzzing/stress |
ZRANGEBYLEX fuzzy test, 100 ranges in $elements element sorted set - $encoding | Tested Elsewhere | fuzzing/stress |
ZREMRANGEBYLEX fuzzy test, 100 ranges in $elements element sorted set - $encoding | Tested Elsewhere | fuzzing/stress |
ZDIFF fuzzing - $encoding | Tested Elsewhere | fuzzing/stress |
ZUNIONSTORE result is sorted | Redis-Specific Internals | Redis-internal ordering invariant |
zunionInterDiffGenericCommand acts on SET and ZSET | Redis-Specific Internals | Redis-internal command name |
ZRANGESTORE invalid syntax | Redis-Specific Internals | Redis-internal syntax-error format |
ZRANGE invalid syntax | Redis-Specific Internals | Redis-internal syntax-error format |
$pop with the count 0 returns an empty array | Scripting Differences | intentional behavioral diff (count=0 edge) |