]> git.saurik.com Git - redis.git/blobdiff - tests/unit/obuf-limits.tcl
BITCOUNT: fix segmentation fault.
[redis.git] / tests / unit / obuf-limits.tcl
index e687752c05ee98f4d456e840534427941ce12812..e965e892dca2bba7ee86be8c4813aedf5d242528 100644 (file)
@@ -1,5 +1,5 @@
 start_server {tags {"obuf-limits"}} {
 start_server {tags {"obuf-limits"}} {
-    test {Test that client output buffer hard limit is enforced} {
+    test {Client output buffer hard limit is enforced} {
         r config set client-output-buffer-limit {pubsub 100000 0 0}
         set rd1 [redis_deferring_client]
 
         r config set client-output-buffer-limit {pubsub 100000 0 0}
         set rd1 [redis_deferring_client]
 
@@ -15,7 +15,59 @@ start_server {tags {"obuf-limits"}} {
             if {![regexp {omem=([0-9]+)} $c - omem]} break
             if {$omem > 200000} break
         }
             if {![regexp {omem=([0-9]+)} $c - omem]} break
             if {$omem > 200000} break
         }
-        assert {$omem >= 100000 && $omem < 200000}
+        assert {$omem >= 99000 && $omem < 200000}
+        $rd1 close
+    }
+
+    test {Client output buffer soft limit is not enforced if time is not overreached} {
+        r config set client-output-buffer-limit {pubsub 0 100000 10}
+        set rd1 [redis_deferring_client]
+
+        $rd1 subscribe foo
+        set reply [$rd1 read]
+        assert {$reply eq "subscribe foo 1"}
+
+        set omem 0
+        set start_time 0
+        set time_elapsed 0
+        while 1 {
+            r publish foo bar
+            set clients [split [r client list] "\r\n"]
+            set c [split [lindex $clients 1] " "]
+            if {![regexp {omem=([0-9]+)} $c - omem]} break
+            if {$omem > 100000} {
+                if {$start_time == 0} {set start_time [clock seconds]}
+                set time_elapsed [expr {[clock seconds]-$start_time}]
+                if {$time_elapsed >= 5} break
+            }
+        }
+        assert {$omem >= 100000 && $time_elapsed >= 5 && $time_elapsed <= 10}
+        $rd1 close
+    }
+
+    test {Client output buffer soft limit is enforced if time is overreached} {
+        r config set client-output-buffer-limit {pubsub 0 100000 3}
+        set rd1 [redis_deferring_client]
+
+        $rd1 subscribe foo
+        set reply [$rd1 read]
+        assert {$reply eq "subscribe foo 1"}
+
+        set omem 0
+        set start_time 0
+        set time_elapsed 0
+        while 1 {
+            r publish foo bar
+            set clients [split [r client list] "\r\n"]
+            set c [split [lindex $clients 1] " "]
+            if {![regexp {omem=([0-9]+)} $c - omem]} break
+            if {$omem > 100000} {
+                if {$start_time == 0} {set start_time [clock seconds]}
+                set time_elapsed [expr {[clock seconds]-$start_time}]
+                if {$time_elapsed >= 10} break
+            }
+        }
+        assert {$omem >= 100000 && $time_elapsed < 6}
         $rd1 close
     }
 }
         $rd1 close
     }
 }