mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-22 16:18:28 -05:00
4f4676a142
Now clients that are ready to be terminated asynchronously are processed more often in beforeSleep() instead of being processed in serverCron(). This means that the test will not be able to catch the moment the client was terminated, also note that the 'omem' figure now changes in big steps, because of the new client output buffers layout. So we have to change the test range in order to accomodate for that. Yet the test is useful enough to be worth taking, even if its precision is reduced by this commit. Probably if we get more problems, a thing that makes sense is just to check that the limit is < 200k. That's more than enough actually.
74 lines
2.4 KiB
Tcl
74 lines
2.4 KiB
Tcl
start_server {tags {"obuf-limits"}} {
|
|
test {Client output buffer hard limit is enforced} {
|
|
r config set client-output-buffer-limit {pubsub 100000 0 0}
|
|
set rd1 [redis_deferring_client]
|
|
|
|
$rd1 subscribe foo
|
|
set reply [$rd1 read]
|
|
assert {$reply eq "subscribe foo 1"}
|
|
|
|
set omem 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 > 200000} break
|
|
}
|
|
assert {$omem >= 70000 && $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
|
|
}
|
|
}
|