Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add new entry in Release_Notes.
[simgrid.git] / teshsuite / smpi / mpich3-test / runtests
index 721da48..f58c024 100755 (executable)
 use File::Path;
 
 # Global variables
-$MPIMajorVersion = "1";
+$MPIMajorVersion = "3";
 $MPIMinorVersion = "1";
 $mpiexec = "smpirun";    # Name of mpiexec program (including path, if necessary)
+$platformfile = "../../../../examples/platforms/small_platform_with_routers.xml";
+$hostfile = "../../hostfile_mpich";
 $testIsStrict = "true";
 $MPIhasMPIX   = "no";
 $np_arg  = "-np";         # Name of argument to specify the number of processes
@@ -72,6 +74,9 @@ $testCount = 0;          # Used with batchRun to count tests.
 $batrundir = ".";        # Set to the directory into which to run the examples
 
 $execarg="";
+$wrapparg="";
+
+$enabled_privatization = 1; # disable tests that need SMPI privatization to run
 # TAP (Test Anything Protocol) output
 my $tapoutput = 0;
 my $tapfile = '';
@@ -153,8 +158,10 @@ foreach $_ (@ARGV) {
     elsif (/--?np=(.*)/)   { $np_default = $1; }
     elsif (/--?maxnp=(.*)/) { $np_max = $1; }
     elsif (/--?tests=(.*)/) { $listfiles = $1; }
+    elsif (/--?platformfile=(.*)/) { $platformfile = $1; }
+    elsif (/--?hostfile=(.*)/) { $hostfile = $1; }
     elsif (/--?srcdir=(.*)/) { $srcdir = $1;
-       $mpiexec="$mpiexec  -platform ${srcdir}/../../../../examples/platforms/small_platform_with_routers.xml -hostfile ${srcdir}/../../hostfile_coll --log=root.thr:critical --cfg=smpi/running_power:1e9  --cfg=smpi/async_small_thresh:65536"; }
+       $mpiexec="$mpiexec  -platform ${srcdir}/$platformfile -hostfile ${srcdir}/$hostfile --log=root.thr:critical --log=smpi_kernel.thr:warning --cfg=smpi/host-speed:1e9f  --cfg=smpi/async-small-thresh:65536 --cfg=smpi/os:1:0.0000003:0.0000002 --cfg=smpi/ois:1:0.0000003:0.0000002"; }
     elsif (/--?verbose/) { $verbose = 1; }
     elsif (/--?showprogress/) { $showProgress = 1; }
     elsif (/--?debug/) { $debug = 1; }
@@ -162,6 +169,12 @@ foreach $_ (@ARGV) {
     elsif (/--?batchdir=(.*)/) { $batrundir = $1; }
     elsif (/--?timeoutarg=(.*)/) { $timeoutArgPattern = $1; }
     elsif (/--?execarg=(.*)/) { $execarg = "$execarg $1"; }
+    elsif (/--?privatization=(.*)/) {
+print STDERR "privatization called\n";
+$enabled_privatization = $1; }
+    elsif (/--?wrapper=(.*)/) {
+         $wrapparg = "-wrapper \"$1\"" if $1 ne "";
+    }
     elsif (/--?xmlfile=(.*)/) {
        $xmlfile   = $1;
        if (! ($xmlfile =~ /^\//)) {
@@ -207,14 +220,6 @@ foreach $_ (@ARGV) {
         # we do not know at this point how many tests will be run, so do
         # not print a test plan line like "1..450" until the very end
     }
-    else {
-       print STDERR "Unrecognized argument $_\n";
-       print STDERR "runtests [-tests=testfile] [-np=nprocesses] \
-        [-maxnp=max-nprocesses] [-srcdir=location-of-tests] \
-        [-xmlfile=filename ] [-noxmlclose] \
-        [-verbose] [-showprogress] [-debug] [-batch]\n";
-       exit(1);
-    }
 }
 
 # Perform any post argument processing
@@ -268,6 +273,7 @@ if ($batchRun) {
 else {
     if ($err_count) {
        print "$err_count tests failed out of $total_run\n";
+       print "Failing tests : $failed_tests\n";
        if ($xmloutput) {
            print "Details in $xmlfullfile\n";
        }
@@ -279,6 +285,7 @@ else {
         print "TAP formatted results in $tapfullfile\n";
     }
 }
+exit ($err_count > 0);
 #\f
 # ---------------------------------------------------------------------------
 # Routines
@@ -366,6 +373,7 @@ sub RunList {
        my $requiresMPIX   = "";
        my $progEnv    = "";
        my $mpiVersion = "";
+        my $needs_privatization = 0;
         my $xfail = "";
        if ($#args >= 1) { $np = $args[1]; }
        # Process the key=value arguments
@@ -394,6 +402,9 @@ sub RunList {
                elsif ($key eq "mpiversion") {
                    $mpiVersion = $value;
                }
+               elsif ($key eq "needs_privatization") {
+                   $needs_privatization = $value;
+               }
                elsif ($key eq "strict") {
                    $requiresStrict = $value
                }
@@ -415,6 +426,13 @@ sub RunList {
        # skip empty lines
        if ($programname eq "") { next; }
 
+       # if privatization is disabled, and if the test needs it, ignore it
+       if ($needs_privatization == 1 &&
+               $enabled_privatization != 1) {
+                SkippedTest($programname, $np, $workdir, "requires SMPI privatization");
+               next;
+       }
+
        if ($np eq "") { $np = $np_default; }
        if ($np_max > 0 && $np > $np_max) { $np = $np_max; }
 
@@ -602,7 +620,7 @@ sub RunMPIProgram {
        &$InitForTest();
     }
     print STDOUT "Env includes $progEnv\n" if $verbose;
-    print STDOUT "$mpiexec $mpiexecArgs $np_arg $np $program_wrapper ./$programname $progArgs\n" if $verbose;
+    print STDOUT "$mpiexec $wrapparg $mpiexecArgs $np_arg $np $program_wrapper ./$programname $progArgs\n" if $verbose;
     print STDOUT "." if $showProgress;
     # Save and restore the environment if necessary before running mpiexec.
     if ($progEnv ne "") {
@@ -616,7 +634,7 @@ sub RunMPIProgram {
            }
        }
     }
-    open ( MPIOUT, "$mpiexec $np_arg $np $mpiexecArgs $program_wrapper ./$programname $progArgs 2>&1 |" ) ||
+    open ( MPIOUT, "$mpiexec $wrapparg $np_arg $np $mpiexecArgs $program_wrapper ./$programname $progArgs 2>&1 |" ) ||
        die "Could not run ./$programname\n";
     if ($progEnv ne "") {
        %ENV = %saveEnv;
@@ -627,7 +645,7 @@ sub RunMPIProgram {
     }
     else {
        if ($verbose) {
-           $inline = "$mpiexec $np_arg $np $program_wrapper ./$programname\n";
+           $inline = "$mpiexec $wrapparg $np_arg $np $program_wrapper ./$programname\n";
        }
        else {
            $inline = "";
@@ -637,6 +655,13 @@ sub RunMPIProgram {
            # Skip FORTRAN STOP
            if (/FORTRAN STOP/) { next; }
            $inline .= $_;
+           if (m{^==[0-9]+== ?WARNING: ASan doesn't fully support} ||
+               m{^==[0-9]+== ?WARNING: ASan is ignoring requested __asan_handle_no_return: stack } ||
+               m{^False positive error reports may follow$} ||
+               m{^For details see http://code.google.com/p/address-sanitizer/issues/detail\?id=189$} ||
+               m{^For details see https://github.com/google/sanitizers/issues/189$}) {
+               next;
+           }
            if (/^\s*No [Ee]rrors\s*$/ && $found_noerror == 0) {
                $found_noerror = 1;
            }
@@ -644,6 +669,8 @@ sub RunMPIProgram {
                print STDERR "Unexpected output in $programname: $_";
                if (!$found_error) {
                    $found_error = 1;
+                   $failed_tests .= $programname;
+                   $failed_tests .= " ";
                    $err_count ++;
                }
            }
@@ -652,6 +679,8 @@ sub RunMPIProgram {
            print STDERR "Program $programname exited without No Errors\n";
            if (!$found_error) {
                $found_error = 1;
+               $failed_tests .= $programname;
+               $failed_tests .= " ";
                $err_count ++;
            }
        }
@@ -667,6 +696,8 @@ sub RunMPIProgram {
                if ($signal_num != 0) {
                    print STDERR "Program $programname exited with signal $signal_num\n";
                }
+               $failed_tests .= $programname;
+               $failed_tests .= " ";
                $found_error = 1;
                $err_count ++;
            }
@@ -693,7 +724,7 @@ sub AddMPIProgram {
 
     if ($ResultTest ne "") {
        # This test really needs to be run manually, with this test
-       # Eventually, we can update this to include handleing in checktests.
+       # Eventually, we can update this to include handling in checktests.
        print STDERR "Run $curdir/$programname with $np processes and use $ResultTest to check the results\n";
        return;
     }