From 6e0e5bedd9c3a4bf0f53f43c427c88e2866bda0a Mon Sep 17 00:00:00 2001 From: Pieter Noordhuis Date: Wed, 2 Jun 2010 22:53:22 +0200 Subject: [PATCH] basic support to tag tests --- tests/support/server.tcl | 32 ++++++++++++++++++++++++++++---- tests/support/test.tcl | 21 +++++++++++++++++++++ tests/test_helper.tcl | 2 ++ tests/unit/basic.tcl | 4 +++- 4 files changed, 54 insertions(+), 5 deletions(-) diff --git a/tests/support/server.tcl b/tests/support/server.tcl index 419267b4..551e24d1 100644 --- a/tests/support/server.tcl +++ b/tests/support/server.tcl @@ -1,3 +1,6 @@ +set ::global_overrides {} +set ::tags {} + proc error_and_quit {config_file error} { puts "!!COULD NOT START REDIS-SERVER\n" puts "CONFIGURATION:" @@ -80,18 +83,31 @@ proc ping_server {host port} { return $retval } -set ::global_overrides {} +# doesn't really belong here, but highly coupled to code in start_server +proc tags {tags code} { + set ::tags [concat $::tags $tags] + uplevel 1 $code + set ::tags [lrange $::tags 0 end-[llength $tags]] +} + proc start_server {options {code undefined}} { # setup defaults set baseconfig "default.conf" set overrides {} + set tags {} # parse options foreach {option value} $options { switch $option { - "config" { set baseconfig $value } - "overrides" { set overrides $value } - default { error "Unknown option $option" } + "config" { + set baseconfig $value } + "overrides" { + set overrides $value } + "tags" { + set tags $value + set ::tags [concat $::tags $value] } + default { + error "Unknown option $option" } } } @@ -190,7 +206,12 @@ proc start_server {options {code undefined}} { lappend ::servers $srv # execute provided block + set curnum $::testnum catch { uplevel 1 $code } err + if {$curnum == $::testnum} { + # don't check for leaks when no tests were executed + dict set srv "skipleaks" 1 + } # pop the server object set ::servers [lrange $::servers 0 end-1] @@ -219,4 +240,7 @@ proc start_server {options {code undefined}} { } else { set _ $srv } + + # remove tags + set ::tags [lrange $::tags 0 end-[llength $tags]] } diff --git a/tests/support/test.tcl b/tests/support/test.tcl index a7bcc801..c13072f0 100644 --- a/tests/support/test.tcl +++ b/tests/support/test.tcl @@ -3,6 +3,27 @@ set ::failed 0 set ::testnum 0 proc test {name code okpattern} { + # abort if tagged with a tag to deny + foreach tag $::denytags { + if {[lsearch $::tags $tag] >= 0} { + return + } + } + + # check if tagged with at least 1 tag to allow when there *is* a list + # of tags to allow, because default policy is to run everything + if {[llength $::allowtags] > 0} { + set matched 0 + foreach tag $::allowtags { + if {[lsearch $::tags $tag]} { + incr matched + } + } + if {$matched < 1} { + return + } + } + incr ::testnum puts -nonewline [format "#%03d %-68s " $::testnum $name] flush stdout diff --git a/tests/test_helper.tcl b/tests/test_helper.tcl index 69d9bbf9..da9071e8 100644 --- a/tests/test_helper.tcl +++ b/tests/test_helper.tcl @@ -13,6 +13,8 @@ set ::host 127.0.0.1 set ::port 16379 set ::traceleaks 0 set ::valgrind 0 +set ::denytags {} +set ::allowtags {} proc execute_tests name { source "tests/$name.tcl" diff --git a/tests/unit/basic.tcl b/tests/unit/basic.tcl index edde91c4..a271432c 100644 --- a/tests/unit/basic.tcl +++ b/tests/unit/basic.tcl @@ -1,4 +1,4 @@ -start_server {} { +start_server {tags {basic}} { test {DEL all keys to start with a clean DB} { foreach key [r keys *] {r del $key} r dbsize @@ -52,6 +52,7 @@ start_server {} { r get foo } [string repeat "abcd" 1000000] + tags {slow} { test {Very big payload random access} { set err {} array set payload {} @@ -92,6 +93,7 @@ start_server {} { test {DBSIZE should be 10101 now} { r dbsize } {10101} + } test {INCR against non existing key} { set res {} -- 2.45.2