diff --git a/tests/integration/rdb.tcl b/tests/integration/rdb.tcl index 58dc6c968..d29f9d88e 100644 --- a/tests/integration/rdb.tcl +++ b/tests/integration/rdb.tcl @@ -49,13 +49,22 @@ start_server [list overrides [list "dir" $server_path] keep_persistence true] { } } r xgroup create stream mygroup 0 - r xreadgroup GROUP mygroup Alice COUNT 1 STREAMS stream > + set records [r xreadgroup GROUP mygroup Alice COUNT 2 STREAMS stream >] + r xack stream mygroup [lindex [lindex [lindex [lindex $records 0] 1] 0] 0] set digest [r debug digest] + r config set sanitize-dump-payload no r debug reload set newdigest [r debug digest] assert {$digest eq $newdigest} - r del stream } + test {Test RDB stream encoding - sanitize dump} { + r config set sanitize-dump-payload yes + r debug reload + set newdigest [r debug digest] + assert {$digest eq $newdigest} + } + # delete the stream, maybe valgrind will find something + r del stream } # Helper function to start a server and kill it, just to check the error diff --git a/tests/unit/type/hash.tcl b/tests/unit/type/hash.tcl index 257404ea3..79e58301a 100644 --- a/tests/unit/type/hash.tcl +++ b/tests/unit/type/hash.tcl @@ -540,4 +540,55 @@ start_server {tags {"hash"}} { assert {[r hincrbyfloat myhash float -0.1] eq {1.9}} } } + + test {Hash ziplist of various encodings} { + r del k + r config set hash-max-ziplist-entries 1000000000 + r config set hash-max-ziplist-value 1000000000 + r hset k ZIP_INT_8B 127 + r hset k ZIP_INT_16B 32767 + r hset k ZIP_INT_32B 2147483647 + r hset k ZIP_INT_64B 9223372036854775808 + r hset k ZIP_INT_IMM_MIN 0 + r hset k ZIP_INT_IMM_MAX 12 + r hset k ZIP_STR_06B [string repeat x 31] + r hset k ZIP_STR_14B [string repeat x 8191] + r hset k ZIP_STR_32B [string repeat x 65535] + set k [r hgetall k] + set dump [r dump k] + + # will be converted to dict at RESTORE + r config set hash-max-ziplist-entries 2 + r config set sanitize-dump-payload no + r restore kk 0 $dump + set kk [r hgetall kk] + + # make sure the values are right + assert_equal [lsort $k] [lsort $kk] + assert_equal [dict get $k ZIP_STR_06B] [string repeat x 31] + set k [dict remove $k ZIP_STR_06B] + assert_equal [dict get $k ZIP_STR_14B] [string repeat x 8191] + set k [dict remove $k ZIP_STR_14B] + assert_equal [dict get $k ZIP_STR_32B] [string repeat x 65535] + set k [dict remove $k ZIP_STR_32B] + set _ $k + } {ZIP_INT_8B 127 ZIP_INT_16B 32767 ZIP_INT_32B 2147483647 ZIP_INT_64B 9223372036854775808 ZIP_INT_IMM_MIN 0 ZIP_INT_IMM_MAX 12} + + test {Hash ziplist of various encodings - sanitize dump} { + r config set sanitize-dump-payload yes + r restore kk 0 $dump replace + set k [r hgetall k] + set kk [r hgetall kk] + + # make sure the values are right + assert_equal [lsort $k] [lsort $kk] + assert_equal [dict get $k ZIP_STR_06B] [string repeat x 31] + set k [dict remove $k ZIP_STR_06B] + assert_equal [dict get $k ZIP_STR_14B] [string repeat x 8191] + set k [dict remove $k ZIP_STR_14B] + assert_equal [dict get $k ZIP_STR_32B] [string repeat x 65535] + set k [dict remove $k ZIP_STR_32B] + set _ $k + } {ZIP_INT_8B 127 ZIP_INT_16B 32767 ZIP_INT_32B 2147483647 ZIP_INT_64B 9223372036854775808 ZIP_INT_IMM_MIN 0 ZIP_INT_IMM_MAX 12} + } diff --git a/tests/unit/type/list.tcl b/tests/unit/type/list.tcl index 600a7ce70..61ca23377 100644 --- a/tests/unit/type/list.tcl +++ b/tests/unit/type/list.tcl @@ -1089,4 +1089,52 @@ start_server { r lpush l foo assert_equal {l foo} [$rd read] } {} + + test {List ziplist of various encodings} { + r del k + r lpush k 127 ;# ZIP_INT_8B + r lpush k 32767 ;# ZIP_INT_16B + r lpush k 2147483647 ;# ZIP_INT_32B + r lpush k 9223372036854775808 ;# ZIP_INT_64B + r lpush k 0 ;# ZIP_INT_IMM_MIN + r lpush k 12 ;# ZIP_INT_IMM_MAX + r lpush k [string repeat x 31] ;# ZIP_STR_06B + r lpush k [string repeat x 8191] ;# ZIP_STR_14B + r lpush k [string repeat x 65535] ;# ZIP_STR_32B + set k [r lrange k 0 -1] + set dump [r dump k] + + r config set sanitize-dump-payload no + r restore kk 0 $dump + set kk [r lrange kk 0 -1] + + # try some forward and backward searches to make sure all encodings + # can be traversed + assert_equal [r lindex kk 5] {9223372036854775808} + assert_equal [r lindex kk -5] {0} + assert_equal [r lpos kk foo rank 1] {} + assert_equal [r lpos kk foo rank -1] {} + + # make sure the values are right + assert_equal $k $kk + assert_equal [lpop k] [string repeat x 65535] + assert_equal [lpop k] [string repeat x 8191] + assert_equal [lpop k] [string repeat x 31] + set _ $k + } {12 0 9223372036854775808 2147483647 32767 127} + + test {List ziplist of various encodings - sanitize dump} { + r config set sanitize-dump-payload yes + r restore kk 0 $dump replace + set k [r lrange k 0 -1] + set kk [r lrange kk 0 -1] + + # make sure the values are right + assert_equal $k $kk + assert_equal [lpop k] [string repeat x 65535] + assert_equal [lpop k] [string repeat x 8191] + assert_equal [lpop k] [string repeat x 31] + set _ $k + } {12 0 9223372036854775808 2147483647 32767 127} + }