X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/ab72b4833d2054231437acccec36f32f07290075..49128f0b9da725de992e427fa341a837bcc2991b:/tests/test_helper.tcl diff --git a/tests/test_helper.tcl b/tests/test_helper.tcl index cd8d65a1..ee7fa3e1 100644 --- a/tests/test_helper.tcl +++ b/tests/test_helper.tcl @@ -12,21 +12,76 @@ source tests/support/util.tcl set ::host 127.0.0.1 set ::port 16379 set ::traceleaks 0 +set ::valgrind 0 +set ::denytags {} +set ::allowtags {} +set ::external 0; # If "1" this means, we are running against external instance proc execute_tests name { - set cur $::testnum source "tests/$name.tcl" } -# setup a list to hold a stack of clients. the proc "r" provides easy -# access to the client at the top of the stack -set ::clients {} +# Setup a list to hold a stack of server configs. When calls to start_server +# are nested, use "srv 0 pid" to get the pid of the inner server. To access +# outer servers, use "srv -1 pid" etcetera. +set ::servers {} +proc srv {args} { + set level 0 + if {[string is integer [lindex $args 0]]} { + set level [lindex $args 0] + set property [lindex $args 1] + } else { + set property [lindex $args 0] + } + set srv [lindex $::servers end+$level] + dict get $srv $property +} + +# Provide easy access to the client for the inner server. It's possible to +# prepend the argument list with a negative level to access clients for +# servers running in outer blocks. proc r {args} { - set client [lindex $::clients end] - $client {*}$args + set level 0 + if {[string is integer [lindex $args 0]]} { + set level [lindex $args 0] + set args [lrange $args 1 end] + } + [srv $level "client"] {*}$args +} + +proc redis_deferring_client {args} { + set level 0 + if {[llength $args] > 0 && [string is integer [lindex $args 0]]} { + set level [lindex $args 0] + set args [lrange $args 1 end] + } + + # create client that defers reading reply + set client [redis [srv $level "host"] [srv $level "port"] 1] + + # select the right db and read the response (OK) + $client select 9 + $client read + return $client +} + +# Provide easy access to INFO properties. Same semantic as "proc r". +proc s {args} { + set level 0 + if {[string is integer [lindex $args 0]]} { + set level [lindex $args 0] + set args [lrange $args 1 end] + } + status [srv $level "client"] [lindex $args 0] +} + +proc cleanup {} { + catch {exec rm -rf {*}[glob tests/tmp/redis.conf.*]} + catch {exec rm -rf {*}[glob tests/tmp/server.*]} } proc main {} { + cleanup execute_tests "unit/auth" execute_tests "unit/protocol" execute_tests "unit/basic" @@ -37,15 +92,65 @@ proc main {} { execute_tests "unit/sort" execute_tests "unit/expire" execute_tests "unit/other" - + execute_tests "unit/cas" + execute_tests "integration/replication" + execute_tests "integration/aof" +# execute_tests "integration/redis-cli" + execute_tests "unit/pubsub" + + # run tests with VM enabled + set ::global_overrides {vm-enabled yes} + execute_tests "unit/protocol" + execute_tests "unit/basic" + execute_tests "unit/type/list" + execute_tests "unit/type/set" + execute_tests "unit/type/zset" + execute_tests "unit/type/hash" + execute_tests "unit/sort" + execute_tests "unit/expire" + execute_tests "unit/other" + execute_tests "unit/cas" + + cleanup puts "\n[expr $::passed+$::failed] tests, $::passed passed, $::failed failed" if {$::failed > 0} { puts "\n*** WARNING!!! $::failed FAILED TESTS ***\n" + exit 1 } - - # clean up tmp - exec rm -rf {*}[glob tests/tmp/redis.conf.*] - exec rm -rf {*}[glob tests/tmp/server.*] } -main +# parse arguments +for {set j 0} {$j < [llength $argv]} {incr j} { + set opt [lindex $argv $j] + set arg [lindex $argv [expr $j+1]] + if {$opt eq {--tags}} { + foreach tag $arg { + if {[string index $tag 0] eq "-"} { + lappend ::denytags [string range $tag 1 end] + } else { + lappend ::allowtags $tag + } + } + incr j + } elseif {$opt eq {--host}} { + set ::external 1 + set ::host $arg + incr j + } elseif {$opt eq {--port}} { + set ::port $arg + incr j + } else { + puts "Wrong argument: $opt" + exit 1 + } +} + +if {[catch { main } err]} { + if {[string length $err] > 0} { + # only display error when not generated by the test suite + if {$err ne "exception"} { + puts $err + } + exit 1 + } +}