summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/test_helper.tcl1
-rw-r--r--tests/unit/lazyfree.tcl39
2 files changed, 40 insertions, 0 deletions
diff --git a/tests/test_helper.tcl b/tests/test_helper.tcl
index d600abf0a..9647511e5 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 000000000..4e994494b
--- /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"
+ }
+ }
+}