Title: [267736] trunk/Tools
Revision
267736
Author
aakash_j...@apple.com
Date
2020-09-29 09:02:07 -0700 (Tue, 29 Sep 2020)

Log Message

[build.webkit.org] Add unit-test to detect invalid triggers in config.json
https://bugs.webkit.org/show_bug.cgi?id=216898

Reviewed by Jonathan Bedard.

* BuildSlaveSupport/build.webkit.org-config/loadConfig_unittest.py: Added.
(ConfigDotJSONTest):
(ConfigDotJSONTest.get_config):
(ConfigDotJSONTest.test_builder_keys):
(ConfigDotJSONTest.test_multiple_scheduers_for_builder):
(ConfigDotJSONTest.test_schduler_contains_valid_builder_name):
(ConfigDotJSONTest.test_single_builder_for_triggerable_scheduler):

Modified Paths

Added Paths

Diff

Added: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/loadConfig_unittest.py (0 => 267736)


--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/loadConfig_unittest.py	                        (rev 0)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/loadConfig_unittest.py	2020-09-29 16:02:07 UTC (rev 267736)
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2020 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
+# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+import json
+import os
+import unittest
+
+
+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 test_builder_keys(self):
+        config = self.get_config()
+        valid_builder_keys = ['additionalArguments', 'architectures', 'builddir', 'configuration', 'description',
+                              'defaultProperties', 'device_model', 'env', 'factory', 'icon', 'locks', 'name', 'platform', 'properties',
+                              'remotes', 'runTests', 'shortname', 'type', 'tags', 'triggers', 'workernames', 'slavenames', 'workerbuilddir']
+        for builder in config.get('builders', []):
+            for key in builder:
+                self.assertTrue(key in valid_builder_keys, 'Unexpected key "{}" for builder {}'.format(key, builder.get('name')))
+
+    def test_multiple_scheduers_for_builder(self):
+        config = self.get_config()
+        builder_to_schduler_map = {}
+
+        for scheduler in config.get('schedulers'):
+            for buildername in scheduler.get('builderNames'):
+                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.get('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']))
+
+
+if __name__ == '__main__':
+    unittest.main()

Modified: trunk/Tools/ChangeLog (267735 => 267736)


--- trunk/Tools/ChangeLog	2020-09-29 15:52:57 UTC (rev 267735)
+++ trunk/Tools/ChangeLog	2020-09-29 16:02:07 UTC (rev 267736)
@@ -1,3 +1,18 @@
+2020-09-29  Aakash Jain  <aakash_j...@apple.com>
+
+        [build.webkit.org] Add unit-test to detect invalid triggers in config.json
+        https://bugs.webkit.org/show_bug.cgi?id=216898
+
+        Reviewed by Jonathan Bedard.
+
+        * BuildSlaveSupport/build.webkit.org-config/loadConfig_unittest.py: Added.
+        (ConfigDotJSONTest):
+        (ConfigDotJSONTest.get_config):
+        (ConfigDotJSONTest.test_builder_keys):
+        (ConfigDotJSONTest.test_multiple_scheduers_for_builder):
+        (ConfigDotJSONTest.test_schduler_contains_valid_builder_name):
+        (ConfigDotJSONTest.test_single_builder_for_triggerable_scheduler):
+
 2020-09-28  Jonathan Bedard  <jbed...@apple.com>
 
         [webkitpy] Use webkitcorepy's auto installer for pycodestyle (Follow-up fix)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to