
This pr covers following chnages. 1. redisbenchmark to valkeybenchmark in test directory 2. Removed redis from some test's title and changed the name accordingly. 3. Updated test suite name and redis-server to valkey readme in test directory. --------- Signed-off-by: Shivshankar-Reddy <shiva.sheri.github@gmail.com>
180 lines
7.7 KiB
Tcl
180 lines
7.7 KiB
Tcl
source tests/support/benchmark.tcl
|
|
source tests/support/cli.tcl
|
|
|
|
proc cmdstat {cmd} {
|
|
return [cmdrstat $cmd r]
|
|
}
|
|
|
|
# common code to reset stats, flush the db and run valkey-benchmark
|
|
proc common_bench_setup {cmd} {
|
|
r config resetstat
|
|
r flushall
|
|
if {[catch { exec {*}$cmd } error]} {
|
|
set first_line [lindex [split $error "\n"] 0]
|
|
puts [colorstr red "valkey-benchmark non zero code. first line: $first_line"]
|
|
fail "valkey-benchmark non zero code. first line: $first_line"
|
|
}
|
|
}
|
|
|
|
# we use this extra asserts on a simple set,get test for features like uri parsing
|
|
# and other simple flag related tests
|
|
proc default_set_get_checks {} {
|
|
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]
|
|
}
|
|
|
|
tags {"benchmark network external:skip logreqres:skip"} {
|
|
start_server {} {
|
|
set master_host [srv 0 host]
|
|
set master_port [srv 0 port]
|
|
r select 0
|
|
|
|
test {benchmark: set,get} {
|
|
set cmd [valkeybenchmark $master_host $master_port "-c 5 -n 10 -t set,get"]
|
|
common_bench_setup $cmd
|
|
default_set_get_checks
|
|
}
|
|
|
|
test {benchmark: connecting using URI set,get} {
|
|
set cmd [valkeybenchmarkuri $master_host $master_port "-c 5 -n 10 -t set,get"]
|
|
common_bench_setup $cmd
|
|
default_set_get_checks
|
|
}
|
|
|
|
test {benchmark: connecting using URI with authentication set,get} {
|
|
r config set masterauth pass
|
|
set cmd [valkeybenchmarkuriuserpass $master_host $master_port "default" pass "-c 5 -n 10 -t set,get"]
|
|
common_bench_setup $cmd
|
|
default_set_get_checks
|
|
}
|
|
|
|
test {benchmark: full test suite} {
|
|
set cmd [valkeybenchmark $master_host $master_port "-c 10 -n 100"]
|
|
common_bench_setup $cmd
|
|
|
|
# ping total calls are 2*issued commands per test due to PING_INLINE and PING_MBULK
|
|
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} {
|
|
set cmd [valkeybenchmark $master_host $master_port "--threads 10 -c 5 -n 10 -t set,get"]
|
|
common_bench_setup $cmd
|
|
default_set_get_checks
|
|
|
|
# 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} {
|
|
set cmd [valkeybenchmark $master_host $master_port "-P 5 -c 10 -n 10010 -t set,get"]
|
|
common_bench_setup $cmd
|
|
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} {
|
|
set cmd [valkeybenchmark $master_host $master_port "-c 5 -n 150 INCRBYFLOAT mykey 10.0"]
|
|
common_bench_setup $cmd
|
|
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} {
|
|
set cmd [valkeybenchmark $master_host $master_port "-r 50 -t set -n 1000"]
|
|
common_bench_setup $cmd
|
|
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]
|
|
}
|
|
|
|
test {benchmark: clients idle mode should return error when reached maxclients limit} {
|
|
set cmd [valkeybenchmark $master_host $master_port "-c 10 -I"]
|
|
set original_maxclients [lindex [r config get maxclients] 1]
|
|
r config set maxclients 5
|
|
catch { exec {*}$cmd } error
|
|
assert_match "*Error*" $error
|
|
r config set maxclients $original_maxclients
|
|
}
|
|
|
|
test {benchmark: read last argument from stdin} {
|
|
set base_cmd [valkeybenchmark $master_host $master_port "-x -n 10 set key"]
|
|
set cmd "printf arg | $base_cmd"
|
|
common_bench_setup $cmd
|
|
r get key
|
|
} {arg}
|
|
|
|
# tls specific tests
|
|
if {$::tls} {
|
|
test {benchmark: specific tls-ciphers} {
|
|
set cmd [valkeybenchmark $master_host $master_port "-r 50 -t set -n 1000 --tls-ciphers \"DEFAULT:-AES128-SHA256\""]
|
|
common_bench_setup $cmd
|
|
assert_match {*calls=1000,*} [cmdstat set]
|
|
# assert one of the non benchmarked commands is not present
|
|
assert_match {} [cmdstat get]
|
|
}
|
|
|
|
test {benchmark: tls connecting using URI with authentication set,get} {
|
|
r config set masterauth pass
|
|
set cmd [valkeybenchmarkuriuserpass $master_host $master_port "default" pass "-c 5 -n 10 -t set,get"]
|
|
common_bench_setup $cmd
|
|
default_set_get_checks
|
|
}
|
|
|
|
test {benchmark: specific tls-ciphersuites} {
|
|
r flushall
|
|
r config resetstat
|
|
set ciphersuites_supported 1
|
|
set cmd [valkeybenchmark $master_host $master_port "-r 50 -t set -n 1000 --tls-ciphersuites \"TLS_AES_128_GCM_SHA256\""]
|
|
if {[catch { exec {*}$cmd } error]} {
|
|
set first_line [lindex [split $error "\n"] 0]
|
|
if {[string match "*Invalid option*" $first_line]} {
|
|
set ciphersuites_supported 0
|
|
if {$::verbose} {
|
|
puts "Skipping test, TLSv1.3 not supported."
|
|
}
|
|
} else {
|
|
puts [colorstr red "valkey-benchmark non zero code. first line: $first_line"]
|
|
fail "valkey-benchmark non zero code. first line: $first_line"
|
|
}
|
|
}
|
|
if {$ciphersuites_supported} {
|
|
assert_match {*calls=1000,*} [cmdstat set]
|
|
# assert one of the non benchmarked commands is not present
|
|
assert_match {} [cmdstat get]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|