Sanitize dump payload: improve tests of ziplist and stream encodings

- improve stream rdb encoding test to include more types of stream metadata
- add test to cover various ziplist encoding entries (although it does
  look like the stress test above it is able to find some too
- add another test for ziplist encoding for hash with full sanitization
- add similar ziplist encoding tests for list
This commit is contained in:
Oran Agra 2020-11-22 20:58:33 +02:00
parent ca1c182567
commit 01c13bddea
3 changed files with 110 additions and 2 deletions

View File

@ -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

View File

@ -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}
}

View File

@ -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}
}