mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-23 08:38:27 -05:00
128 lines
5.8 KiB
Tcl
128 lines
5.8 KiB
Tcl
|
source tests/support/benchmark.tcl
|
||
|
|
||
|
|
||
|
proc cmdstat {cmd} {
|
||
|
return [cmdrstat $cmd r]
|
||
|
}
|
||
|
|
||
|
start_server {tags {"benchmark"}} {
|
||
|
start_server {} {
|
||
|
set master_host [srv 0 host]
|
||
|
set master_port [srv 0 port]
|
||
|
|
||
|
test {benchmark: set,get} {
|
||
|
r config resetstat
|
||
|
r flushall
|
||
|
set cmd [redisbenchmark $master_host $master_port "-c 5 -n 10 -e -t set,get"]
|
||
|
if {[catch { exec {*}$cmd } error]} {
|
||
|
set first_line [lindex [split $error "\n"] 0]
|
||
|
puts [colorstr red "redis-benchmark non zero code. first line: $first_line"]
|
||
|
fail "redis-benchmark non zero code. first line: $first_line"
|
||
|
}
|
||
|
assert_match {*calls=10,*} [cmdstat set]
|
||
|
assert_match {*calls=10,*} [cmdstat get]
|
||
|
# assert one of the non benchmarked commands is not present
|
||
|
assert_match {} [cmdstat lrange]
|
||
|
}
|
||
|
|
||
|
test {benchmark: full test suite} {
|
||
|
r config resetstat
|
||
|
set cmd [redisbenchmark $master_host $master_port "-c 10 -n 100 -e"]
|
||
|
if {[catch { exec {*}$cmd } error]} {
|
||
|
set first_line [lindex [split $error "\n"] 0]
|
||
|
puts [colorstr red "redis-benchmark non zero code. first line: $first_line"]
|
||
|
fail "redis-benchmark non zero code. first line: $first_line"
|
||
|
}
|
||
|
# ping total calls are 2*issued commands per test due to PING_INLINE and PING_BULK
|
||
|
assert_match {*calls=200,*} [cmdstat ping]
|
||
|
assert_match {*calls=100,*} [cmdstat set]
|
||
|
assert_match {*calls=100,*} [cmdstat get]
|
||
|
assert_match {*calls=100,*} [cmdstat incr]
|
||
|
# lpush total calls are 2*issued commands per test due to the lrange tests
|
||
|
assert_match {*calls=200,*} [cmdstat lpush]
|
||
|
assert_match {*calls=100,*} [cmdstat rpush]
|
||
|
assert_match {*calls=100,*} [cmdstat lpop]
|
||
|
assert_match {*calls=100,*} [cmdstat rpop]
|
||
|
assert_match {*calls=100,*} [cmdstat sadd]
|
||
|
assert_match {*calls=100,*} [cmdstat hset]
|
||
|
assert_match {*calls=100,*} [cmdstat spop]
|
||
|
assert_match {*calls=100,*} [cmdstat zadd]
|
||
|
assert_match {*calls=100,*} [cmdstat zpopmin]
|
||
|
assert_match {*calls=400,*} [cmdstat lrange]
|
||
|
assert_match {*calls=100,*} [cmdstat mset]
|
||
|
# assert one of the non benchmarked commands is not present
|
||
|
assert_match {} [cmdstat rpoplpush]
|
||
|
}
|
||
|
|
||
|
test {benchmark: multi-thread set,get} {
|
||
|
r config resetstat
|
||
|
r flushall
|
||
|
set cmd [redisbenchmark $master_host $master_port "--threads 10 -c 5 -n 10 -e -t set,get"]
|
||
|
if {[catch { exec {*}$cmd } error]} {
|
||
|
set first_line [lindex [split $error "\n"] 0]
|
||
|
puts [colorstr red "redis-benchmark non zero code. first line: $first_line"]
|
||
|
fail "redis-benchmark non zero code. first line: $first_line"
|
||
|
}
|
||
|
assert_match {*calls=10,*} [cmdstat set]
|
||
|
assert_match {*calls=10,*} [cmdstat get]
|
||
|
# assert one of the non benchmarked commands is not present
|
||
|
assert_match {} [cmdstat lrange]
|
||
|
|
||
|
# ensure only one key was populated
|
||
|
assert_match {1} [scan [regexp -inline {keys\=([\d]*)} [r info keyspace]] keys=%d]
|
||
|
}
|
||
|
|
||
|
test {benchmark: pipelined full set,get} {
|
||
|
r config resetstat
|
||
|
r flushall
|
||
|
set cmd [redisbenchmark $master_host $master_port "-P 5 -c 10 -n 10010 -e -t set,get"]
|
||
|
if {[catch { exec {*}$cmd } error]} {
|
||
|
set first_line [lindex [split $error "\n"] 0]
|
||
|
puts [colorstr red "redis-benchmark non zero code. first line: $first_line"]
|
||
|
fail "redis-benchmark non zero code. first line: $first_line"
|
||
|
}
|
||
|
assert_match {*calls=10010,*} [cmdstat set]
|
||
|
assert_match {*calls=10010,*} [cmdstat get]
|
||
|
# assert one of the non benchmarked commands is not present
|
||
|
assert_match {} [cmdstat lrange]
|
||
|
|
||
|
# ensure only one key was populated
|
||
|
assert_match {1} [scan [regexp -inline {keys\=([\d]*)} [r info keyspace]] keys=%d]
|
||
|
}
|
||
|
|
||
|
test {benchmark: arbitrary command} {
|
||
|
r config resetstat
|
||
|
r flushall
|
||
|
set cmd [redisbenchmark $master_host $master_port "-c 5 -n 150 -e INCRBYFLOAT mykey 10.0"]
|
||
|
if {[catch { exec {*}$cmd } error]} {
|
||
|
set first_line [lindex [split $error "\n"] 0]
|
||
|
puts [colorstr red "redis-benchmark non zero code. first line: $first_line"]
|
||
|
fail "redis-benchmark non zero code. first line: $first_line"
|
||
|
}
|
||
|
assert_match {*calls=150,*} [cmdstat incrbyfloat]
|
||
|
# assert one of the non benchmarked commands is not present
|
||
|
assert_match {} [cmdstat get]
|
||
|
|
||
|
# ensure only one key was populated
|
||
|
assert_match {1} [scan [regexp -inline {keys\=([\d]*)} [r info keyspace]] keys=%d]
|
||
|
}
|
||
|
|
||
|
test {benchmark: keyspace length} {
|
||
|
r flushall
|
||
|
r config resetstat
|
||
|
set cmd [redisbenchmark $master_host $master_port "-r 50 -t set -n 1000"]
|
||
|
if {[catch { exec {*}$cmd } error]} {
|
||
|
set first_line [lindex [split $error "\n"] 0]
|
||
|
puts [colorstr red "redis-benchmark non zero code. first line: $first_line"]
|
||
|
fail "redis-benchmark non zero code. first line: $first_line"
|
||
|
}
|
||
|
assert_match {*calls=1000,*} [cmdstat set]
|
||
|
# assert one of the non benchmarked commands is not present
|
||
|
assert_match {} [cmdstat get]
|
||
|
|
||
|
# ensure the keyspace has the desired size
|
||
|
assert_match {50} [scan [regexp -inline {keys\=([\d]*)} [r info keyspace]] keys=%d]
|
||
|
}
|
||
|
}
|
||
|
}
|