]> git.saurik.com Git - redis.git/commitdiff
print warnings in redis log when a test raises an exception (very likely to be caused...
authorPieter Noordhuis <pcnoordhuis@gmail.com>
Sat, 15 May 2010 21:48:08 +0000 (23:48 +0200)
committerPieter Noordhuis <pcnoordhuis@gmail.com>
Sat, 15 May 2010 21:48:08 +0000 (23:48 +0200)
redis.c
tests/support/test.tcl
tests/support/util.tcl

diff --git a/redis.c b/redis.c
index b5bbd04db4a2f470cd9a0e6db109194de1d30d26..9e4a5dd3fe302605bdb6ecdbfae34f2555030d3c 100644 (file)
--- a/redis.c
+++ b/redis.c
@@ -10556,7 +10556,7 @@ static void debugCommand(redisClient *c) {
 
 static void _redisAssert(char *estr, char *file, int line) {
     redisLog(REDIS_WARNING,"=== ASSERTION FAILED ===");
-    redisLog(REDIS_WARNING,"==> %s:%d '%s' is not true\n",file,line,estr);
+    redisLog(REDIS_WARNING,"==> %s:%d '%s' is not true",file,line,estr);
 #ifdef HAVE_BACKTRACE
     redisLog(REDIS_WARNING,"(forcing SIGSEGV in order to print the stack trace)");
     *((char*)-1) = 'x';
index c695c82fa30cb4e1f232ba51b679ae5c6e153186..83985e3e1e5aa71b6e22dd318ac2ee25aef5506f 100644 (file)
@@ -7,7 +7,16 @@ proc test {name code okpattern} {
     # if {$::testnum < $::first || $::testnum > $::last} return
     puts -nonewline [format "#%03d %-68s " $::testnum $name]
     flush stdout
-    set retval [uplevel 1 $code]
+    if {[catch {set retval [uplevel 1 $code]} error]} {
+        puts "ERROR\n\nLogged warnings:"
+        foreach file [glob tests/tmp/server.[pid].*/stdout] {
+            set warnings [warnings_from_file $file]
+            if {[string length $warnings] > 0} {
+                puts $warnings
+            }
+        }
+        exit 1
+    }
     if {$okpattern eq $retval || [string match $okpattern $retval]} {
         puts "PASSED"
         incr ::passed
index 8a7c3f1d81f86d6eeb6bf97c0fe73a5e1688ea2f..09a5804c17ea91ca32fbc8c38867987dbd3ea387 100644 (file)
@@ -25,6 +25,23 @@ proc zlistAlikeSort {a b} {
     string compare [lindex $a 1] [lindex $b 1]
 }
 
+# Return all log lines starting with the first line that contains a warning.
+# Generally, this will be an assertion error with a stack trace.
+proc warnings_from_file {filename} {
+    set lines [split [exec cat $filename] "\n"]
+    set matched 0
+    set result {}
+    foreach line $lines {
+        if {[regexp {^\[\d+\]\s+\d+\s+\w+\s+\d{2}:\d{2}:\d{2} \#} $line]} {
+            set matched 1
+        }
+        if {$matched} {
+            lappend result $line
+        }
+    }
+    join $result "\n"
+}
+
 # Return value for INFO property
 proc status {r property} {
     if {[regexp "\r\n$property:(.*?)\r\n" [$r info] _ value]} {