my $builddir = shift || die "Usage: ptestrunner.pl mono_build_dir\n";
my @errors = ();
-my $total_errors = 0;
+my $total_errors = 0; # this is reset before each test
+my $global_errors = 0;
my $report;
my $profbuilddir = $builddir . "/mono/profiler";
# Setup the execution environment
# for the profiler module
-append_path ("LD_LIBRARY_PATH", $profbuilddir . "/.libs");
-append_path ("DYLD_LIBRARY_PATH", $profbuilddir . "/.libs");
+append_path ("DYLD_LIBRARY_PATH", $minibuilddir . "/.libs");
# for mprof-report
append_path ("PATH", $profbuilddir);
check_report_basics ($report);
check_report_threads ($report, "BusyHelper");
# at least 40% of the samples should hit each of the two busy methods
-check_report_samples ($report, "T:test ()" => 40, "T:test3 ()" => 40);
+# This seems to fail on osx, where the main thread gets the majority of SIGPROF signals
+#check_report_samples ($report, "T:test ()" => 40, "T:test3 ()" => 40);
report_errors ();
# test lock events
$report = run_test ("test-monitor.exe");
);
report_errors ();
-exit ($total_errors? 1: 0);
+emit_nunit_report();
+
+exit ($global_errors ? 1 : 0);
# utility functions
sub append_path {
my $var = shift;
my $value = shift;
- if (exists $ENV {$var}) {
- $ENV {$var} = $value . ";" . $ENV {$var};
+ if (exists $ENV{$var}) {
+ $ENV{$var} = $value . ":" . $ENV{$var};
} else {
- $ENV {$var} = $value;
+ $ENV{$var} = $value;
}
}
foreach my $e (@errors) {
print "Error: $e\n";
$total_errors++;
+ $global_errors++;
}
print "Total errors: $total_errors\n" if $total_errors;
#print $report;
}
+sub emit_nunit_report
+{
+ use Cwd;
+ use POSIX qw(strftime uname locale_h);
+ use Net::Domain qw(hostname hostfqdn);
+ use locale;
+
+ my $failed = $global_errors ? 1 : 0;
+ my $successbool;
+ my $total = 1;
+ my $mylocale = setlocale (LC_CTYPE);
+ $mylocale = substr($mylocale, 0, index($mylocale, '.'));
+ $mylocale =~ s/_/-/;
+
+ if ($failed > 0) {
+ $successbool = "False";
+ } else {
+ $successbool = "True";
+ }
+ open (my $nunitxml, '>', 'TestResult-profiler.xml') or die "Could not write to 'TestResult-profiler.xml' $!";
+ print $nunitxml "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n";
+ print $nunitxml "<!--This file represents the results of running a test suite-->\n";
+ print $nunitxml "<test-results name=\"profiler-tests.dummy\" total=\"$total\" failures=\"$failed\" not-run=\"0\" date=\"" . strftime ("%F", localtime) . "\" time=\"" . strftime ("%T", localtime) . "\">\n";
+ print $nunitxml " <environment nunit-version=\"2.4.8.0\" clr-version=\"4.0.30319.17020\" os-version=\"Unix " . (uname ())[2] . "\" platform=\"Unix\" cwd=\"" . getcwd . "\" machine-name=\"" . hostname . "\" user=\"" . getpwuid ($<) . "\" user-domain=\"" . hostfqdn . "\" />\n";
+ print $nunitxml " <culture-info current-culture=\"$mylocale\" current-uiculture=\"$mylocale\" />\n";
+ print $nunitxml " <test-suite name=\"profiler-tests.dummy\" success=\"$successbool\" time=\"0\" asserts=\"0\">\n";
+ print $nunitxml " <results>\n";
+ print $nunitxml " <test-suite name=\"MonoTests\" success=\"$successbool\" time=\"0\" asserts=\"0\">\n";
+ print $nunitxml " <results>\n";
+ print $nunitxml " <test-suite name=\"profiler\" success=\"$successbool\" time=\"0\" asserts=\"0\">\n";
+ print $nunitxml " <results>\n";
+ print $nunitxml " <test-case name=\"MonoTests.profiler.100percentsuccess\" executed=\"True\" success=\"$successbool\" time=\"0\" asserts=\"0\"";
+ if ( $failed > 0) {
+ print $nunitxml ">\n";
+ print $nunitxml " <failure>\n";
+ print $nunitxml " <message><![CDATA[";
+ print $nunitxml "The profiler tests returned an error. Check the log for more details.";
+ print $nunitxml "]]></message>\n";
+ print $nunitxml " <stack-trace>\n";
+ print $nunitxml " </stack-trace>\n";
+ print $nunitxml " </failure>\n";
+ print $nunitxml " </test-case>\n";
+ } else {
+ print $nunitxml " />\n";
+ }
+ print $nunitxml " </results>\n";
+ print $nunitxml " </test-suite>\n";
+ print $nunitxml " </results>\n";
+ print $nunitxml " </test-suite>\n";
+ print $nunitxml " </results>\n";
+ print $nunitxml " </test-suite>\n";
+ print $nunitxml "</test-results>\n";
+ close $nunitxml;
+}
+
sub get_delim_data
{
my $report = shift;
foreach my $method (keys %calls) {
my @desc = @{$calls{$method}};
my $num = shift @desc;
- my $trace = get_delim_data ($section, "\\s+\\d+\\s+\\d+\\s+\\d+\\s+\Q$method\E", "^\\s*\\d+\\s+\\d");
+ my $trace = get_delim_data ($section, "\\s+\\d+\\s+\\d+\\s+\\d+\\s+\Q$method\E", "^(\\s*\\d+\\s+\\d)|(^Total calls)");
if ($trace =~ s/^\s+(\d+)\s+calls from:$//m) {
my $num_calls = $1;
push @errors, "Wrong calls to $method." unless $num_calls == $num;
foreach my $type (keys %types) {
my @desc = @{$types{$type}};
my $num = shift @desc;
- my $trace = get_delim_data ($section, "\\s+\\d+\\s+\\d+\\s+\\d+\\s+\Q$type\E", "^\\s*\\d+\\s+\\d");
+ my $trace = get_delim_data ($section, "\\s+\\d+\\s+\\d+\\s+\\d+\\s+\Q$type\E", "^(\\s*\\d+\\s+\\d)|(^Total)");
if ($trace =~ s/^\s+(\d+)\s+bytes from:$//m) {
#my $num_calls = $1;
#push @errors, "Wrong calls to $method." unless $num_calls == $num;
$section = get_heap_shot ($section, $hshot);
foreach my $type (keys %allocs) {
if ($section =~ /\d+\s+(\d+)\s+\d+\s+\Q$type\E(\s+\(bytes.*\))?$/m) {
- push @errors, "Wrong heapshot for type $type." unless $1 >= $allocs{$type};
+ push @errors, "Wrong heapshot for type $type at $hshot ($1, $allocs{$type})." unless $1 >= $allocs{$type};
} else {
- push @errors, "No heapshot for type $type.";
+ push @errors, "No heapshot for type $type at heapshot $hshot.";
}
}
}