diff --git a/tests/test_helper.tcl b/tests/test_helper.tcl index d600abf0ad0c89fb9b10b4e312fab30faf383873..9647511e55c2c5406d69775088b6db43c79b363c 100644 --- a/tests/test_helper.tcl +++ b/tests/test_helper.tcl @@ -51,6 +51,7 @@ set ::all_tests { unit/bitops unit/memefficiency unit/hyperloglog + unit/lazyfree } # Index to the next test to run in the ::all_tests list. set ::next_test 0 diff --git a/tests/unit/lazyfree.tcl b/tests/unit/lazyfree.tcl new file mode 100644 index 0000000000000000000000000000000000000000..4e994494b5219e6993a7c48ac234456347ca7be2 --- /dev/null +++ b/tests/unit/lazyfree.tcl @@ -0,0 +1,39 @@ +start_server {tags {"lazyfree"}} { + test "UNLINK can reclaim memory in background" { + set orig_mem [s used_memory] + set args {} + for {set i 0} {$i < 100000} {incr i} { + lappend args $i + } + r sadd myset {*}$args + assert {[r scard myset] == 100000} + set peak_mem [s used_memory] + assert {[r unlink myset] == 1} + assert {$peak_mem > $orig_mem+1000000} + wait_for_condition 50 100 { + [s used_memory] < $peak_mem && + [s used_memory] < $orig_mem*2 + } else { + fail "Memory is not reclaimed by UNLINK" + } + } + + test "FLUSHDB ASYNC can reclaim memory in background" { + set orig_mem [s used_memory] + set args {} + for {set i 0} {$i < 100000} {incr i} { + lappend args $i + } + r sadd myset {*}$args + assert {[r scard myset] == 100000} + set peak_mem [s used_memory] + r flushdb async + assert {$peak_mem > $orig_mem+1000000} + wait_for_condition 50 100 { + [s used_memory] < $peak_mem && + [s used_memory] < $orig_mem*2 + } else { + fail "Memory is not reclaimed by FLUSHDB ASYNC" + } + } +}