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()