Let ParseWineTestReport() populate the list of errors, and only use GetReportLineCategory() as a fallback.
Signed-off-by: Francois Gouget fgouget@codeweavers.com --- testbot/lib/WineTestBot/LogUtils.pm | 59 ++++++++++++++++++----------- 1 file changed, 37 insertions(+), 22 deletions(-)
diff --git a/testbot/lib/WineTestBot/LogUtils.pm b/testbot/lib/WineTestBot/LogUtils.pm index dae8292a7..267dcd9ec 100644 --- a/testbot/lib/WineTestBot/LogUtils.pm +++ b/testbot/lib/WineTestBot/LogUtils.pm @@ -368,6 +368,8 @@ sub _NewCurrentUnit($$) IsBroken => 0, Rc => undef, Pids => {}, + Group => undef, + GroupLineNo => 0, }; }
@@ -462,6 +464,25 @@ sub _CloseTestUnit($$$) $LogInfo->{Failures} += $Cur->{LineFailures}; }
+sub _AddReportError($$$$) +{ + my ($LogInfo, $Cur, $LineNo, $Line) = @_; + + # Make the timeout messages more user-friendly + my $ErrLine = $Line; + if ($ErrLine =~ /^[^:]+:([^:]*):[0-9a-f]+ done (258)/) + { + my $Unit = $1; + $ErrLine = $Unit ne "" ? "$Unit: Timeout" : "Timeout"; + } + + if (!$Cur->{Group}) + { + $Cur->{Group} = _AddLogGroup($LogInfo, $Cur->{Dll}, $Cur->{GroupLineNo} || $LineNo); + } + _AddLogError($LogInfo, $Cur->{Group}, $ErrLine, $LineNo); +} + =pod =over 12
@@ -522,8 +543,6 @@ sub ParseWineTestReport($$$) }
my $LineNo = 0; - my $CurGroupName = ""; - my ($CurGroup, $CurGroupLineNo); my $Cur = _NewCurrentUnit("", ""); foreach my $Line (<$LogFile>) { @@ -533,23 +552,6 @@ sub ParseWineTestReport($$$) chomp $Line; $Line =~ s/\r+$//;
- if (GetReportLineCategory($Line) eq "error") - { - # Make the timeout messages more user-friendly - my $ErrLine = $Line; - if ($ErrLine =~ /^[^:]+:([^:]*):[0-9a-f]+ done (258)/) - { - my $Unit = $1; - $ErrLine = $Unit ne "" ? "$Unit: Timeout" : "Timeout"; - } - - if (!$CurGroup) - { - $CurGroup = _AddLogGroup($LogInfo, $CurGroupName, $CurGroupLineNo || $LineNo); - } - _AddLogError($LogInfo, $CurGroup, $ErrLine, $LineNo); - } - if ($Line =~ m%^([_.a-z0-9-]+):([_a-z0-9]*) (start|skipped) (?:-|[/_.a-z0-9-]+) (?:-|[.0-9a-f]+)$%) { my ($Dll, $Unit, $Type) = ($1, $2, $3); @@ -563,9 +565,8 @@ sub ParseWineTestReport($$$) $Cur->{Rc} = 0 if ($Type eq "skipped");
# The next error will be in a new error group - $CurGroupName = $Dll; - $CurGroupLineNo = $LineNo; - $CurGroup = undef; + $Cur->{GroupLineNo} = $LineNo; + $Cur->{Group} = undef; } elsif ($Line =~ /^([_.a-z0-9-]+).c:\d+: Subtest ([_.a-z0-9-]+)$/) { @@ -586,6 +587,7 @@ sub ParseWineTestReport($$$) $Line =~ /^([_a-z0-9]+).c:\d+: Test (?:failed|succeeded inside todo block): /) { _CheckUnit($LogInfo, $Cur, $1, "failure"); + _AddReportError($LogInfo, $Cur, $LineNo, $Line); $Cur->{LineFailures}++; } elsif (($Cur->{Unit} ne "" and @@ -614,6 +616,7 @@ sub ParseWineTestReport($$$) $Cur->{SummaryFailures}++; $LogInfo->{IsWineTest} = 1;
+ _AddReportError($LogInfo, $Cur, $LineNo, $Line); $Cur->{LineFailures}++; } elsif (($Cur->{Unit} ne "" and @@ -629,6 +632,7 @@ sub ParseWineTestReport($$$) $Cur->{SummaryFailures}++; } _CheckUnit($LogInfo, $Cur, $Unit, "unhandled exception"); + _AddReportError($LogInfo, $Cur, $LineNo, $Line); $Cur->{LineFailures}++; } elsif ($Line =~ /Unhandled exception: .* in .* code /) @@ -636,6 +640,7 @@ sub ParseWineTestReport($$$) # This also replaces a test summary line. The pid is unknown so use 0. $Cur->{Pids}->{0} = 1; $Cur->{SummaryFailures}++; + _AddReportError($LogInfo, $Cur, $LineNo, $Line); $Cur->{LineFailures}++; } elsif (($Cur->{Unit} ne "" and @@ -650,6 +655,7 @@ sub ParseWineTestReport($$$) $Cur->{SummaryFailures}++; } _CheckUnit($LogInfo, $Cur, $Unit, "child exception"); + _AddReportError($LogInfo, $Cur, $LineNo, $Line); $Cur->{LineFailures}++; } elsif (($Cur->{Unit} ne "" and @@ -704,6 +710,7 @@ sub ParseWineTestReport($$$) $LogInfo->{Failures}++; $Cur->{IsBroken} = 1; $LogInfo->{TimeoutCount}++; + _AddReportError($LogInfo, $Cur, $LineNo, $&); } elsif ((!$Pid and !%{$Cur->{Pids}}) or ($Pid and !$Cur->{Pids}->{$Pid} and !$Cur->{Pids}->{0})) @@ -729,6 +736,14 @@ sub ParseWineTestReport($$$) } $Cur->{Rc} = $Rc; } + elsif (GetReportLineCategory($Line) eq "error") + { + # This should only happen on very garbled lines, or if there is an + # inconsistency between GetReportLineCategory() and + # ParseWineTestReport(). + _AddReportError($LogInfo, $Cur, $LineNo, $Line); + } + } $Cur->{IsBroken} = 1 if ($LogInfo->{TaskTimedOut}); _CloseTestUnit($LogInfo, $Cur, 1);