Skip to content

Commit ca85976

Browse files
authored
Merge pull request #39 from kuznetsovmoci/Buffer_2
Failed Tests log by Test
2 parents 4d9328f + 9eda615 commit ca85976

File tree

2 files changed

+179
-79
lines changed

2 files changed

+179
-79
lines changed

common/prettify.pm

Lines changed: 128 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,7 @@ sub new ($)
369369
my $self = {};
370370
my $basename = shift;
371371
my $buildname = shift;
372+
my $failed_tests = shift;
372373
my $rev_link = shift;
373374
my $log_prefix = shift;
374375

@@ -383,6 +384,7 @@ sub new ($)
383384
$self->{SUBSECTION_COUNTER} = 0;
384385
$self->{TITLE} = "Failed Test Brief Log By Build";
385386
$self->{GIT_CHECKEDOUT_OPENDDS} = "unknown";
387+
$self->{FAILED_TESTS} = $failed_tests;
386388
$self->{REV_LINK} = $rev_link;
387389

388390
unless (-e $filename) {
@@ -393,6 +395,8 @@ sub new ($)
393395
$self->{FH} = new FileHandle ($filename, '>>');
394396
$self->{FILENAME} = $filename;
395397
$self->{BUILDNAME} = $buildname;
398+
$self->{USE_BUILDNAME} = '';
399+
$self->{CURRENT_SUBSECTION} = '';
396400

397401
bless ($self, $class);
398402
return $self;
@@ -401,7 +405,6 @@ sub new ($)
401405
sub Header ()
402406
{
403407
my $self = shift;
404-
405408
if (defined $self->{LAST_SECTION} && $self->{LAST_SECTION} eq 'Test') {
406409
print {$self->{FH}} "<html>\n";
407410
print {$self->{FH}} "<body bgcolor=\"white\">\n";
@@ -471,29 +474,42 @@ sub Subsection ($)
471474
sub Print_Sections ()
472475
{
473476
my $self = shift;
477+
my $rev = substr($self->{GIT_CHECKEDOUT_OPENDDS}, 0, 8);
478+
my $rev_line = "";
479+
if ($rev ne "unknown") {
480+
$rev_line = "Rev: ";
481+
if (length($self->{REV_LINK})) {
482+
$rev_line .= "<a href=$self->{REV_LINK}";
483+
$rev_line =~ s/\/$//g;
484+
$rev_line .= "/$rev>";
485+
}
486+
$rev_line .= $rev;
487+
if (length($self->{REV_LINK})) {
488+
$rev_line .= "</a>";
489+
}
490+
}
474491

475492
if (defined $self->{LAST_SECTION} && defined $self->{LAST_SUBSECTION} && $self->{LAST_SECTION} eq 'Test') {
476-
if (defined $self->{BUILDNAME}) {
477-
print {$self->{FH}} "<hr><h2>$self->{BUILDNAME}</h2>\n";
478-
my $rev = substr($self->{GIT_CHECKEDOUT_OPENDDS}, 0, 8);
493+
if (defined $self->{USE_BUILDNAME}) {
494+
print {$self->{FH}} "<hr><h2>$self->{BUILDNAME}</h2>";
479495
if ($rev ne "unknown") {
480-
my $rev_line = "Rev: ";
481-
if (length($self->{REV_LINK})) {
482-
$rev_line .= "<a href=$self->{REV_LINK}";
483-
$rev_line =~ s/\/$//g;
484-
$rev_line .= "/$rev>";
485-
}
486-
$rev_line .= $rev;
487-
if (length($self->{REV_LINK})) {
488-
$rev_line .= "</a>";
489-
}
490-
print {$self->{FH}} "$rev_line<hr>\n";
491-
}
492-
$self->{BUILDNAME} = undef;
496+
print {$self->{FH}} "$rev_line\n";
497+
}
498+
$self->{USE_BUILDNAME} = undef;
499+
}
500+
501+
if (defined $self->{FAILED_TESTS}->{$self->{LAST_SUBSECTION}}) {
502+
$self->{FAILED_TESTS}->{$self->{LAST_SUBSECTION}} = $self->{FAILED_TESTS}->{$self->{LAST_SUBSECTION}} . "<h3>$self->{BUILDNAME}</h3>\n$rev_line<br><br>";
503+
}
504+
else {
505+
$self->{FAILED_TESTS}->{$self->{LAST_SUBSECTION}} = "<h3>$self->{BUILDNAME}</h3>\n$rev_line<br><br>";
493506
}
494507

495508
print {$self->{FH}} "<a name=\"subsection_$self->{SUBSECTION_COUNTER}\"></a>";
496-
print {$self->{FH}} "<h3>$self->{LAST_SUBSECTION}</h3>\n";
509+
print {$self->{FH}} "<h3>$self->{LAST_SUBSECTION}</h3>";
510+
511+
$self->{CURRENT_SUBSECTION} = $self->{LAST_SUBSECTION};
512+
497513
$self->{LAST_SUBSECTION} = undef;
498514
}
499515
}
@@ -504,7 +520,6 @@ sub Error ($)
504520
my $s = shift;
505521

506522
if (defined $self->{LAST_SECTION} && $self->{LAST_SECTION} eq 'Test') {
507-
508523
# Escape any '<' or '>' signs
509524
$s =~ s/</&lt;/g;
510525
$s =~ s/>/&gt;/g;
@@ -513,10 +528,17 @@ sub Error ($)
513528

514529
$self->Print_Sections ();
515530

516-
print {$self->{FH}} "<a name=\"error_$counter\"></a>\n";
517-
print {$self->{FH}} "<tt>[<a href=\"$self->{FULLHTML}#error_$counter"
518-
. "\">Details</a>] </tt>";
519-
print {$self->{FH}} "<font color=\"FF0000\"><tt>$s</tt></font><br>\n";
531+
my $Err1 = "<a name=\"error_$counter\"></a>\n";
532+
my $Err2 = "<tt>[<a href=\"$self->{FULLHTML}#error_$counter" . "\">Details</a>] </tt>";
533+
my $Err3 = "<font color=\"FF0000\"><tt>$s</tt></font><br>\n";
534+
535+
print {$self->{FH}} $Err1;
536+
print {$self->{FH}} $Err2;
537+
print {$self->{FH}} $Err3;
538+
539+
$self->{FAILED_TESTS}->{$self->{CURRENT_SUBSECTION}} = $self->{FAILED_TESTS}->{$self->{CURRENT_SUBSECTION}} . $Err1;
540+
$self->{FAILED_TESTS}->{$self->{CURRENT_SUBSECTION}} = $self->{FAILED_TESTS}->{$self->{CURRENT_SUBSECTION}} . $Err2;
541+
$self->{FAILED_TESTS}->{$self->{CURRENT_SUBSECTION}} = $self->{FAILED_TESTS}->{$self->{CURRENT_SUBSECTION}} . $Err3;
520542
}
521543
}
522544

@@ -534,10 +556,17 @@ sub Warning ($)
534556

535557
$self->Print_Sections ();
536558

537-
print {$self->{FH}} "<a name=\"warning_$counter\"></a>\n";
538-
print {$self->{FH}} "<tt>[<a href=\"$self->{FULLHTML}#warning_$counter"
539-
. "\">Details</a>] </tt>";
540-
print {$self->{FH}} "<font color=\"FF7700\"><tt>$s</tt></font><br>\n";
559+
my $Warning1 = "<a name=\"warning_$counter\"></a>\n";
560+
my $Warning2 = "<tt>[<a href=\"$self->{FULLHTML}#warning_$counter\">Details</a>] </tt>";
561+
my $Warning3 = "<font color=\"FF7700\"><tt>$s</tt></font><br>\n";
562+
563+
print {$self->{FH}} $Warning1;
564+
print {$self->{FH}} $Warning2;
565+
print {$self->{FH}} $Warning3;
566+
567+
$self->{FAILED_TESTS}->{$self->{CURRENT_SUBSECTION}} = $self->{FAILED_TESTS}->{$self->{CURRENT_SUBSECTION}} . $Warning1;
568+
$self->{FAILED_TESTS}->{$self->{CURRENT_SUBSECTION}} = $self->{FAILED_TESTS}->{$self->{CURRENT_SUBSECTION}} . $Warning2;
569+
$self->{FAILED_TESTS}->{$self->{CURRENT_SUBSECTION}} = $self->{FAILED_TESTS}->{$self->{CURRENT_SUBSECTION}} . $Warning3;
541570
}
542571
}
543572

@@ -1060,48 +1089,72 @@ use FileHandle;
10601089

10611090
###############################################################################
10621091

1063-
sub new ($$$$$$)
1092+
sub new ($$$$$$$$)
10641093
{
10651094
my $proto = shift;
10661095
my $class = ref ($proto) || $proto;
10671096
my $self = {};
10681097
my $basename = shift;
10691098
my $buildname = shift;
1099+
my $failed_tests_ref = shift;
10701100
my $skip_failed_test_logs = shift;
10711101
my $rev_link = shift;
10721102
my $log_prefix = shift;
1103+
my $failed_tests_only = shift;
10731104

10741105
# Initialize some variables
10751106

10761107
$self->{STATE} = '';
10771108
$self->{LAST_SECTION} = '';
10781109
$self->{LAST_DESCRIPTION} = '';
1079-
1080-
# Initialize the hash table of handlers for each section
1081-
1082-
%{$self->{HANDLERS}} =
1083-
(
1084-
'begin' => \&Normal_Handler,
1085-
'setup' => \&Setup_Handler,
1086-
'config' => \&Config_Handler,
1087-
'configure' => \&Autoconf_Handler,
1088-
'compile' => \&Compile_Handler,
1089-
'test' => \&Test_Handler,
1090-
'end' => \&Normal_Handler
1091-
);
1092-
1093-
# Initialize the list of output classes
1094-
1095-
@{$self->{OUTPUT}} =
1096-
(
1097-
new Prettify::Full_HTML ($basename), #Must be 0
1098-
new Prettify::Brief_HTML ($basename),
1099-
new Prettify::Totals_HTML ($basename), #Must be 2
1100-
new Prettify::Config_HTML ($basename), #Must be 3
1101-
);
1110+
$self->{FAILED_TESTS} = $failed_tests_ref;
1111+
$self->{FAILED_TESTS_ONLY} = $failed_tests_only;
1112+
1113+
if ($failed_tests_only) {
1114+
$self->{TOTALS} = new Prettify::Totals_HTML ($basename);
1115+
}
1116+
1117+
if (!$failed_tests_only) {
1118+
# Initialize the hash table of handlers for each section
1119+
1120+
%{$self->{HANDLERS}} =
1121+
(
1122+
'begin' => \&Normal_Handler,
1123+
'setup' => \&Setup_Handler,
1124+
'config' => \&Config_Handler,
1125+
'configure' => \&Autoconf_Handler,
1126+
'compile' => \&Compile_Handler,
1127+
'test' => \&Test_Handler,
1128+
'end' => \&Normal_Handler
1129+
);
1130+
1131+
# Initialize the list of output classes
1132+
1133+
@{$self->{OUTPUT}} =
1134+
(
1135+
new Prettify::Full_HTML ($basename), #Must be at 0
1136+
new Prettify::Brief_HTML ($basename),
1137+
new Prettify::Totals_HTML ($basename), #Must be at 2
1138+
new Prettify::Config_HTML ($basename), #Must be at 3
1139+
);
11021140

1103-
if (!$skip_failed_test_logs) {
1104-
push @{$self->{OUTPUT}}, new Prettify::Failed_Tests_HTML ($basename, $buildname, $rev_link, $log_prefix); #Must be 4, if used
1141+
if (!$skip_failed_test_logs) {
1142+
push @{$self->{OUTPUT}}, new Prettify::Failed_Tests_HTML ($basename, $buildname, $self->{FAILED_TESTS}, $rev_link, $log_prefix); #Must be at 4, if used with other reports
1143+
}
1144+
}
1145+
elsif (!$skip_failed_test_logs) {
1146+
%{$self->{HANDLERS}} =
1147+
(
1148+
'begin' => \&Normal_Handler,
1149+
'setup' => \&Setup_Handler,
1150+
'config' => \&Config_Handler,
1151+
'test' => \&Test_Handler,
1152+
);
1153+
1154+
@{$self->{OUTPUT}} =
1155+
(
1156+
new Prettify::Failed_Tests_HTML ($basename, $buildname, $self->{FAILED_TESTS}, $rev_link, $log_prefix),
1157+
);
11051158
}
11061159

11071160
my $junit = main::GetVariable ('junit_xml_output');
@@ -1316,7 +1369,7 @@ sub Setup_Handler ($)
13161369
return;
13171370
}
13181371

1319-
my $totals= (@{$self->{OUTPUT}})[2];
1372+
my $totals= $self->{FAILED_TESTS_ONLY} ? $self->{TOTALS} : (@{$self->{OUTPUT}})[2];
13201373

13211374
if ($s =~ m/Executing: (?:.*\/)?cvs(?:.exe)? /i) ## Prismtech still use some CVS please leave
13221375
{
@@ -1448,11 +1501,10 @@ sub Setup_Handler ($)
14481501
elsif ("$totals->{GIT_CHECKEDOUT_OPENDDS}" eq "Matched")
14491502
{
14501503
$totals->{GIT_CHECKEDOUT_OPENDDS} = $sha;
1451-
if (exists ($self->{OUTPUT}[4]))
1504+
if (exists ($self->{OUTPUT}[$self->{FAILED_TESTS_ONLY} ? 0 : 4]))
14521505
{
1453-
(@{$self->{OUTPUT}})[4]->{GIT_CHECKEDOUT_OPENDDS} = $sha;
1506+
(@{$self->{OUTPUT}})[$self->{FAILED_TESTS_ONLY} ? 0 : 4]->{GIT_CHECKEDOUT_OPENDDS} = $sha;
14541507
}
1455-
14561508
}
14571509
$self->Output_Normal ($s);
14581510
}
@@ -1523,10 +1575,12 @@ sub Config_Handler ($)
15231575
my $state = $self->{STATE};
15241576

15251577
# We only want to output config stuff to the Config_HTML class (and FULL)
1526-
$outputs[0]->Normal($s, $state);
1527-
$outputs[3]->Normal($s, $state);
1578+
if (!$self->{FAILED_TESTS_ONLY}){
1579+
$outputs[0]->Normal($s, $state);
1580+
$outputs[3]->Normal($s, $state);
1581+
}
15281582

1529-
my $totals= (@{$self->{OUTPUT}})[2];
1583+
my $totals= $self->{FAILED_TESTS_ONLY} ? $self->{TOTALS} : (@{$self->{OUTPUT}})[2];
15301584

15311585
if ($s =~ m/SVN_REVISION(_(\d))?=(\d+)/)
15321586
{
@@ -1583,9 +1637,9 @@ sub Config_Handler ($)
15831637
my $revision = $totals->{GIT_REVISIONS}[0];
15841638
print "Matched GIT url to revision $revision\n";
15851639
$totals->{GIT_CHECKEDOUT_OPENDDS} = $revision;
1586-
if (exists ($self->{OUTPUT}[4]))
1640+
if (exists ($self->{OUTPUT}[$self->{FAILED_TESTS_ONLY} ? 0 : 4]))
15871641
{
1588-
(@{$self->{OUTPUT}})[4]->{GIT_CHECKEDOUT_OPENDDS} = $revision;
1642+
(@{$self->{OUTPUT}})[$self->{FAILED_TESTS_ONLY} ? 0 : 4]->{GIT_CHECKEDOUT_OPENDDS} = $revision;
15891643
}
15901644
}
15911645
}
@@ -1720,17 +1774,19 @@ sub BuildErrors ($)
17201774
# In this function we process the log file line by line,
17211775
# looking for errors.
17221776

1723-
sub Process ($;$$$$)
1777+
sub Process ($;$$$$$$)
17241778
{
17251779
my $filename = shift;
17261780
my $basename = $filename;
17271781
$basename =~ s/\.txt$//;
17281782
my $buildname = shift // "";
1783+
my $failed_tests_ref = shift // {};
17291784
my $skip_failed_test_logs = shift // 1;
17301785
my $rev_link = shift // "";
17311786
my $log_prefix = shift // "";
1787+
my $failed_tests_only = shift // 0;
17321788

1733-
my $processor = new Prettify ($basename, $buildname, $skip_failed_test_logs, $rev_link, $log_prefix);
1789+
my $processor = new Prettify ($basename, $buildname, $failed_tests_ref, $skip_failed_test_logs, $rev_link, $log_prefix, $failed_tests_only);
17341790

17351791
my $input = new FileHandle ($filename, 'r');
17361792

@@ -1744,12 +1800,14 @@ sub Process ($;$$$$)
17441800
# notification if MAIL_ADMIN was specified in the XML config
17451801
# file.
17461802

1747-
my @errors = $processor->BuildErrors();
1748-
my $mail_admin = main::GetVariable ( 'MAIL_ADMIN' );
1749-
my $mail_admin_file = main::GetVariable ( 'MAIL_ADMIN_FILE' );
1750-
if ( (scalar( @errors ) > 0) && ((defined $mail_admin) || (defined $mail_admin_file)) )
1751-
{
1752-
$processor->SendEmailNotification();
1803+
if (!$failed_tests_only) {
1804+
my @errors = $processor->BuildErrors();
1805+
my $mail_admin = main::GetVariable ( 'MAIL_ADMIN' );
1806+
my $mail_admin_file = main::GetVariable ( 'MAIL_ADMIN_FILE' );
1807+
if ( (scalar( @errors ) > 0) && ((defined $mail_admin) || (defined $mail_admin_file)) )
1808+
{
1809+
$processor->SendEmailNotification();
1810+
}
17531811
}
17541812

17551813
return $processor;

0 commit comments

Comments
 (0)