Title: [267052] trunk/Tools
Revision
267052
Author
aakash_j...@apple.com
Date
2020-09-14 15:39:19 -0700 (Mon, 14 Sep 2020)

Log Message

Add unit-tests for triggered_by key in ews config
https://bugs.webkit.org/show_bug.cgi?id=216487

Reviewed by Jonathan Bedard.

* BuildSlaveSupport/ews-build/loadConfig_unittest.py:
(ConfigDotJSONTest.get_config): Method to read config.json
(ConfigDotJSONTest.test_schduler_contains_valid_builder_name): Ensure that scheduler references a valid builder.
(ConfigDotJSONTest.test_single_builder_for_triggerable_scheduler): Ensure that every Triggerable scheduler references a single builder.
(ConfigDotJSONTest.test_incorrect_triggered_by): Ensure that triggered_by key is correct. Verify by matching that
the builder for the triggered_by scheduler actually triggers current builder.
* BuildSlaveSupport/ews-build/steps_unittest.py:
(TestAnalyzeLayoutTestsResults.test_clean_tree_exceed_failure_limit_with_triggered_by):

Modified Paths

Diff

Modified: trunk/Tools/BuildSlaveSupport/ews-build/loadConfig_unittest.py (267051 => 267052)


--- trunk/Tools/BuildSlaveSupport/ews-build/loadConfig_unittest.py	2020-09-14 22:30:09 UTC (rev 267051)
+++ trunk/Tools/BuildSlaveSupport/ews-build/loadConfig_unittest.py	2020-09-14 22:39:19 UTC (rev 267052)
@@ -31,13 +31,21 @@
 
 
 class ConfigDotJSONTest(unittest.TestCase):
+    def get_config(self):
+        cwd = os.path.dirname(os.path.abspath(__file__))
+        return json.load(open(os.path.join(cwd, 'config.json')))
+
+    def get_builder_from_config(self, config, builder_name):
+        for builder in config['builders']:
+            if builder_name == builder.get('name'):
+                return builder
+
     def test_configuration(self):
         cwd = os.path.dirname(os.path.abspath(__file__))
         loadConfig.loadBuilderConfig({}, is_test_mode_enabled=True, master_prefix_path=cwd)
 
     def test_builder_keys(self):
-        cwd = os.path.dirname(os.path.abspath(__file__))
-        config = json.load(open(os.path.join(cwd, 'config.json')))
+        config = self.get_config()
         valid_builder_keys = ['additionalArguments', 'architectures', 'builddir', 'configuration', 'description',
                               'defaultProperties', 'env', 'factory', 'icon', 'locks', 'name', 'platform', 'properties',
                               'remotes', 'runTests', 'shortname', 'tags', 'triggers', 'triggered_by', 'workernames', 'workerbuilddir']
@@ -46,8 +54,7 @@
                 self.assertTrue(key in valid_builder_keys, 'Unexpected key "{}" for builder {}'.format(key, builder.get('name')))
 
     def test_multiple_scheduers_for_builder(self):
-        cwd = os.path.dirname(os.path.abspath(__file__))
-        config = json.load(open(os.path.join(cwd, 'config.json')))
+        config = self.get_config()
         builder_to_schduler_map = {}
         triggered_by_schedulers = []
         for builder in config['builders']:
@@ -62,7 +69,44 @@
                 self.assertTrue(buildername not in builder_to_schduler_map, 'builder {} appears multiple times in schedulers.'.format(buildername))
                 builder_to_schduler_map[buildername] = scheduler.get('name')
 
+    def test_schduler_contains_valid_builder_name(self):
+        config = self.get_config()
+        builder_name_list = [builder['name'] for builder in config['builders']]
+        for scheduler in config.get('schedulers'):
+            for buildername in scheduler.get('builderNames'):
+                self.assertTrue(buildername in builder_name_list, 'builder "{}" in scheduler "{}" is invalid.'.format(buildername, scheduler['name']))
 
+    def test_single_builder_for_triggerable_scheduler(self):
+        config = self.get_config()
+        for scheduler in config['schedulers']:
+            if scheduler.get('type') == 'Triggerable':
+                self.assertTrue(len(scheduler.get('builderNames')) == 1, 'scheduler "{}" triggers multiple builders.'.format(scheduler['name']))
+
+    def test_incorrect_triggered_by(self):
+        config = self.get_config()
+        schedulers_to_buildername_map = {}
+        for scheduler in config['schedulers']:
+            schedulers_to_buildername_map[scheduler['name']] = scheduler['builderNames']
+
+        for builder in config['builders']:
+            for key, value in builder.iteritems():
+                if key == 'triggered_by':
+                    self.assertTrue(len(value) == 1, 'triggered_by "{}" is invalid, it should contain a single trigger.'.format(value))
+                    self.assertTrue(value[0] in schedulers_to_buildername_map.keys(),
+                                    'triggered_by "{}" for builder "{}" is not listed in schedulers section.'.format(value[0], builder['name']))
+
+                    # Ensure that the triggered_by is correct, verify by matching that the builder for the triggered_by scheduler actually triggers current builder
+                    triggered_by = value[0]
+                    triggering_builder_name = schedulers_to_buildername_map.get(triggered_by)[0]
+                    triggering_builder = self.get_builder_from_config(config, triggering_builder_name)
+                    self.assertTrue(triggering_builder, 'builder "{}" in scheduler "{}" is invalid.'.format(triggering_builder_name, triggered_by))
+                    triggering_builder_triggers = triggering_builder.get('triggers')
+                    triggering_builder_triggers_buildernames = [schedulers_to_buildername_map[scheduler][0] for scheduler in triggering_builder_triggers]
+                    self.assertTrue(builder['name'] in triggering_builder_triggers_buildernames,
+                                    'Incorrect triggered_by "{}" in builder "{}", this builder is not in corresponding builder triggers "{}".'
+                                    .format(triggered_by, builder['name'], triggering_builder_triggers_buildernames))
+
+
 class TagsForBuilderTest(unittest.TestCase):
     def verifyTags(self, builderName, expectedTags):
         tags = loadConfig.getTagsForBuilder({'name': builderName})

Modified: trunk/Tools/BuildSlaveSupport/ews-build/steps_unittest.py (267051 => 267052)


--- trunk/Tools/BuildSlaveSupport/ews-build/steps_unittest.py	2020-09-14 22:30:09 UTC (rev 267051)
+++ trunk/Tools/BuildSlaveSupport/ews-build/steps_unittest.py	2020-09-14 22:39:19 UTC (rev 267052)
@@ -2024,6 +2024,20 @@
         self.expectOutcome(result=RETRY, state_string='Unable to confirm if test failures are introduced by patch, retrying build (retry)')
         return self.runStep()
 
+    def test_clean_tree_exceed_failure_limit_with_triggered_by(self):
+        self.configureStep()
+        self.setProperty('buildername', 'iOS-13-Simulator-WK2-Tests-EWS')
+        self.setProperty('triggered_by', 'ios-13-sim-build-ews')
+        self.setProperty('first_run_failures', ['test1'])
+        self.setProperty('second_run_failures', ['test1'])
+        self.setProperty('clean_tree_results_exceed_failure_limit', True)
+        self.setProperty('clean_tree_run_failures',  ['test{}'.format(i) for i in range(0, 30)])
+        message = 'Unable to confirm if test failures are introduced by patch, retrying build'
+        self.expectOutcome(result=SUCCESS, state_string=message)
+        rc = self.runStep()
+        self.assertEqual(self.getProperty('build_summary'), message)
+        return rc
+
     def test_clean_tree_has_lot_of_failures(self):
         self.configureStep()
         self.setProperty('first_results_exceed_failure_limit', True)

Modified: trunk/Tools/ChangeLog (267051 => 267052)


--- trunk/Tools/ChangeLog	2020-09-14 22:30:09 UTC (rev 267051)
+++ trunk/Tools/ChangeLog	2020-09-14 22:39:19 UTC (rev 267052)
@@ -1,3 +1,19 @@
+2020-09-14  Aakash Jain  <aakash_j...@apple.com>
+
+        Add unit-tests for triggered_by key in ews config
+        https://bugs.webkit.org/show_bug.cgi?id=216487
+
+        Reviewed by Jonathan Bedard.
+
+        * BuildSlaveSupport/ews-build/loadConfig_unittest.py:
+        (ConfigDotJSONTest.get_config): Method to read config.json
+        (ConfigDotJSONTest.test_schduler_contains_valid_builder_name): Ensure that scheduler references a valid builder.
+        (ConfigDotJSONTest.test_single_builder_for_triggerable_scheduler): Ensure that every Triggerable scheduler references a single builder.
+        (ConfigDotJSONTest.test_incorrect_triggered_by): Ensure that triggered_by key is correct. Verify by matching that
+        the builder for the triggered_by scheduler actually triggers current builder.
+        * BuildSlaveSupport/ews-build/steps_unittest.py:
+        (TestAnalyzeLayoutTestsResults.test_clean_tree_exceed_failure_limit_with_triggered_by):
+
 2020-09-14  Alex Christensen  <achristen...@webkit.org>
 
         Move cookie flushing SPI from WKProcessPool to WKHTTPCookieStore
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to