From 0def60bf9ddc8271d214faee48c6575fe000279f Mon Sep 17 00:00:00 2001
From: Daniel Stenberg <daniel@haxx.se>
Date: Fri, 17 Nov 2000 15:58:25 +0000
Subject: [PATCH] now supports checks for exit codes and check for memory even
 when curl returns (expected) exit code

---
 tests/runtests.pl | 74 ++++++++++++++++++++++++++++++++---------------
 1 file changed, 51 insertions(+), 23 deletions(-)

diff --git a/tests/runtests.pl b/tests/runtests.pl
index bbe993642c..e76f5d3d21 100755
--- a/tests/runtests.pl
+++ b/tests/runtests.pl
@@ -335,13 +335,41 @@ sub singletest {
     my $res = system("$CMDLINE");
     $res /= 256;
 
+    my $ERRORCODE = "$TESTDIR/error$NUMBER.txt";
+
     if ($res != 0) {
-        print "*** Failed to invoke curl for test $NUMBER ***\n",
-        "*** [$DESC] ***\n",
-        "*** The command line was: ***\n $CMDLINE\n";
-        return 1;
+        # the invoked command return an error code
+
+        my $expectederror=0;
+
+        if(-f $ERRORCODE) {
+            open(ERRO, "<$ERRORCODE");
+            $expectederror = <ERRO>;
+            close(ERRO);
+            # strip non-digits
+            $expectederror =~ s/[^0-9]//g;
+        }
+
+        if($expectederror != $res) {
+
+            print "*** Failed to invoke curl for test $NUMBER ***\n",
+            "*** [$DESC] ***\n",
+            "*** The command returned $res for: ***\n $CMDLINE\n";
+            return 1;
+        }
+        elsif(!$short) {
+            print " error OK";
+        }
     }
     else {
+        if(-f $ERRORCODE) {
+            # this command was meant to fail, it didn't and thats WRONG
+            if(!$short) {
+                print " error FAILED";
+            }
+            return 1;
+        }
+
         if ( -r "$VALIDOUT" ) {
             # verify redirected stdout
             $res = compare($STDOUT, $VALIDOUT, "data");
@@ -385,27 +413,27 @@ sub singletest {
         unlink($STDOUT);
         unlink($STDERR);
 
-        if($memory_debug) {
-            if(! -f $memdump) {
-                print "\n** ALERT! memory debuggin without any output file?\n";
+    }
+    if($memory_debug) {
+        if(! -f $memdump) {
+            print "\n** ALERT! memory debuggin without any output file?\n";
+        }
+        else {
+            my @memdata=`$memanalyze < $memdump`;
+            my $leak=0;
+            for(@memdata) {
+                if($_ =~ /Leak detected/) {
+                    $leak=1;
+                }
+            }
+            if($leak) {
+                print "\n** MEMORY LEAK\n";
+                print @memdata;
+                return 1;
             }
             else {
-                my @memdata=`$memanalyze < $memdump`;
-                my $leak=0;
-                for(@memdata) {
-                    if($_ =~ /Leak detected/) {
-                        $leak=1;
-                    }
-                }
-                if($leak) {
-                    print "\n** MEMORY LEAK\n";
-                    print @memdata;
-                    return 1;
-                }
-                else {
-                    if(!$short) {
-                        print " memory OK";
-                    }
+                if(!$short) {
+                    print " memory OK";
                 }
             }
         }
-- 
GitLab