[tools] testbot: Deduplicate matching errors in ParseWineTestReport().
Let ParseWineTestReport() populate the list of errors, and only use GetReportLineCategory() as a fallback. Signed-off-by: Francois Gouget <fgouget(a)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); -- 2.20.1
participants (1)
-
Francois Gouget