From 54b36868bac0b2be5fff9ec054e2474297d31e9c Mon Sep 17 00:00:00 2001 From: VivekSainiEQ Date: Mon, 30 Nov 2020 20:58:00 +0000 Subject: [PATCH] Added tests for saving various data types to disk and loading them back, and for loading data types from redis to maintain compatibility Former-commit-id: dcb44d3a09a4021f05079bedbac690e33ec7f39e --- tests/assets/redis-save.rdb | Bin 0 -> 268 bytes tests/test_helper.tcl | 1 + tests/unit/loadsave.tcl | 50 ++++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 tests/assets/redis-save.rdb create mode 100644 tests/unit/loadsave.tcl diff --git a/tests/assets/redis-save.rdb b/tests/assets/redis-save.rdb new file mode 100644 index 0000000000000000000000000000000000000000..efcbb6de43df678e4a39291feffede5a4e1a6c81 GIT binary patch literal 268 zcmWG?b@2=~Ffg$E#aWb^l3A=fx&=k4iMdHRsRtPTG5ls{U|=gQDay=CXLEFNHZ(Hk zVW}!kEs>ODU|i%S?qMS(hmfS8qm;TzLerY}sNnLhnzV9v}dIdq9>nkO$yMq+V>vNBMG48&{} mpxK6OEI^}yB#>b2`mCu^1s!lB+pl9wgdog3RD#U literal 0 HcmV?d00001 diff --git a/tests/test_helper.tcl b/tests/test_helper.tcl index 6ee5572e1..a148d7bc1 100644 --- a/tests/test_helper.tcl +++ b/tests/test_helper.tcl @@ -76,6 +76,7 @@ set ::all_tests { unit/tls unit/tracking unit/oom-score-adj + unit/loadsave } # Index to the next test to run in the ::all_tests list. set ::next_test 0 diff --git a/tests/unit/loadsave.tcl b/tests/unit/loadsave.tcl new file mode 100644 index 000000000..8ef4fd1e8 --- /dev/null +++ b/tests/unit/loadsave.tcl @@ -0,0 +1,50 @@ +set server_path [tmpdir "server.rdb-encoding-test"] +set testmodule [file normalize tests/modules/datatype.so] + +# Store a bunch of datatypes to the database, +# compute the hash of the database, +# and save the data to a file +start_server [list tags [list "loadsave"] overrides [list "dir" $server_path "loadmodule" $testmodule] keep_persistence true] { + + test "Save various data types to .rdb file" { + r set "int" [expr {int(rand()*10000)}] + r set "string" [string repeat A [expr {int(rand()*10000)}]] + r hset "hash" [string repeat A [expr {int(rand()*1000)}]] 0[string repeat A [expr {int(rand()*1000)}]] + r sadd "set" [string repeat A [expr {int(rand()*1000)}]] + r zadd "zset" [expr {rand()}] [string repeat A [expr {int(rand()*1000)}]] + r lpush "list" [string repeat A [expr {int(rand()*1000)}]] + r datatype.set dtkey 100 stringval + r keydb.cron "cron" single [expr {10000 + int(rand()*1000)}] "return 0" 0;# set delay long enough so it doesn't contend with saving + set saved_digest [r debug digest];# debug digest computes the hash + r save + } {OK}; +} + +# Load that data back from the file, +# and compare its hash to the previously computed hash +start_server [list tags [list "loadsave"] overrides [list "dir" $server_path "loadmodule" $testmodule] keep_persistence true] { + test "Load various data types from .rdb file" { + set loaded_digest [r debug digest] + if {![string match $saved_digest $loaded_digest]} { + fail "Loaded data did not match saved data" + } + } +} + +# Load in data from a redis instance +# The hash should match what we get in redis +set saved_digest 26ce4a819a86355af7ec75c7a3410f5b9fad02f3 +exec cp -f tests/assets/redis-save.rdb $server_path/dump.rdb + +start_server [list tags [list "loadsave"] overrides [list "dir" $server_path "loadmodule" $testmodule] keep_persistence true] { + test "Load various data types from Redis generated .rdb file" { + set loaded_digest [r debug digest] + if {![string match $saved_digest $loaded_digest]} { + fail "Loaded data did not match saved data" + } + } +} + +puts $server_path + +