Testsuite: Support running exim under valgrind
authorJeremy Harris <jgh146exb@wizmail.org>
Sun, 7 Feb 2016 12:12:19 +0000 (12:12 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Wed, 10 Feb 2016 00:03:26 +0000 (00:03 +0000)
Fails mostly thanks to lack of suid handling, but -be tests usable
if you retry after de-suid of eximdir/exim

src/src/store.c
test/aux-fixed/valgrind.supp [new file with mode: 0644]
test/runtest

index e402835c7d8890c229313d147ee4a44bca6b0fdd..9c1d1d83f9dc1fae82e35d83f95bf5132e8dc504 100644 (file)
@@ -354,7 +354,11 @@ the released memory. */
 
 newlength = bc + b->length - (char *)ptr;
 #ifndef COMPILE_UTILITY
 
 newlength = bc + b->length - (char *)ptr;
 #ifndef COMPILE_UTILITY
-if (running_in_test_harness) memset(ptr, 0xF0, newlength);
+if (running_in_test_harness)
+  {
+  (void) VALGRIND_MAKE_MEM_DEFINED(ptr, newlength);
+  memset(ptr, 0xF0, newlength);
+  }
 #endif
 (void) VALGRIND_MAKE_MEM_NOACCESS(ptr, newlength);
 yield_length[store_pool] = newlength - (newlength % alignment);
 #endif
 (void) VALGRIND_MAKE_MEM_NOACCESS(ptr, newlength);
 yield_length[store_pool] = newlength - (newlength % alignment);
diff --git a/test/aux-fixed/valgrind.supp b/test/aux-fixed/valgrind.supp
new file mode 100644 (file)
index 0000000..5f3b8df
--- /dev/null
@@ -0,0 +1,8 @@
+{
+  macro_whitelist
+  Memcheck:Leak
+  fun:malloc
+  fun:store_malloc_3
+  fun:macros_trusted
+  fun:main
+}
index efcd3ed1caeaede17d88e314cf1d1fa7c59a3db9..8dcb0587cd0619fc33232b28e039cecdc7e3bd62 100755 (executable)
@@ -38,6 +38,7 @@ $gnutls_dh_bits_normal = 2236;
 $cf = "bin/cf -exact";
 $cr = "\r";
 $debug = 0;
 $cf = "bin/cf -exact";
 $cr = "\r";
 $debug = 0;
+$flavour = 'FOO';
 $force_continue = 0;
 $force_update = 0;
 $log_failed_filename = "failed-summary.log";
 $force_continue = 0;
 $force_update = 0;
 $log_failed_filename = "failed-summary.log";
@@ -45,7 +46,7 @@ $more = "less -XF";
 $optargs = "";
 $save_output = 0;
 $server_opts = "";
 $optargs = "";
 $save_output = 0;
 $server_opts = "";
-$flavour = 'FOO';
+$valgrind = 0;
 
 $have_ipv4 = 1;
 $have_ipv6 = 1;
 
 $have_ipv4 = 1;
 $have_ipv6 = 1;
@@ -2149,7 +2150,10 @@ elsif (/^([A-Z_]+=\S+\s+)?(\d+)?\s*(sudo(?:\s+-u\s+(\w+))?\s+)?exim(_\S+)?\s+(.*
 
   $args =~ s/(?:^|\s)-d\S*// if $optargs =~ /(?:^|\s)-d/;
 
 
   $args =~ s/(?:^|\s)-d\S*// if $optargs =~ /(?:^|\s)-d/;
 
-  $cmd = "$envset$sudo$parm_cwd/eximdir/exim$special$optargs " .
+  my $opt_valgrind = $valgrind ? "valgrind --leak-check=yes --suppressions=$parm_cwd/aux-fixed/valgrind.supp " : "";
+
+  $cmd = "$envset$sudo$opt_valgrind" .
+         "$parm_cwd/eximdir/exim$special$optargs " .
          "-DEXIM_PATH=$parm_cwd/eximdir/exim$special " .
          "-C $parm_cwd/test-config $args " .
          ">>test-stdout 2>>test-stderr";
          "-DEXIM_PATH=$parm_cwd/eximdir/exim$special " .
          "-C $parm_cwd/test-config $args " .
          ">>test-stdout 2>>test-stderr";
@@ -2404,6 +2408,7 @@ while (@ARGV > 0 && $ARGV[0] =~ /^-/)
     if ($arg eq "-NOIPV4") { $have_ipv4 = 0; next; }
     if ($arg eq "-NOIPV6") { $have_ipv6 = 0; next; }
     if ($arg eq "-KEEP")   { $save_output = 1; next; }
     if ($arg eq "-NOIPV4") { $have_ipv4 = 0; next; }
     if ($arg eq "-NOIPV6") { $have_ipv6 = 0; next; }
     if ($arg eq "-KEEP")   { $save_output = 1; next; }
+    if ($arg eq "-VALGRIND")   { $valgrind = 1; next; }
     if ($arg =~ /^-FLAVOU?R$/) { $flavour = shift; next; }
     }
   $optargs .= " $arg";
     if ($arg =~ /^-FLAVOU?R$/) { $flavour = shift; next; }
     }
   $optargs .= " $arg";