[tools] testbot/TestWTBS: Check that no extra test units have been run.

Francois Gouget fgouget at codeweavers.com
Sun Feb 21 23:26:12 CST 2021


TestUnits is now an exhaustive list of test units that are expected to
be run. Any extra test unit is reported as a failure.
To compensate one can now add a module name to accept any test unit from
that module. This allows dealing with the test=module configurations.

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
 testbot/tests/TestWTBS | 34 +++++++++++++++++++++++++++++-----
 1 file changed, 29 insertions(+), 5 deletions(-)

diff --git a/testbot/tests/TestWTBS b/testbot/tests/TestWTBS
index 8a77b00de..1467c4b4e 100755
--- a/testbot/tests/TestWTBS
+++ b/testbot/tests/TestWTBS
@@ -1038,11 +1038,15 @@ p win.HasTask 0
 
 =item <tests.TestUnits>
 
-Checks that the TestBot ran at least the test units mentioned in this
-space-separated list on the VMs matching the specified category.
+Checks that the TestBot ran the test units mentioned in this space-separated
+list on the VMs matching the specified category. Each entry is either of the
+form module:unit, or just module in which case it matches any test unit of the
+specified module. Each entry in the list must match at least one test unit.
+Two entries can match the same test unit(s).
+This is useful when test=module, in which case the TestBot may run many tests.
 
 For instance:
-p win.TestUnits cabinet:extract cabinet:fdi
+p win.TestUnits cabinet:newunit cabinet
 
 =item <patch.Grep>
 =item <patch.GrepV>
@@ -1168,11 +1172,31 @@ sub CheckJobTree($;$)
         my $MissionInfo = $TestInfo->{$MissionType};
         next if (!CheckValue($MissionInfo->{TestUnits}));
 
-        foreach my $TestUnit (split / +/, $MissionInfo->{TestUnits})
+        foreach my $TestGrep (split / +/, $MissionInfo->{TestUnits})
         {
-          ok($TestUnits->{$MissionType}->{$TestUnit}, "Check that $TestUnit was tested by $MissionType VMs for job $JobId")
+          if ($TestGrep =~ /:/)
+          {
+            if (exists $TestUnits->{$MissionType}->{$TestGrep})
+            {
+              $TestUnits->{$MissionType}->{$TestGrep} = 0;
+              next;
+            }
+            fail("Check that $MissionType VMs ran $TestGrep for job $JobId")
+                or diag("TestUnits=", join(" ", sort keys %{$TestUnits->{$MissionType}}));
+          }
+          my $Matched;
+          foreach my $TestUnit (keys %{$TestUnits->{$MissionType}})
+          {
+            next if ($TestUnit !~/^\Q$TestGrep:\E/);
+            $TestUnits->{$MissionType}->{$TestUnit} = 0;
+            $Matched = 1;
+          }
+          ok($Matched, "Check that $MissionType VMs ran $TestGrep for job $JobId")
               or diag("TestUnits=", join(" ", sort keys %{$TestUnits->{$MissionType}}));
         }
+        my @ExtraUnits = grep { $TestUnits->{$MissionType}->{$_} } keys %{$TestUnits->{$MissionType}};
+        ok(!@ExtraUnits, "Check that $MissionType VMs ran no extra test units")
+            or diag("Extraneous test runs=". join(" ", sort @ExtraUnits));
       }
     }
 
-- 
2.20.1




More information about the wine-devel mailing list