Title: [270262] trunk/Tools
Revision
270262
Author
[email protected]
Date
2020-11-30 13:45:39 -0800 (Mon, 30 Nov 2020)

Log Message

[build.webkit.org] Move old buildbot unittests to steps_unittest_old.py
https://bugs.webkit.org/show_bug.cgi?id=219364

Reviewed by Jonathan Bedard.

* CISupport/build-webkit-org/committer_auth_unittest.py: Removed.
* CISupport/build-webkit-org/committer_auth_unittest_old.py: Moved from Tools/CISupport/build-webkit-org/committer_auth_unittest.py.
* CISupport/build-webkit-org/steps_unittest.py: Removed.
* CISupport/build-webkit-org/steps_unittest_old.py: Moved from Tools/CISupport/build-webkit-org/steps_unittest.py.
* CISupport/ews-build/steps.py:
(RunBuildWebKitOrgUnitTests): Updated ews configuration appropriately.
(RunBuildWebKitOrgUnitTests.getResultSummary):
* CISupport/ews-build/steps_unittest.py: Updated ews unit-tests.

Modified Paths

Added Paths

Removed Paths

Diff

Deleted: trunk/Tools/CISupport/build-webkit-org/committer_auth_unittest.py (270261 => 270262)


--- trunk/Tools/CISupport/build-webkit-org/committer_auth_unittest.py	2020-11-30 21:42:48 UTC (rev 270261)
+++ trunk/Tools/CISupport/build-webkit-org/committer_auth_unittest.py	2020-11-30 21:45:39 UTC (rev 270262)
@@ -1,220 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (C) 2011 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 StringIO
-import __builtin__
-import buildbot.status.web.auth
-import contextlib
-import os
-import unittest
-
-from committer_auth import CommitterAuth
-
-
-# This subclass of StringIO supports the context manager protocol so it works
-# with "with" statements, just like real files.
-class CMStringIO(StringIO.StringIO):
-    def __enter__(self):
-        return self
-
-    def __exit__(self, exception, value, traceback):
-        self.close()
-
-
[email protected]
-def open_override(func):
-    original_open = __builtin__.open
-    __builtin__.open = func
-    yield
-    __builtin__.open = original_open
-
-
-class CommitterAuthTest(unittest.TestCase):
-    def setUp(self):
-        self.auth = CommitterAuth('path/to/auth.json')
-        self.auth.open_auth_json_file = self.fake_auth_json_file
-        self.auth.open_webkit_committers_file = self.fake_committers_file
-        self.auth.open_trac_credentials_file = self.fake_htdigest_file
-
-    def fake_open_function(self, expected_filename):
-        def fake_open(name, mode='r'):
-            self.fake_open_was_called = True
-            self.assertEqual(expected_filename, name)
-        return fake_open
-
-    def test_authentication_success(self):
-        self.assertTrue(self.auth.authenticate('[email protected]', 'committerpassword'))
-        self.assertEqual('', self.auth.errmsg())
-        self.assertTrue(self.auth.authenticate('[email protected]', 'committer2password'))
-        self.assertEqual('', self.auth.errmsg())
-
-    def test_committer_without_trac_credentials_fails(self):
-        self.assertFalse(self.auth.authenticate('[email protected]', 'committer3password'))
-        self.assertEqual('Invalid username/password', self.auth.errmsg())
-
-    def test_fail_to_open_auth_json_file(self):
-        def raise_IOError():
-            raise IOError(2, 'No such file or directory', 'path/to/auth.json')
-        auth = CommitterAuth('path/to/auth.json')
-        auth.open_auth_json_file = raise_IOError
-        self.assertFalse(auth.authenticate('[email protected]', 'committerpassword'))
-        self.assertEqual('Error opening auth.json file: No such file or directory', auth.errmsg())
-
-    def test_fail_to_open_trac_credentials_file(self):
-        def raise_IOError():
-            raise IOError(2, 'No such file or directory', 'path/to/trac/credentials')
-        self.auth.open_trac_credentials_file = raise_IOError
-        self.assertFalse(self.auth.authenticate('[email protected]', 'committerpassword'))
-        self.assertEqual('Error opening Trac credentials file: No such file or directory', self.auth.errmsg())
-
-    def test_fail_to_open_webkit_committers_file(self):
-        def raise_IOError():
-            raise IOError(2, 'No such file or directory', 'path/to/webkit/committers')
-        self.auth.open_webkit_committers_file = raise_IOError
-        self.assertFalse(self.auth.authenticate('[email protected]', 'committerpassword'))
-        self.assertEqual('Error opening WebKit committers file: No such file or directory', self.auth.errmsg())
-
-    def test_implements_IAuth(self):
-        self.assertTrue(buildbot.status.web.auth.IAuth.implementedBy(CommitterAuth))
-
-    def test_invalid_auth_json_file(self):
-        auth = CommitterAuth('path/to/auth.json')
-        auth.open_auth_json_file = self.invalid_auth_json_file
-        self.assertFalse(auth.authenticate('[email protected]', 'committerpassword'))
-        self.assertEqual('Error parsing auth.json file: No JSON object could be decoded', auth.errmsg())
-
-    def test_invalid_committers_file(self):
-        self.auth.open_webkit_committers_file = self.invalid_committers_file
-        self.assertFalse(self.auth.authenticate('[email protected]', 'committerpassword'))
-        self.assertEqual('Error parsing WebKit committers file', self.auth.errmsg())
-
-    def test_invalid_trac_credentials_file(self):
-        self.auth.open_trac_credentials_file = self.invalid_htdigest_file
-        self.assertFalse(self.auth.authenticate('[email protected]', 'committerpassword'))
-        self.assertEqual('Error parsing Trac credentials file', self.auth.errmsg())
-
-    def test_missing_auth_json_keys(self):
-        auth = CommitterAuth('path/to/auth.json')
-        auth.open_auth_json_file = lambda: CMStringIO('{ "trac_credentials": "path/to/trac/credentials" }')
-        self.assertFalse(auth.authenticate('[email protected]', 'committerpassword'))
-        self.assertEqual('auth.json file is missing "webkit_committers" key', auth.errmsg())
-
-        auth.open_auth_json_file = lambda: CMStringIO('{ "webkit_committers": "path/to/webkit/committers" }')
-        auth.open_webkit_committers_file = self.fake_committers_file
-        self.assertFalse(auth.authenticate('[email protected]', 'committerpassword'))
-        self.assertEqual('auth.json file is missing "trac_credentials" key', auth.errmsg())
-
-    def test_open_auth_json_file(self):
-        auth = CommitterAuth('path/to/auth.json')
-        self.fake_open_was_called = False
-        with open_override(self.fake_open_function(auth.auth_json_filename())):
-            auth.open_auth_json_file()
-        self.assertTrue(self.fake_open_was_called)
-
-    def test_open_trac_credentials_file(self):
-        auth = CommitterAuth('path/to/auth.json')
-        auth.trac_credentials_filename = lambda: 'trac credentials filename'
-        self.fake_open_was_called = False
-        with open_override(self.fake_open_function(auth.trac_credentials_filename())):
-            auth.open_trac_credentials_file()
-        self.assertTrue(self.fake_open_was_called)
-
-    def test_open_webkit_committers_file(self):
-        auth = CommitterAuth('path/to/auth.json')
-        auth.webkit_committers_filename = lambda: 'webkit committers filename'
-        self.fake_open_was_called = False
-        with open_override(self.fake_open_function(auth.webkit_committers_filename())):
-            auth.open_webkit_committers_file()
-        self.assertTrue(self.fake_open_was_called)
-
-    def test_non_committer_fails(self):
-        self.assertFalse(self.auth.authenticate('[email protected]', 'noncommitterpassword'))
-        self.assertEqual('Invalid username/password', self.auth.errmsg())
-
-    def test_trac_credentials_filename(self):
-        self.assertEqual('path/to/trac/credentials', self.auth.trac_credentials_filename())
-
-    def test_unknown_user_fails(self):
-        self.assertFalse(self.auth.authenticate('[email protected]', 'nobodypassword'))
-        self.assertEqual('Invalid username/password', self.auth.errmsg())
-
-    def test_username_is_prefix_of_valid_user(self):
-        self.assertFalse(self.auth.authenticate('[email protected]', 'committerpassword'))
-        self.assertEqual('Invalid username/password', self.auth.errmsg())
-
-    def test_webkit_committers(self):
-        self.assertEqual(['[email protected]', '[email protected]', '[email protected]'], self.auth.webkit_committers())
-
-    def test_webkit_committers_filename(self):
-        self.assertEqual('path/to/webkit/committers', self.auth.webkit_committers_filename())
-
-    def test_wrong_password_fails(self):
-        self.assertFalse(self.auth.authenticate('[email protected]', 'wrongpassword'))
-        self.assertEqual('Invalid username/password', self.auth.errmsg())
-
-    def fake_auth_json_file(self):
-        return CMStringIO("""{
-    "trac_credentials": "path/to/trac/credentials",
-    "webkit_committers": "path/to/webkit/committers"
-}""")
-
-    def invalid_auth_json_file(self):
-        return CMStringIO('~!@#$%^&*()_+')
-
-    def fake_committers_file(self):
-        return CMStringIO("""[groups]
-group1 = [email protected],[email protected]
-group2 = [email protected]
-
-group3 =
-group4 =
-
-webkit = [email protected],[email protected],[email protected]
-
-[service:/]
-*    = r
-""")
-
-    def invalid_committers_file(self):
-        return CMStringIO("""[groups]
-
-[[groups2]
-""")
-
-    def fake_htdigest_file(self):
-        return CMStringIO("""[email protected]:Mac OS Forge:761c8dcb7d9b5908007ed142f62fe73a
[email protected]:Mac OS Forge:faeee69acc2e49af3a0dbb15bd593ef4
[email protected]:Mac OS Forge:b99aa7ad32306a654ca4d57839fde9c1
-""")
-
-    def invalid_htdigest_file(self):
-        return CMStringIO("""[email protected]:Mac OS Forge:761c8dcb7d9b5908007ed142f62fe73a
[email protected]:Mac OS Forge:faeee69acc2e49af3a0dbb15bd593ef4
[email protected]:Mac OS Forge:b99aa7ad32306a654ca4d57839fde9c1
[email protected]:Mac OS Forge:::
-""")
-
-
-if __name__ == '__main__':
-    unittest.main()

Copied: trunk/Tools/CISupport/build-webkit-org/committer_auth_unittest_old.py (from rev 270258, trunk/Tools/CISupport/build-webkit-org/committer_auth_unittest.py) (0 => 270262)


--- trunk/Tools/CISupport/build-webkit-org/committer_auth_unittest_old.py	                        (rev 0)
+++ trunk/Tools/CISupport/build-webkit-org/committer_auth_unittest_old.py	2020-11-30 21:45:39 UTC (rev 270262)
@@ -0,0 +1,220 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2011 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 StringIO
+import __builtin__
+import buildbot.status.web.auth
+import contextlib
+import os
+import unittest
+
+from committer_auth import CommitterAuth
+
+
+# This subclass of StringIO supports the context manager protocol so it works
+# with "with" statements, just like real files.
+class CMStringIO(StringIO.StringIO):
+    def __enter__(self):
+        return self
+
+    def __exit__(self, exception, value, traceback):
+        self.close()
+
+
[email protected]
+def open_override(func):
+    original_open = __builtin__.open
+    __builtin__.open = func
+    yield
+    __builtin__.open = original_open
+
+
+class CommitterAuthTest(unittest.TestCase):
+    def setUp(self):
+        self.auth = CommitterAuth('path/to/auth.json')
+        self.auth.open_auth_json_file = self.fake_auth_json_file
+        self.auth.open_webkit_committers_file = self.fake_committers_file
+        self.auth.open_trac_credentials_file = self.fake_htdigest_file
+
+    def fake_open_function(self, expected_filename):
+        def fake_open(name, mode='r'):
+            self.fake_open_was_called = True
+            self.assertEqual(expected_filename, name)
+        return fake_open
+
+    def test_authentication_success(self):
+        self.assertTrue(self.auth.authenticate('[email protected]', 'committerpassword'))
+        self.assertEqual('', self.auth.errmsg())
+        self.assertTrue(self.auth.authenticate('[email protected]', 'committer2password'))
+        self.assertEqual('', self.auth.errmsg())
+
+    def test_committer_without_trac_credentials_fails(self):
+        self.assertFalse(self.auth.authenticate('[email protected]', 'committer3password'))
+        self.assertEqual('Invalid username/password', self.auth.errmsg())
+
+    def test_fail_to_open_auth_json_file(self):
+        def raise_IOError():
+            raise IOError(2, 'No such file or directory', 'path/to/auth.json')
+        auth = CommitterAuth('path/to/auth.json')
+        auth.open_auth_json_file = raise_IOError
+        self.assertFalse(auth.authenticate('[email protected]', 'committerpassword'))
+        self.assertEqual('Error opening auth.json file: No such file or directory', auth.errmsg())
+
+    def test_fail_to_open_trac_credentials_file(self):
+        def raise_IOError():
+            raise IOError(2, 'No such file or directory', 'path/to/trac/credentials')
+        self.auth.open_trac_credentials_file = raise_IOError
+        self.assertFalse(self.auth.authenticate('[email protected]', 'committerpassword'))
+        self.assertEqual('Error opening Trac credentials file: No such file or directory', self.auth.errmsg())
+
+    def test_fail_to_open_webkit_committers_file(self):
+        def raise_IOError():
+            raise IOError(2, 'No such file or directory', 'path/to/webkit/committers')
+        self.auth.open_webkit_committers_file = raise_IOError
+        self.assertFalse(self.auth.authenticate('[email protected]', 'committerpassword'))
+        self.assertEqual('Error opening WebKit committers file: No such file or directory', self.auth.errmsg())
+
+    def test_implements_IAuth(self):
+        self.assertTrue(buildbot.status.web.auth.IAuth.implementedBy(CommitterAuth))
+
+    def test_invalid_auth_json_file(self):
+        auth = CommitterAuth('path/to/auth.json')
+        auth.open_auth_json_file = self.invalid_auth_json_file
+        self.assertFalse(auth.authenticate('[email protected]', 'committerpassword'))
+        self.assertEqual('Error parsing auth.json file: No JSON object could be decoded', auth.errmsg())
+
+    def test_invalid_committers_file(self):
+        self.auth.open_webkit_committers_file = self.invalid_committers_file
+        self.assertFalse(self.auth.authenticate('[email protected]', 'committerpassword'))
+        self.assertEqual('Error parsing WebKit committers file', self.auth.errmsg())
+
+    def test_invalid_trac_credentials_file(self):
+        self.auth.open_trac_credentials_file = self.invalid_htdigest_file
+        self.assertFalse(self.auth.authenticate('[email protected]', 'committerpassword'))
+        self.assertEqual('Error parsing Trac credentials file', self.auth.errmsg())
+
+    def test_missing_auth_json_keys(self):
+        auth = CommitterAuth('path/to/auth.json')
+        auth.open_auth_json_file = lambda: CMStringIO('{ "trac_credentials": "path/to/trac/credentials" }')
+        self.assertFalse(auth.authenticate('[email protected]', 'committerpassword'))
+        self.assertEqual('auth.json file is missing "webkit_committers" key', auth.errmsg())
+
+        auth.open_auth_json_file = lambda: CMStringIO('{ "webkit_committers": "path/to/webkit/committers" }')
+        auth.open_webkit_committers_file = self.fake_committers_file
+        self.assertFalse(auth.authenticate('[email protected]', 'committerpassword'))
+        self.assertEqual('auth.json file is missing "trac_credentials" key', auth.errmsg())
+
+    def test_open_auth_json_file(self):
+        auth = CommitterAuth('path/to/auth.json')
+        self.fake_open_was_called = False
+        with open_override(self.fake_open_function(auth.auth_json_filename())):
+            auth.open_auth_json_file()
+        self.assertTrue(self.fake_open_was_called)
+
+    def test_open_trac_credentials_file(self):
+        auth = CommitterAuth('path/to/auth.json')
+        auth.trac_credentials_filename = lambda: 'trac credentials filename'
+        self.fake_open_was_called = False
+        with open_override(self.fake_open_function(auth.trac_credentials_filename())):
+            auth.open_trac_credentials_file()
+        self.assertTrue(self.fake_open_was_called)
+
+    def test_open_webkit_committers_file(self):
+        auth = CommitterAuth('path/to/auth.json')
+        auth.webkit_committers_filename = lambda: 'webkit committers filename'
+        self.fake_open_was_called = False
+        with open_override(self.fake_open_function(auth.webkit_committers_filename())):
+            auth.open_webkit_committers_file()
+        self.assertTrue(self.fake_open_was_called)
+
+    def test_non_committer_fails(self):
+        self.assertFalse(self.auth.authenticate('[email protected]', 'noncommitterpassword'))
+        self.assertEqual('Invalid username/password', self.auth.errmsg())
+
+    def test_trac_credentials_filename(self):
+        self.assertEqual('path/to/trac/credentials', self.auth.trac_credentials_filename())
+
+    def test_unknown_user_fails(self):
+        self.assertFalse(self.auth.authenticate('[email protected]', 'nobodypassword'))
+        self.assertEqual('Invalid username/password', self.auth.errmsg())
+
+    def test_username_is_prefix_of_valid_user(self):
+        self.assertFalse(self.auth.authenticate('[email protected]', 'committerpassword'))
+        self.assertEqual('Invalid username/password', self.auth.errmsg())
+
+    def test_webkit_committers(self):
+        self.assertEqual(['[email protected]', '[email protected]', '[email protected]'], self.auth.webkit_committers())
+
+    def test_webkit_committers_filename(self):
+        self.assertEqual('path/to/webkit/committers', self.auth.webkit_committers_filename())
+
+    def test_wrong_password_fails(self):
+        self.assertFalse(self.auth.authenticate('[email protected]', 'wrongpassword'))
+        self.assertEqual('Invalid username/password', self.auth.errmsg())
+
+    def fake_auth_json_file(self):
+        return CMStringIO("""{
+    "trac_credentials": "path/to/trac/credentials",
+    "webkit_committers": "path/to/webkit/committers"
+}""")
+
+    def invalid_auth_json_file(self):
+        return CMStringIO('~!@#$%^&*()_+')
+
+    def fake_committers_file(self):
+        return CMStringIO("""[groups]
+group1 = [email protected],[email protected]
+group2 = [email protected]
+
+group3 =
+group4 =
+
+webkit = [email protected],[email protected],[email protected]
+
+[service:/]
+*    = r
+""")
+
+    def invalid_committers_file(self):
+        return CMStringIO("""[groups]
+
+[[groups2]
+""")
+
+    def fake_htdigest_file(self):
+        return CMStringIO("""[email protected]:Mac OS Forge:761c8dcb7d9b5908007ed142f62fe73a
[email protected]:Mac OS Forge:faeee69acc2e49af3a0dbb15bd593ef4
[email protected]:Mac OS Forge:b99aa7ad32306a654ca4d57839fde9c1
+""")
+
+    def invalid_htdigest_file(self):
+        return CMStringIO("""[email protected]:Mac OS Forge:761c8dcb7d9b5908007ed142f62fe73a
[email protected]:Mac OS Forge:faeee69acc2e49af3a0dbb15bd593ef4
[email protected]:Mac OS Forge:b99aa7ad32306a654ca4d57839fde9c1
[email protected]:Mac OS Forge:::
+""")
+
+
+if __name__ == '__main__':
+    unittest.main()

Deleted: trunk/Tools/CISupport/build-webkit-org/steps_unittest.py (270261 => 270262)


--- trunk/Tools/CISupport/build-webkit-org/steps_unittest.py	2020-11-30 21:42:48 UTC (rev 270261)
+++ trunk/Tools/CISupport/build-webkit-org/steps_unittest.py	2020-11-30 21:45:39 UTC (rev 270262)
@@ -1,696 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (C) 2011-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 sys
-import os
-import unittest
-import json
-
-# Show DepricationWarnings come from buildbot - it isn't default with Python 2.7 or newer.
-# See https://bugs.webkit.org/show_bug.cgi?id=90161 for details.
-import warnings
-warnings.simplefilter('default')
-
-
-class BuildBotConfigLoader(object):
-    def _add_webkitpy_to_sys_path(self):
-        # When files are passed to the python interpreter on the command line (e.g. python test.py) __file__ is a relative path.
-        absolute_file_path = os.path.abspath(__file__)
-        webkit_org_config_dir = os.path.dirname(absolute_file_path)
-        worker_support_dir = os.path.dirname(webkit_org_config_dir)
-        webkit_tools_dir = os.path.dirname(worker_support_dir)
-        scripts_dir = os.path.join(webkit_tools_dir, 'Scripts')
-        sys.path.append(scripts_dir)
-
-    def _add_dependent_modules_to_sys_modules(self):
-        self._add_webkitpy_to_sys_path()
-        from webkitpy.autoinstalled import buildbot
-        sys.modules['buildbot'] = buildbot
-
-
-class RunWebKitTestsTest(unittest.TestCase):
-    def test_nrwt_leaks_parsing(self):
-        run_webkit_tests = RunWebKitTests()  # pylint is confused by the way we import the module ... pylint: disable-msg=E0602
-        log_text = """
-12:44:24.295 77706 13981 total leaks found for a total of 197,936 bytes.
-12:44:24.295 77706 1 unique leaks found.
-"""
-        expected_incorrect_lines = [
-            '13981 total leaks found for a total of 197,936 bytes.',
-            '1 unique leaks found.',
-        ]
-        run_webkit_tests._parseRunWebKitTestsOutput(log_text)
-        self.assertEqual(run_webkit_tests.incorrectLayoutLines, expected_incorrect_lines)
-
-    def test_nrwt_missing_results(self):
-        run_webkit_tests = RunWebKitTests()  # pylint is confused by the way we import the module ... pylint: disable-msg=E0602
-        log_text = """
-Expected to fail, but passed: (2)
-  animations/additive-transform-animations.html
-  animations/cross-fade-webkit-mask-box-image.html
-
-Unexpected flakiness: text-only failures (2)
-  fast/events/touch/touch-inside-iframe.html [ Failure Pass ]
-  http/tests/inspector-enabled/console-clear-arguments-on-frame-navigation.html [ Failure Pass ]
-
-Unexpected flakiness: timeouts (1)
-  svg/text/foreignObject-repaint.xml [ Timeout Pass ]
-
-Regressions: Unexpected missing results (1)
-  svg/custom/zero-path-square-cap-rendering2.svg [ Missing ]
-
-Regressions: Unexpected text-only failures (1)
-  svg/custom/zero-path-square-cap-rendering2.svg [ Failure ]
-"""
-        run_webkit_tests._parseRunWebKitTestsOutput(log_text)
-        self.assertEqual(set(run_webkit_tests.incorrectLayoutLines),
-            set(['2 new passes', '3 flakes', '1 missing results', '1 failures']))
-
-
-class StubStdio(object):
-    def __init__(self, stdio):
-        self._stdio = stdio
-
-    def getText(self):
-        return self._stdio
-
-
-class StubRemoteCommand(object):
-    def __init__(self, rc, stdio):
-        self.rc = rc
-        self.logs = {'stdio': StubStdio(stdio)}
-
-
-class RunJavaScriptCoreTestsTest(unittest.TestCase):
-    def assertResults(self, expected_result, expected_text, rc, stdio):
-        cmd = StubRemoteCommand(rc, stdio)
-        step = RunJavaScriptCoreTests()
-        step.commandComplete(cmd)
-        actual_results = step.evaluateCommand(cmd)
-        actual_text = step.getText2(cmd, actual_results)
-
-        self.assertEqual(expected_result, actual_results)
-        self.assertEqual(actual_text, expected_text)
-
-    def test_no_regressions_old_output(self):
-        self.assertResults(SUCCESS, ["jscore-test"], 0, """Results for Mozilla tests:
-    0 regressions found.
-    0 tests fixed.
-    OK.""")
-
-    def test_no_failure_new_output(self):
-        self.assertResults(SUCCESS, ["jscore-test"], 0, """Results for JSC stress tests:
-    0 failures found.
-    OK.""")
-
-    def test_mozilla_failure_old_output(self):
-        self.assertResults(FAILURE, ["1 JSC test failed"], 1, """Results for Mozilla tests:
-    1 regression found.
-    0 tests fixed.""")
-
-    def test_mozilla_failures_old_output(self):
-        self.assertResults(FAILURE, ["2 JSC tests failed"], 1, """Results for Mozilla tests:
-    2 regressions found.
-    0 tests fixed.""")
-
-    def test_jsc_stress_failure_new_output(self):
-        self.assertResults(FAILURE, ["1 JSC test failed"], 1,  """Results for JSC stress tests:
-    1 failure found.""")
-
-    def test_jsc_stress_failures_new_output(self):
-        self.assertResults(FAILURE, ["5 JSC tests failed"], 1,  """Results for JSC stress tests:
-    5 failures found.""")
-
-    def test_jsc_stress_failures_with_binary_results_output(self):
-        self.assertResults(FAILURE, ["8 JSC tests failed"], 1,  """Results for JSC stress tests:
-    5 failures found.
-Results for JSC test binaries:
-    3 failures found.""")
-
-    def test_jsc_stress_failures_with_binary_result_output(self):
-        self.assertResults(FAILURE, ["6 JSC tests failed"], 1,  """Results for JSC stress tests:
-    5 failures found.
-Results for JSC test binaries:
-    1 failure found.""")
-
-
-class RunTest262TestsTest(unittest.TestCase):
-    def assertResults(self, expected_result, expected_text, rc, stdio):
-        cmd = StubRemoteCommand(rc, stdio)
-        step = RunTest262Tests()
-        step.commandComplete(cmd)
-        actual_results = step.evaluateCommand(cmd)
-        actual_text = step.getText2(cmd, actual_results)
-
-        self.assertEqual(expected_result, actual_results)
-        self.assertEqual(actual_text, expected_text)
-
-    def test_no_regressions_output(self):
-        self.assertResults(SUCCESS, ["test262-test"], 0, """
--------------------------Settings------------------------
-Test262 Dir: JSTests/test262
-JSC: WebKitBuild/Release/jsc
-DYLD_FRAMEWORK_PATH: WebKitBuild/Release
-Child Processes: 32
-Config file: Tools/Scripts/test262/config.yaml
-Expectations file: Tools/Scripts/test262/expectations.yaml
---------------------------------------------------------
-
-NEW PASS: test/annexB/built-ins/Date/prototype/getYear/length.js (default)
-NEW PASS test/language/expressions/class/fields-after-same-line-static-method-computed-symbol-names.js (default)
-
-Run with --save to save a new expectations file
-Saved all the results in Tools/Scripts/test262/results.yaml
-Summarizing results...
-See summarized results in Tools/Scripts/test262/results-summary.txt
-
-56071 tests ran
-0 expected tests failed
-0 tests newly fail
-2546 tests newly pass
-1241 test files skipped
-Done in 247 seconds!
-""")
-
-    def test_failure_output(self):
-        self.assertResults(FAILURE, ["1 Test262 test failed"], 0, """
--------------------------Settings------------------------
-Test262 Dir: JSTests/test262
-JSC: WebKitBuild/Release/jsc
-DYLD_FRAMEWORK_PATH: WebKitBuild/Release
-Child Processes: 32
-Config file: Tools/Scripts/test262/config.yaml
-Expectations file: Tools/Scripts/test262/expectations.yaml
---------------------------------------------------------
-
-! NEW FAIL: test/annexB/built-ins/Date/prototype/getYear/length.js (default)
-NEW PASS test/language/expressions/class/fields-after-same-line-static-method-computed-symbol-names.js (default)
-
-Run with --save to save a new expectations file
-Saved all the results in Tools/Scripts/test262/results.yaml
-Summarizing results...
-See summarized results in Tools/Scripts/test262/results-summary.txt
-
-56071 tests ran
-0 expected tests failed
-0 tests newly fail
-2546 tests newly pass
-1241 test files skipped
-Done in 247 seconds!
-""")
-
-    def test_failures_output(self):
-        self.assertResults(FAILURE, ["2 Test262 tests failed"], 0, """
--------------------------Settings------------------------
-Test262 Dir: JSTests/test262
-JSC: WebKitBuild/Release/jsc
-DYLD_FRAMEWORK_PATH: WebKitBuild/Release
-Child Processes: 32
-Config file: Tools/Scripts/test262/config.yaml
-Expectations file: Tools/Scripts/test262/expectations.yaml
---------------------------------------------------------
-
-NEW PASS test/language/statements/class/fields-after-same-line-static-async-gen-computed-names.js (default)
-! NEW FAIL: test/annexB/built-ins/Date/prototype/getYear/length.js (default)
-! NEW FAIL: test/annexB/built-ins/Date/prototype/getYear/length.js (strict mode)
-NEW PASS test/language/expressions/class/fields-after-same-line-static-method-computed-symbol-names.js (default)
-
-Run with --save to save a new expectations file
-Saved all the results in Tools/Scripts/test262/results.yaml
-Summarizing results...
-See summarized results in Tools/Scripts/test262/results-summary.txt
-
-56071 tests ran
-0 expected tests failed
-0 tests newly fail
-2546 tests newly pass
-1241 test files skipped
-Done in 247 seconds!
-""")
-
-
-class RunLLINTCLoopTestsTest(unittest.TestCase):
-    def assertResults(self, expected_result, expected_text, rc, stdio):
-        cmd = StubRemoteCommand(rc, stdio)
-        step = RunLLINTCLoopTests()
-        step.commandComplete(cmd)
-        actual_results = step.evaluateCommand(cmd)
-        actual_text = step.getText2(cmd, actual_results)
-
-        self.assertEqual(expected_result, actual_results)
-        self.assertEqual(actual_text, expected_text)
-
-    def test_failures(self):
-        self.assertResults(FAILURE, ['5 regressions found.'], 1,  '    5 regressions found.')
-
-    def test_failure(self):
-        self.assertResults(FAILURE, ['1 regression found.'], 1,  '    1 regression found.')
-
-    def test_no_failure(self):
-        self.assertResults(SUCCESS, ['webkit-jsc-cloop-test'], 0,  '    0 regressions found.')
-
-
-class Run32bitJSCTestsTest(unittest.TestCase):
-    def assertResults(self, expected_result, expected_text, rc, stdio):
-        cmd = StubRemoteCommand(rc, stdio)
-        step = Run32bitJSCTests()
-        step.commandComplete(cmd)
-        actual_results = step.evaluateCommand(cmd)
-        actual_text = step.getText2(cmd, actual_results)
-
-        self.assertEqual(expected_result, actual_results)
-        self.assertEqual(actual_text, expected_text)
-
-    def test_failures(self):
-        self.assertResults(FAILURE, ['5 regressions found.'], 1,  '    5 failures found.')
-
-    def test_failure(self):
-        self.assertResults(FAILURE, ['1 regression found.'], 1,  '    1 failure found.')
-
-    def test_no_failure(self):
-        self.assertResults(SUCCESS, ['webkit-32bit-jsc-test'], 0,  '    0 failures found.')
-
-
-class RunAPITestsTest(unittest.TestCase):
-    def assertFailures(self, expected_failure_count, stdio):
-        if expected_failure_count:
-            rc = 1
-            expected_results = FAILURE
-            plural_suffix = "" if expected_failure_count == 1 else "s"
-            expected_text = '%d api test%s failed or timed out' % (expected_failure_count, plural_suffix)
-        else:
-            rc = 0
-            expected_results = SUCCESS
-            expected_text = 'run-api-tests'
-
-        cmd = StubRemoteCommand(rc, stdio)
-        step = RunAPITests()
-        step.commandComplete(cmd)
-        actual_results = step.evaluateCommand(cmd)
-        actual_failure_count = step.failedTestCount
-        actual_text = step.getText(cmd, actual_results)[0]
-
-        self.assertEqual(expected_results, actual_results)
-        self.assertEqual(expected_failure_count, actual_failure_count)
-        self.assertEqual(expected_text, actual_text)
-
-    def test_no_failures_or_timeouts(self):
-        self.assertFailures(0, """...
-worker/0 TestWTF.WTF_Variant.OperatorAmpersand Passed
-worker/0 TestWTF.WTF_Variant.Ref Passed
-worker/0 TestWTF.WTF_Variant.RefPtr Passed
-worker/0 TestWTF.WTF_Variant.RetainPtr Passed
-worker/0 TestWTF.WTF_Variant.VisitorUsingMakeVisitor Passed
-worker/0 TestWTF.WTF_Variant.VisitorUsingSwitchOn Passed
-worker/0 exiting
-Ran 1888 tests of 1888 with 1888 successful
-------------------------------
-All tests successfully passed!
-""")
-
-    def test_no_failures_or_timeouts_with_disabled(self):
-        self.assertFailures(0, """...
-worker/0 TestWTF.WTF_Variant.OperatorAmpersand Passed
-worker/0 TestWTF.WTF_Variant.Ref Passed
-worker/0 TestWTF.WTF_Variant.RefPtr Passed
-worker/0 TestWTF.WTF_Variant.RetainPtr Passed
-worker/0 TestWTF.WTF_Variant.VisitorUsingMakeVisitor Passed
-worker/0 TestWTF.WTF_Variant.VisitorUsingSwitchOn Passed
-worker/0 exiting
-Ran 1881 tests of 1888 with 1881 successful
-------------------------------
-All tests successfully passed!
-""")
-
-    def test_one_failure(self):
-        self.assertFailures(1, """...
-worker/0 TestWTF.WTF_Variant.OperatorAmpersand Passed
-worker/0 TestWTF.WTF_Variant.Ref Passed
-worker/0 TestWTF.WTF_Variant.RefPtr Passed
-worker/0 TestWTF.WTF_Variant.RetainPtr Passed
-worker/0 TestWTF.WTF_Variant.VisitorUsingMakeVisitor Passed
-worker/0 TestWTF.WTF_Variant.VisitorUsingSwitchOn Passed
-worker/0 exiting
-Ran 1888 tests of 1888 with 1887 successful
-------------------------------
-Test suite failed
-
-Crashed
-
-    TestWTF.WTF.StringConcatenate_Unsigned
-        **FAIL** WTF.StringConcatenate_Unsigned
-
-        C:\\cygwin\\home\\buildbot\\worker\\win-release\\build\\Tools\\TestWebKitAPI\\Tests\\WTF\\StringConcatenate.cpp:84
-        Value of: makeString("hello ", static_cast<unsigned short>(42) , " world")
-          Actual: hello 42 world
-        Expected: "hello * world"
-        Which is: 74B00C9C
-
-Testing completed, Exit status: 3
-""")
-
-    def test_multiple_failures(self):
-        self.assertFailures(2, """...
-worker/0 TestWTF.WTF_Variant.OperatorAmpersand Passed
-worker/0 TestWTF.WTF_Variant.Ref Passed
-worker/0 TestWTF.WTF_Variant.RefPtr Passed
-worker/0 TestWTF.WTF_Variant.RetainPtr Passed
-worker/0 TestWTF.WTF_Variant.VisitorUsingMakeVisitor Passed
-worker/0 TestWTF.WTF_Variant.VisitorUsingSwitchOn Passed
-worker/0 exiting
-Ran 1888 tests of 1888 with 1886 successful
-------------------------------
-Test suite failed
-
-Crashed
-
-    TestWTF.WTF.StringConcatenate_Unsigned
-        **FAIL** WTF.StringConcatenate_Unsigned
-
-        C:\\cygwin\\home\\buildbot\\worker\\win-release\\build\\Tools\\TestWebKitAPI\\Tests\\WTF\\StringConcatenate.cpp:84
-        Value of: makeString("hello ", static_cast<unsigned short>(42) , " world")
-          Actual: hello 42 world
-        Expected: "hello * world"
-        Which is: 74B00C9C
-
-    TestWTF.WTF_Expected.Unexpected
-        **FAIL** WTF_Expected.Unexpected
-
-        C:\\cygwin\\home\\buildbot\\worker\\win-release\\build\\Tools\\TestWebKitAPI\\Tests\\WTF\\Expected.cpp:96
-        Value of: s1
-          Actual: oops
-        Expected: s0
-        Which is: oops
-
-Testing completed, Exit status: 3
-""")
-
-    def test_one_timeout(self):
-        self.assertFailures(1, """...
-worker/0 TestWTF.WTF_Variant.OperatorAmpersand Passed
-worker/0 TestWTF.WTF_Variant.Ref Passed
-worker/0 TestWTF.WTF_Variant.RefPtr Passed
-worker/0 TestWTF.WTF_Variant.RetainPtr Passed
-worker/0 TestWTF.WTF_Variant.VisitorUsingMakeVisitor Passed
-worker/0 TestWTF.WTF_Variant.VisitorUsingSwitchOn Passed
-worker/0 exiting
-Ran 1888 tests of 1888 with 1887 successful
-------------------------------
-Test suite failed
-
-Timeout
-
-     TestWTF.WTF_PoisonedUniquePtrForTriviallyDestructibleArrays.Assignment
-
-Testing completed, Exit status: 3
-""")
-
-    def test_multiple_timeouts(self):
-        self.assertFailures(2, """...
-worker/0 TestWTF.WTF_Variant.OperatorAmpersand Passed
-worker/0 TestWTF.WTF_Variant.Ref Passed
-worker/0 TestWTF.WTF_Variant.RefPtr Passed
-worker/0 TestWTF.WTF_Variant.RetainPtr Passed
-worker/0 TestWTF.WTF_Variant.VisitorUsingMakeVisitor Passed
-worker/0 TestWTF.WTF_Variant.VisitorUsingSwitchOn Passed
-worker/0 exiting
-Ran 1888 tests of 1888 with 1886 successful
-------------------------------
-Test suite failed
-
-Timeout
-
-    TestWTF.WTF_PoisonedUniquePtrForTriviallyDestructibleArrays.Assignment
-    TestWTF.WTF_Lock.ContendedShortSection
-
-Testing completed, Exit status: 3
-""")
-
-    def test_multiple_failures_and_timeouts(self):
-        self.assertFailures(4, """...
-worker/0 TestWTF.WTF_Variant.OperatorAmpersand Passed
-worker/0 TestWTF.WTF_Variant.Ref Passed
-worker/0 TestWTF.WTF_Variant.RefPtr Passed
-worker/0 TestWTF.WTF_Variant.RetainPtr Passed
-worker/0 TestWTF.WTF_Variant.VisitorUsingMakeVisitor Passed
-worker/0 TestWTF.WTF_Variant.VisitorUsingSwitchOn Passed
-worker/0 exiting
-Ran 1888 tests of 1888 with 1884 successful
-------------------------------
-Test suite failed
-
-Crashed
-
-    TestWTF.WTF.StringConcatenate_Unsigned
-        **FAIL** WTF.StringConcatenate_Unsigned
-
-        C:\\cygwin\\home\\buildbot\\worker\\win-release\\build\\Tools\\TestWebKitAPI\\Tests\\WTF\\StringConcatenate.cpp:84
-        Value of: makeString("hello ", static_cast<unsigned short>(42) , " world")
-          Actual: hello 42 world
-        Expected: "hello * world"
-        Which is: 74B00C9C
-
-    TestWTF.WTF_Expected.Unexpected
-        **FAIL** WTF_Expected.Unexpected
-
-        C:\\cygwin\\home\\buildbot\\worker\\win-release\\build\\Tools\\TestWebKitAPI\\Tests\\WTF\\Expected.cpp:96
-        Value of: s1
-          Actual: oops
-        Expected: s0
-        Which is: oops
-
-Timeout
-
-    TestWTF.WTF_PoisonedUniquePtrForTriviallyDestructibleArrays.Assignment
-    TestWTF.WTF_Lock.ContendedShortSection
-
-Testing completed, Exit status: 3
-""")
-
-
-class BuildStepsConstructorTest(unittest.TestCase):
-    # "Passing a BuildStep subclass to factory.addStep is deprecated. Please pass a BuildStep instance instead.  Support will be dropped in v0.8.7."
-    # It checks if all builder's all buildsteps can be insantiated after migration.
-    # https://bugs.webkit.org/show_bug.cgi?id=89001
-    # http://buildbot.net/buildbot/docs/0.8.6p1/manual/customization.html#writing-buildstep-constructors
-
-    @staticmethod
-    def generateTests():
-        for builderNumber, builder in enumerate(c['builders']):
-            for stepNumber, step in enumerate(builder['factory'].steps):
-                builderName = builder['name'].encode('ascii', 'ignore')
-                setattr(BuildStepsConstructorTest, 'test_builder%02d_step%02d' % (builderNumber, stepNumber), BuildStepsConstructorTest.createTest(builderName, step))
-
-    @staticmethod
-    def createTest(builderName, step):
-        def doTest(self):
-            try:
-                buildStepFactory, kwargs = step
-                buildStepFactory(**kwargs)
-            except TypeError as e:
-                buildStepName = str(buildStepFactory).split('.')[-1]
-                self.fail("Error during instantiation %s buildstep for %s builder: %s\n" % (buildStepName, builderName, e))
-        return doTest
-
-
-expected_build_steps = {
-    'Apple-Win-10-Debug-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile', 'download-built-product', 'extract-built-product', 'jscore-test', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'archive-test-results', 'upload', 'extract-test-results'],
-    'Apple-Win-10-Release-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile', 'download-built-product', 'extract-built-product', 'jscore-test', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'archive-test-results', 'upload', 'extract-test-results'],
-    'Apple-Win-10-Debug-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile', 'compile-webkit', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
-    'Apple-Win-10-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile', 'compile-webkit', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
-
-    'Apple-BigSur-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
-    'Apple-BigSur-Debug-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
-    'Apple-BigSur-Debug-WK1-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
-    'Apple-BigSur-Debug-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
-    'Apple-BigSur-Release-WK1-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
-    'Apple-BigSur-Release-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
-
-    'Apple-Catalina-Debug-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
-    'Apple-Catalina-Debug-JSC-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'jscore-test'],
-    'Apple-Catalina-Debug-Test262-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'test262-test'],
-    'Apple-Catalina-Debug-WK1-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
-    'Apple-Catalina-Debug-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
-    'Apple-Catalina-Debug-WK2-GPUProcess-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
-    'Apple-Catalina-LLINT-CLoop-BuildAndTest': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'webkit-jsc-cloop-test'],
-    'Apple-Catalina-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
-    'Apple-Catalina-Release-JSC-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'jscore-test'],
-    'Apple-Catalina-Release-Test262-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'test262-test'],
-    'Apple-Catalina-Release-WK1-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
-    'Apple-Catalina-Release-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
-    'Apple-Catalina-Release-WK2-Perf': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'perf-test'],
-    'Apple-Catalina-Release-WK2-WebGL-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
-
-    'Apple-Mojave-Debug-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
-    'Apple-Mojave-Debug-WK1-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
-    'Apple-Mojave-Debug-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
-    'Apple-Mojave-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
-    'Apple-Mojave-Release-WK1-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
-    'Apple-Mojave-Release-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
-    'Apple-Mojave-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
-
-    'Apple-iOS-14-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit'],
-    'Apple-iOS-14-Simulator-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
-    'Apple-iOS-14-Simulator-Release-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
-
-    'Apple-iOS-14-Simulator-Debug-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
-    'Apple-iOS-14-Simulator-Debug-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
-
-    'Apple-iPadOS-14-Simulator-Release-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
-    'Apple-iPadOS-14-Simulator-Debug-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
-
-    'Apple-tvOS-14-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit'],
-    'Apple-tvOS-Simulator-14-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit'],
-
-    'Apple-watchOS-7-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit'],
-    'Apple-watchOS-Simulator-7-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit'],
-
-    'JSCOnly-Linux-ARMv7-Thumb2-Release': ['configure-build', 'svn', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'jscore-test'],
-    'JSCOnly-Linux-ARMv7-Thumb2-SoftFP-Release': ['configure-build', 'svn', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'jscore-test'],
-    'JSCOnly-Linux-AArch64-Release': ['configure-build', 'svn', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'jscore-test'],
-    'JSCOnly-Linux-MIPS32el-Release': ['configure-build', 'svn', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'jscore-test'],
-
-    'GTK-Linux-64-bit-Debug-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'compile-webkit', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
-    'GTK-Linux-64-bit-Debug-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'layout-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'extract-test-results', 'API-tests'],
-    'GTK-Linux-64-bit-Debug-WebDriver-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'webdriver-test'],
-    'GTK-Linux-64-bit-Debug-JS-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'jscore-test', 'test262-test'],
-    'GTK-Linux-64-bit-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'compile-webkit', 'generate-jsc-bundle', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
-    'GTK-Linux-64-bit-Release-Perf': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'perf-test', 'benchmark-test'],
-    'GTK-Linux-64-bit-Release-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'layout-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'extract-test-results', 'API-tests'],
-    'GTK-Linux-64-bit-Release-WebDriver-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'webdriver-test'],
-    'GTK-Linux-64-bit-Release-JS-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'jscore-test', 'test262-test'],
-    'GTK-Linux-64-bit-Release-Wayland-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'layout-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'extract-test-results', 'API-tests', 'webdriver-test'],
-    'GTK-Linux-64-bit-Release-Ubuntu-LTS-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit'],
-    'GTK-Linux-64-bit-Release-Debian-Stable-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit'],
-    'GTK-Linux-64-bit-Release-GTK4-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'compile-webkit', 'layout-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'extract-test-results', 'API-tests', 'webdriver-test'],
-
-    'PlayStation-Debug-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit'],
-    'PlayStation-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit'],
-
-    'WinCairo-64-bit-JSC-Debug-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'jscore-test'],
-    'WinCairo-64-bit-JSC-Release-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'jscore-test'],
-    'WinCairo-64-bit-WKL-Debug-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
-    'WinCairo-64-bit-WKL-Debug-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wincairo-requirements', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'archive-test-results', 'upload', 'extract-test-results'],
-    'WinCairo-64-bit-WKL-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
-    'WinCairo-64-bit-WKL-Release-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wincairo-requirements', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'archive-test-results', 'upload', 'extract-test-results'],
-
-    'WPE-Linux-64-bit-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'compile-webkit', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
-    'WPE-Linux-64-bit-Release-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'layout-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'extract-test-results', 'API-tests', 'webdriver-test'],
-    'WPE-Linux-64-bit-Release-JS-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'jscore-test', 'test262-test'],
-    'WPE-Linux-64-bit-Debug-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'compile-webkit', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
-    'WPE-Linux-64-bit-Debug-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'layout-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'extract-test-results', 'API-tests', 'webdriver-test'],
-    'WPE-Linux-64-bit-Debug-JS-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'jscore-test', 'test262-test'],
-    'GTK-Linux-64bit-Release-Packaging-Nightly-Ubuntu1804': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'compile-webkit', 'generate-minibrowser-bundle'],
-    'GTK-Linux-64bit-Release-Packaging-Nightly-Ubuntu2004': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'compile-webkit', 'generate-minibrowser-bundle'],
-    'WPE-Linux-64bit-Release-Packaging-Nightly-Ubuntu1804': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'compile-webkit', 'generate-minibrowser-bundle'],
-    'WPE-Linux-64bit-Release-Packaging-Nightly-Ubuntu2004': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'compile-webkit', 'generate-minibrowser-bundle'],
-}
-
-
-class BuildStepsTest(unittest.TestCase):
-    @staticmethod
-    def generateTests():
-        for builder in c['builders']:
-            builderName = builder['name'].encode('ascii', 'ignore')
-            setattr(BuildStepsTest, 'test_builder %s' % builderName, BuildStepsTest.createTest(builder))
-
-    @staticmethod
-    def createTest(builder):
-        def doTest(self):
-            buildSteps = []
-            for step in builder['factory'].steps:
-                buildSteps.append(step[0].name)
-            self.assertTrue(builder['name'] in expected_build_steps, "Missing expected result for builder: %s\n Actual result is %s" % (builder['name'], buildSteps))
-            self.assertListEqual(expected_build_steps[builder['name']], buildSteps)
-
-        return doTest
-
-    def test_unnecessary_expected_results(self):
-        builders = set()
-        for builder in c['builders']:
-            builders.add(builder['name'].encode('ascii', 'ignore'))
-
-        for builder in expected_build_steps:
-            self.assertTrue(builder in builders, "Builder %s doesn't exist, but has unnecessary expected results" % builder)
-
-
-class RunAndUploadPerfTestsTest(unittest.TestCase):
-    def assertResults(self, rc, expected_text):
-        cmd = StubRemoteCommand(rc, expected_text)
-        step = RunAndUploadPerfTests()
-        step.commandComplete(cmd)
-        actual_results = step.evaluateCommand(cmd)
-        actual_text = str(step.getText2(cmd, actual_results)[0])
-        self.assertEqual(expected_text, actual_text)
-
-    def test_success(self):
-        self.assertResults(0, "perf-test")
-
-    def test_tests_failed(self):
-        self.assertResults(5, "5 perf tests failed")
-
-    def test_build_bad_build(self):
-        self.assertResults(255, "build not up to date")
-
-    def test_build_bad_source_json(self):
-        self.assertResults(254, "worker config JSON error")
-
-    def test_build_bad_marge(self):
-        self.assertResults(253, "output JSON merge error")
-
-    def test_build_bad_failed_uploading(self):
-        self.assertResults(252, "upload error")
-
-    def test_build_bad_preparation(self):
-        self.assertResults(251, "system dependency error")
-
-    def test_buildbot_timeout(self):
-        self.assertResults(-1, "timeout")
-
-
-class RunBenchmarkTest(unittest.TestCase):
-    def assertResults(self, rc, expected_text):
-        cmd = StubRemoteCommand(rc, expected_text)
-        step = RunBenchmarkTests()
-        step.commandComplete(cmd)
-        actual_results = step.evaluateCommand(cmd)
-        actual_text = str(step.getText2(cmd, actual_results)[0])
-        self.assertEqual(expected_text, actual_text)
-
-    def test_success(self):
-        self.assertResults(0, "benchmark-test")
-
-    def test_tests_failed(self):
-        self.assertResults(7, "7 benchmark tests failed")
-
-
-# FIXME: We should run this file as part of test-webkitpy.
-if __name__ == '__main__':
-    BuildBotConfigLoader()._add_dependent_modules_to_sys_modules()
-    from loadConfig import *
-    c = {}
-    loadBuilderConfig(c, is_test_mode_enabled=True)
-    BuildStepsConstructorTest.generateTests()
-    BuildStepsTest.generateTests()
-    unittest.main()

Copied: trunk/Tools/CISupport/build-webkit-org/steps_unittest_old.py (from rev 270258, trunk/Tools/CISupport/build-webkit-org/steps_unittest.py) (0 => 270262)


--- trunk/Tools/CISupport/build-webkit-org/steps_unittest_old.py	                        (rev 0)
+++ trunk/Tools/CISupport/build-webkit-org/steps_unittest_old.py	2020-11-30 21:45:39 UTC (rev 270262)
@@ -0,0 +1,696 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2011-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 sys
+import os
+import unittest
+import json
+
+# Show DepricationWarnings come from buildbot - it isn't default with Python 2.7 or newer.
+# See https://bugs.webkit.org/show_bug.cgi?id=90161 for details.
+import warnings
+warnings.simplefilter('default')
+
+
+class BuildBotConfigLoader(object):
+    def _add_webkitpy_to_sys_path(self):
+        # When files are passed to the python interpreter on the command line (e.g. python test.py) __file__ is a relative path.
+        absolute_file_path = os.path.abspath(__file__)
+        webkit_org_config_dir = os.path.dirname(absolute_file_path)
+        worker_support_dir = os.path.dirname(webkit_org_config_dir)
+        webkit_tools_dir = os.path.dirname(worker_support_dir)
+        scripts_dir = os.path.join(webkit_tools_dir, 'Scripts')
+        sys.path.append(scripts_dir)
+
+    def _add_dependent_modules_to_sys_modules(self):
+        self._add_webkitpy_to_sys_path()
+        from webkitpy.autoinstalled import buildbot
+        sys.modules['buildbot'] = buildbot
+
+
+class RunWebKitTestsTest(unittest.TestCase):
+    def test_nrwt_leaks_parsing(self):
+        run_webkit_tests = RunWebKitTests()  # pylint is confused by the way we import the module ... pylint: disable-msg=E0602
+        log_text = """
+12:44:24.295 77706 13981 total leaks found for a total of 197,936 bytes.
+12:44:24.295 77706 1 unique leaks found.
+"""
+        expected_incorrect_lines = [
+            '13981 total leaks found for a total of 197,936 bytes.',
+            '1 unique leaks found.',
+        ]
+        run_webkit_tests._parseRunWebKitTestsOutput(log_text)
+        self.assertEqual(run_webkit_tests.incorrectLayoutLines, expected_incorrect_lines)
+
+    def test_nrwt_missing_results(self):
+        run_webkit_tests = RunWebKitTests()  # pylint is confused by the way we import the module ... pylint: disable-msg=E0602
+        log_text = """
+Expected to fail, but passed: (2)
+  animations/additive-transform-animations.html
+  animations/cross-fade-webkit-mask-box-image.html
+
+Unexpected flakiness: text-only failures (2)
+  fast/events/touch/touch-inside-iframe.html [ Failure Pass ]
+  http/tests/inspector-enabled/console-clear-arguments-on-frame-navigation.html [ Failure Pass ]
+
+Unexpected flakiness: timeouts (1)
+  svg/text/foreignObject-repaint.xml [ Timeout Pass ]
+
+Regressions: Unexpected missing results (1)
+  svg/custom/zero-path-square-cap-rendering2.svg [ Missing ]
+
+Regressions: Unexpected text-only failures (1)
+  svg/custom/zero-path-square-cap-rendering2.svg [ Failure ]
+"""
+        run_webkit_tests._parseRunWebKitTestsOutput(log_text)
+        self.assertEqual(set(run_webkit_tests.incorrectLayoutLines),
+            set(['2 new passes', '3 flakes', '1 missing results', '1 failures']))
+
+
+class StubStdio(object):
+    def __init__(self, stdio):
+        self._stdio = stdio
+
+    def getText(self):
+        return self._stdio
+
+
+class StubRemoteCommand(object):
+    def __init__(self, rc, stdio):
+        self.rc = rc
+        self.logs = {'stdio': StubStdio(stdio)}
+
+
+class RunJavaScriptCoreTestsTest(unittest.TestCase):
+    def assertResults(self, expected_result, expected_text, rc, stdio):
+        cmd = StubRemoteCommand(rc, stdio)
+        step = RunJavaScriptCoreTests()
+        step.commandComplete(cmd)
+        actual_results = step.evaluateCommand(cmd)
+        actual_text = step.getText2(cmd, actual_results)
+
+        self.assertEqual(expected_result, actual_results)
+        self.assertEqual(actual_text, expected_text)
+
+    def test_no_regressions_old_output(self):
+        self.assertResults(SUCCESS, ["jscore-test"], 0, """Results for Mozilla tests:
+    0 regressions found.
+    0 tests fixed.
+    OK.""")
+
+    def test_no_failure_new_output(self):
+        self.assertResults(SUCCESS, ["jscore-test"], 0, """Results for JSC stress tests:
+    0 failures found.
+    OK.""")
+
+    def test_mozilla_failure_old_output(self):
+        self.assertResults(FAILURE, ["1 JSC test failed"], 1, """Results for Mozilla tests:
+    1 regression found.
+    0 tests fixed.""")
+
+    def test_mozilla_failures_old_output(self):
+        self.assertResults(FAILURE, ["2 JSC tests failed"], 1, """Results for Mozilla tests:
+    2 regressions found.
+    0 tests fixed.""")
+
+    def test_jsc_stress_failure_new_output(self):
+        self.assertResults(FAILURE, ["1 JSC test failed"], 1,  """Results for JSC stress tests:
+    1 failure found.""")
+
+    def test_jsc_stress_failures_new_output(self):
+        self.assertResults(FAILURE, ["5 JSC tests failed"], 1,  """Results for JSC stress tests:
+    5 failures found.""")
+
+    def test_jsc_stress_failures_with_binary_results_output(self):
+        self.assertResults(FAILURE, ["8 JSC tests failed"], 1,  """Results for JSC stress tests:
+    5 failures found.
+Results for JSC test binaries:
+    3 failures found.""")
+
+    def test_jsc_stress_failures_with_binary_result_output(self):
+        self.assertResults(FAILURE, ["6 JSC tests failed"], 1,  """Results for JSC stress tests:
+    5 failures found.
+Results for JSC test binaries:
+    1 failure found.""")
+
+
+class RunTest262TestsTest(unittest.TestCase):
+    def assertResults(self, expected_result, expected_text, rc, stdio):
+        cmd = StubRemoteCommand(rc, stdio)
+        step = RunTest262Tests()
+        step.commandComplete(cmd)
+        actual_results = step.evaluateCommand(cmd)
+        actual_text = step.getText2(cmd, actual_results)
+
+        self.assertEqual(expected_result, actual_results)
+        self.assertEqual(actual_text, expected_text)
+
+    def test_no_regressions_output(self):
+        self.assertResults(SUCCESS, ["test262-test"], 0, """
+-------------------------Settings------------------------
+Test262 Dir: JSTests/test262
+JSC: WebKitBuild/Release/jsc
+DYLD_FRAMEWORK_PATH: WebKitBuild/Release
+Child Processes: 32
+Config file: Tools/Scripts/test262/config.yaml
+Expectations file: Tools/Scripts/test262/expectations.yaml
+--------------------------------------------------------
+
+NEW PASS: test/annexB/built-ins/Date/prototype/getYear/length.js (default)
+NEW PASS test/language/expressions/class/fields-after-same-line-static-method-computed-symbol-names.js (default)
+
+Run with --save to save a new expectations file
+Saved all the results in Tools/Scripts/test262/results.yaml
+Summarizing results...
+See summarized results in Tools/Scripts/test262/results-summary.txt
+
+56071 tests ran
+0 expected tests failed
+0 tests newly fail
+2546 tests newly pass
+1241 test files skipped
+Done in 247 seconds!
+""")
+
+    def test_failure_output(self):
+        self.assertResults(FAILURE, ["1 Test262 test failed"], 0, """
+-------------------------Settings------------------------
+Test262 Dir: JSTests/test262
+JSC: WebKitBuild/Release/jsc
+DYLD_FRAMEWORK_PATH: WebKitBuild/Release
+Child Processes: 32
+Config file: Tools/Scripts/test262/config.yaml
+Expectations file: Tools/Scripts/test262/expectations.yaml
+--------------------------------------------------------
+
+! NEW FAIL: test/annexB/built-ins/Date/prototype/getYear/length.js (default)
+NEW PASS test/language/expressions/class/fields-after-same-line-static-method-computed-symbol-names.js (default)
+
+Run with --save to save a new expectations file
+Saved all the results in Tools/Scripts/test262/results.yaml
+Summarizing results...
+See summarized results in Tools/Scripts/test262/results-summary.txt
+
+56071 tests ran
+0 expected tests failed
+0 tests newly fail
+2546 tests newly pass
+1241 test files skipped
+Done in 247 seconds!
+""")
+
+    def test_failures_output(self):
+        self.assertResults(FAILURE, ["2 Test262 tests failed"], 0, """
+-------------------------Settings------------------------
+Test262 Dir: JSTests/test262
+JSC: WebKitBuild/Release/jsc
+DYLD_FRAMEWORK_PATH: WebKitBuild/Release
+Child Processes: 32
+Config file: Tools/Scripts/test262/config.yaml
+Expectations file: Tools/Scripts/test262/expectations.yaml
+--------------------------------------------------------
+
+NEW PASS test/language/statements/class/fields-after-same-line-static-async-gen-computed-names.js (default)
+! NEW FAIL: test/annexB/built-ins/Date/prototype/getYear/length.js (default)
+! NEW FAIL: test/annexB/built-ins/Date/prototype/getYear/length.js (strict mode)
+NEW PASS test/language/expressions/class/fields-after-same-line-static-method-computed-symbol-names.js (default)
+
+Run with --save to save a new expectations file
+Saved all the results in Tools/Scripts/test262/results.yaml
+Summarizing results...
+See summarized results in Tools/Scripts/test262/results-summary.txt
+
+56071 tests ran
+0 expected tests failed
+0 tests newly fail
+2546 tests newly pass
+1241 test files skipped
+Done in 247 seconds!
+""")
+
+
+class RunLLINTCLoopTestsTest(unittest.TestCase):
+    def assertResults(self, expected_result, expected_text, rc, stdio):
+        cmd = StubRemoteCommand(rc, stdio)
+        step = RunLLINTCLoopTests()
+        step.commandComplete(cmd)
+        actual_results = step.evaluateCommand(cmd)
+        actual_text = step.getText2(cmd, actual_results)
+
+        self.assertEqual(expected_result, actual_results)
+        self.assertEqual(actual_text, expected_text)
+
+    def test_failures(self):
+        self.assertResults(FAILURE, ['5 regressions found.'], 1,  '    5 regressions found.')
+
+    def test_failure(self):
+        self.assertResults(FAILURE, ['1 regression found.'], 1,  '    1 regression found.')
+
+    def test_no_failure(self):
+        self.assertResults(SUCCESS, ['webkit-jsc-cloop-test'], 0,  '    0 regressions found.')
+
+
+class Run32bitJSCTestsTest(unittest.TestCase):
+    def assertResults(self, expected_result, expected_text, rc, stdio):
+        cmd = StubRemoteCommand(rc, stdio)
+        step = Run32bitJSCTests()
+        step.commandComplete(cmd)
+        actual_results = step.evaluateCommand(cmd)
+        actual_text = step.getText2(cmd, actual_results)
+
+        self.assertEqual(expected_result, actual_results)
+        self.assertEqual(actual_text, expected_text)
+
+    def test_failures(self):
+        self.assertResults(FAILURE, ['5 regressions found.'], 1,  '    5 failures found.')
+
+    def test_failure(self):
+        self.assertResults(FAILURE, ['1 regression found.'], 1,  '    1 failure found.')
+
+    def test_no_failure(self):
+        self.assertResults(SUCCESS, ['webkit-32bit-jsc-test'], 0,  '    0 failures found.')
+
+
+class RunAPITestsTest(unittest.TestCase):
+    def assertFailures(self, expected_failure_count, stdio):
+        if expected_failure_count:
+            rc = 1
+            expected_results = FAILURE
+            plural_suffix = "" if expected_failure_count == 1 else "s"
+            expected_text = '%d api test%s failed or timed out' % (expected_failure_count, plural_suffix)
+        else:
+            rc = 0
+            expected_results = SUCCESS
+            expected_text = 'run-api-tests'
+
+        cmd = StubRemoteCommand(rc, stdio)
+        step = RunAPITests()
+        step.commandComplete(cmd)
+        actual_results = step.evaluateCommand(cmd)
+        actual_failure_count = step.failedTestCount
+        actual_text = step.getText(cmd, actual_results)[0]
+
+        self.assertEqual(expected_results, actual_results)
+        self.assertEqual(expected_failure_count, actual_failure_count)
+        self.assertEqual(expected_text, actual_text)
+
+    def test_no_failures_or_timeouts(self):
+        self.assertFailures(0, """...
+worker/0 TestWTF.WTF_Variant.OperatorAmpersand Passed
+worker/0 TestWTF.WTF_Variant.Ref Passed
+worker/0 TestWTF.WTF_Variant.RefPtr Passed
+worker/0 TestWTF.WTF_Variant.RetainPtr Passed
+worker/0 TestWTF.WTF_Variant.VisitorUsingMakeVisitor Passed
+worker/0 TestWTF.WTF_Variant.VisitorUsingSwitchOn Passed
+worker/0 exiting
+Ran 1888 tests of 1888 with 1888 successful
+------------------------------
+All tests successfully passed!
+""")
+
+    def test_no_failures_or_timeouts_with_disabled(self):
+        self.assertFailures(0, """...
+worker/0 TestWTF.WTF_Variant.OperatorAmpersand Passed
+worker/0 TestWTF.WTF_Variant.Ref Passed
+worker/0 TestWTF.WTF_Variant.RefPtr Passed
+worker/0 TestWTF.WTF_Variant.RetainPtr Passed
+worker/0 TestWTF.WTF_Variant.VisitorUsingMakeVisitor Passed
+worker/0 TestWTF.WTF_Variant.VisitorUsingSwitchOn Passed
+worker/0 exiting
+Ran 1881 tests of 1888 with 1881 successful
+------------------------------
+All tests successfully passed!
+""")
+
+    def test_one_failure(self):
+        self.assertFailures(1, """...
+worker/0 TestWTF.WTF_Variant.OperatorAmpersand Passed
+worker/0 TestWTF.WTF_Variant.Ref Passed
+worker/0 TestWTF.WTF_Variant.RefPtr Passed
+worker/0 TestWTF.WTF_Variant.RetainPtr Passed
+worker/0 TestWTF.WTF_Variant.VisitorUsingMakeVisitor Passed
+worker/0 TestWTF.WTF_Variant.VisitorUsingSwitchOn Passed
+worker/0 exiting
+Ran 1888 tests of 1888 with 1887 successful
+------------------------------
+Test suite failed
+
+Crashed
+
+    TestWTF.WTF.StringConcatenate_Unsigned
+        **FAIL** WTF.StringConcatenate_Unsigned
+
+        C:\\cygwin\\home\\buildbot\\worker\\win-release\\build\\Tools\\TestWebKitAPI\\Tests\\WTF\\StringConcatenate.cpp:84
+        Value of: makeString("hello ", static_cast<unsigned short>(42) , " world")
+          Actual: hello 42 world
+        Expected: "hello * world"
+        Which is: 74B00C9C
+
+Testing completed, Exit status: 3
+""")
+
+    def test_multiple_failures(self):
+        self.assertFailures(2, """...
+worker/0 TestWTF.WTF_Variant.OperatorAmpersand Passed
+worker/0 TestWTF.WTF_Variant.Ref Passed
+worker/0 TestWTF.WTF_Variant.RefPtr Passed
+worker/0 TestWTF.WTF_Variant.RetainPtr Passed
+worker/0 TestWTF.WTF_Variant.VisitorUsingMakeVisitor Passed
+worker/0 TestWTF.WTF_Variant.VisitorUsingSwitchOn Passed
+worker/0 exiting
+Ran 1888 tests of 1888 with 1886 successful
+------------------------------
+Test suite failed
+
+Crashed
+
+    TestWTF.WTF.StringConcatenate_Unsigned
+        **FAIL** WTF.StringConcatenate_Unsigned
+
+        C:\\cygwin\\home\\buildbot\\worker\\win-release\\build\\Tools\\TestWebKitAPI\\Tests\\WTF\\StringConcatenate.cpp:84
+        Value of: makeString("hello ", static_cast<unsigned short>(42) , " world")
+          Actual: hello 42 world
+        Expected: "hello * world"
+        Which is: 74B00C9C
+
+    TestWTF.WTF_Expected.Unexpected
+        **FAIL** WTF_Expected.Unexpected
+
+        C:\\cygwin\\home\\buildbot\\worker\\win-release\\build\\Tools\\TestWebKitAPI\\Tests\\WTF\\Expected.cpp:96
+        Value of: s1
+          Actual: oops
+        Expected: s0
+        Which is: oops
+
+Testing completed, Exit status: 3
+""")
+
+    def test_one_timeout(self):
+        self.assertFailures(1, """...
+worker/0 TestWTF.WTF_Variant.OperatorAmpersand Passed
+worker/0 TestWTF.WTF_Variant.Ref Passed
+worker/0 TestWTF.WTF_Variant.RefPtr Passed
+worker/0 TestWTF.WTF_Variant.RetainPtr Passed
+worker/0 TestWTF.WTF_Variant.VisitorUsingMakeVisitor Passed
+worker/0 TestWTF.WTF_Variant.VisitorUsingSwitchOn Passed
+worker/0 exiting
+Ran 1888 tests of 1888 with 1887 successful
+------------------------------
+Test suite failed
+
+Timeout
+
+     TestWTF.WTF_PoisonedUniquePtrForTriviallyDestructibleArrays.Assignment
+
+Testing completed, Exit status: 3
+""")
+
+    def test_multiple_timeouts(self):
+        self.assertFailures(2, """...
+worker/0 TestWTF.WTF_Variant.OperatorAmpersand Passed
+worker/0 TestWTF.WTF_Variant.Ref Passed
+worker/0 TestWTF.WTF_Variant.RefPtr Passed
+worker/0 TestWTF.WTF_Variant.RetainPtr Passed
+worker/0 TestWTF.WTF_Variant.VisitorUsingMakeVisitor Passed
+worker/0 TestWTF.WTF_Variant.VisitorUsingSwitchOn Passed
+worker/0 exiting
+Ran 1888 tests of 1888 with 1886 successful
+------------------------------
+Test suite failed
+
+Timeout
+
+    TestWTF.WTF_PoisonedUniquePtrForTriviallyDestructibleArrays.Assignment
+    TestWTF.WTF_Lock.ContendedShortSection
+
+Testing completed, Exit status: 3
+""")
+
+    def test_multiple_failures_and_timeouts(self):
+        self.assertFailures(4, """...
+worker/0 TestWTF.WTF_Variant.OperatorAmpersand Passed
+worker/0 TestWTF.WTF_Variant.Ref Passed
+worker/0 TestWTF.WTF_Variant.RefPtr Passed
+worker/0 TestWTF.WTF_Variant.RetainPtr Passed
+worker/0 TestWTF.WTF_Variant.VisitorUsingMakeVisitor Passed
+worker/0 TestWTF.WTF_Variant.VisitorUsingSwitchOn Passed
+worker/0 exiting
+Ran 1888 tests of 1888 with 1884 successful
+------------------------------
+Test suite failed
+
+Crashed
+
+    TestWTF.WTF.StringConcatenate_Unsigned
+        **FAIL** WTF.StringConcatenate_Unsigned
+
+        C:\\cygwin\\home\\buildbot\\worker\\win-release\\build\\Tools\\TestWebKitAPI\\Tests\\WTF\\StringConcatenate.cpp:84
+        Value of: makeString("hello ", static_cast<unsigned short>(42) , " world")
+          Actual: hello 42 world
+        Expected: "hello * world"
+        Which is: 74B00C9C
+
+    TestWTF.WTF_Expected.Unexpected
+        **FAIL** WTF_Expected.Unexpected
+
+        C:\\cygwin\\home\\buildbot\\worker\\win-release\\build\\Tools\\TestWebKitAPI\\Tests\\WTF\\Expected.cpp:96
+        Value of: s1
+          Actual: oops
+        Expected: s0
+        Which is: oops
+
+Timeout
+
+    TestWTF.WTF_PoisonedUniquePtrForTriviallyDestructibleArrays.Assignment
+    TestWTF.WTF_Lock.ContendedShortSection
+
+Testing completed, Exit status: 3
+""")
+
+
+class BuildStepsConstructorTest(unittest.TestCase):
+    # "Passing a BuildStep subclass to factory.addStep is deprecated. Please pass a BuildStep instance instead.  Support will be dropped in v0.8.7."
+    # It checks if all builder's all buildsteps can be insantiated after migration.
+    # https://bugs.webkit.org/show_bug.cgi?id=89001
+    # http://buildbot.net/buildbot/docs/0.8.6p1/manual/customization.html#writing-buildstep-constructors
+
+    @staticmethod
+    def generateTests():
+        for builderNumber, builder in enumerate(c['builders']):
+            for stepNumber, step in enumerate(builder['factory'].steps):
+                builderName = builder['name'].encode('ascii', 'ignore')
+                setattr(BuildStepsConstructorTest, 'test_builder%02d_step%02d' % (builderNumber, stepNumber), BuildStepsConstructorTest.createTest(builderName, step))
+
+    @staticmethod
+    def createTest(builderName, step):
+        def doTest(self):
+            try:
+                buildStepFactory, kwargs = step
+                buildStepFactory(**kwargs)
+            except TypeError as e:
+                buildStepName = str(buildStepFactory).split('.')[-1]
+                self.fail("Error during instantiation %s buildstep for %s builder: %s\n" % (buildStepName, builderName, e))
+        return doTest
+
+
+expected_build_steps = {
+    'Apple-Win-10-Debug-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile', 'download-built-product', 'extract-built-product', 'jscore-test', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'archive-test-results', 'upload', 'extract-test-results'],
+    'Apple-Win-10-Release-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile', 'download-built-product', 'extract-built-product', 'jscore-test', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'archive-test-results', 'upload', 'extract-test-results'],
+    'Apple-Win-10-Debug-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile', 'compile-webkit', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
+    'Apple-Win-10-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile', 'compile-webkit', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
+
+    'Apple-BigSur-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
+    'Apple-BigSur-Debug-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
+    'Apple-BigSur-Debug-WK1-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
+    'Apple-BigSur-Debug-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
+    'Apple-BigSur-Release-WK1-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
+    'Apple-BigSur-Release-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
+
+    'Apple-Catalina-Debug-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
+    'Apple-Catalina-Debug-JSC-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'jscore-test'],
+    'Apple-Catalina-Debug-Test262-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'test262-test'],
+    'Apple-Catalina-Debug-WK1-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
+    'Apple-Catalina-Debug-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
+    'Apple-Catalina-Debug-WK2-GPUProcess-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
+    'Apple-Catalina-LLINT-CLoop-BuildAndTest': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'webkit-jsc-cloop-test'],
+    'Apple-Catalina-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
+    'Apple-Catalina-Release-JSC-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'jscore-test'],
+    'Apple-Catalina-Release-Test262-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'test262-test'],
+    'Apple-Catalina-Release-WK1-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
+    'Apple-Catalina-Release-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
+    'Apple-Catalina-Release-WK2-Perf': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'perf-test'],
+    'Apple-Catalina-Release-WK2-WebGL-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
+
+    'Apple-Mojave-Debug-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
+    'Apple-Mojave-Debug-WK1-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
+    'Apple-Mojave-Debug-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
+    'Apple-Mojave-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
+    'Apple-Mojave-Release-WK1-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
+    'Apple-Mojave-Release-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'lldb-webkit-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
+    'Apple-Mojave-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
+
+    'Apple-iOS-14-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit'],
+    'Apple-iOS-14-Simulator-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
+    'Apple-iOS-14-Simulator-Release-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
+
+    'Apple-iOS-14-Simulator-Debug-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
+    'Apple-iOS-14-Simulator-Debug-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
+
+    'Apple-iPadOS-14-Simulator-Release-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
+    'Apple-iPadOS-14-Simulator-Debug-WK2-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wait-for-crash-collection', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'trigger-crash-log-submission', 'archive-test-results', 'upload', 'extract-test-results'],
+
+    'Apple-tvOS-14-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit'],
+    'Apple-tvOS-Simulator-14-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit'],
+
+    'Apple-watchOS-7-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit'],
+    'Apple-watchOS-Simulator-7-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit'],
+
+    'JSCOnly-Linux-ARMv7-Thumb2-Release': ['configure-build', 'svn', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'jscore-test'],
+    'JSCOnly-Linux-ARMv7-Thumb2-SoftFP-Release': ['configure-build', 'svn', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'jscore-test'],
+    'JSCOnly-Linux-AArch64-Release': ['configure-build', 'svn', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'jscore-test'],
+    'JSCOnly-Linux-MIPS32el-Release': ['configure-build', 'svn', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'jscore-test'],
+
+    'GTK-Linux-64-bit-Debug-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'compile-webkit', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
+    'GTK-Linux-64-bit-Debug-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'layout-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'extract-test-results', 'API-tests'],
+    'GTK-Linux-64-bit-Debug-WebDriver-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'webdriver-test'],
+    'GTK-Linux-64-bit-Debug-JS-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'jscore-test', 'test262-test'],
+    'GTK-Linux-64-bit-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'compile-webkit', 'generate-jsc-bundle', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
+    'GTK-Linux-64-bit-Release-Perf': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'perf-test', 'benchmark-test'],
+    'GTK-Linux-64-bit-Release-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'layout-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'extract-test-results', 'API-tests'],
+    'GTK-Linux-64-bit-Release-WebDriver-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'webdriver-test'],
+    'GTK-Linux-64-bit-Release-JS-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'jscore-test', 'test262-test'],
+    'GTK-Linux-64-bit-Release-Wayland-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'layout-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'extract-test-results', 'API-tests', 'webdriver-test'],
+    'GTK-Linux-64-bit-Release-Ubuntu-LTS-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit'],
+    'GTK-Linux-64-bit-Release-Debian-Stable-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit'],
+    'GTK-Linux-64-bit-Release-GTK4-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'compile-webkit', 'layout-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'extract-test-results', 'API-tests', 'webdriver-test'],
+
+    'PlayStation-Debug-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit'],
+    'PlayStation-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit'],
+
+    'WinCairo-64-bit-JSC-Debug-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'jscore-test'],
+    'WinCairo-64-bit-JSC-Release-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'jscore-test'],
+    'WinCairo-64-bit-WKL-Debug-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
+    'WinCairo-64-bit-WKL-Debug-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wincairo-requirements', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'archive-test-results', 'upload', 'extract-test-results'],
+    'WinCairo-64-bit-WKL-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'compile-webkit', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
+    'WinCairo-64-bit-WKL-Release-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'download-built-product', 'extract-built-product', 'wincairo-requirements', 'layout-test', 'run-api-tests', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'archive-test-results', 'upload', 'extract-test-results'],
+
+    'WPE-Linux-64-bit-Release-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'compile-webkit', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
+    'WPE-Linux-64-bit-Release-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'layout-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'extract-test-results', 'API-tests', 'webdriver-test'],
+    'WPE-Linux-64-bit-Release-JS-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'jscore-test', 'test262-test'],
+    'WPE-Linux-64-bit-Debug-Build': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'compile-webkit', 'archive-built-product', 'upload', 'transfer-to-s3', 'trigger'],
+    'WPE-Linux-64-bit-Debug-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'layout-test', 'webkitpy-test', 'webkitperl-test', 'bindings-generation-tests', 'builtins-generator-tests', 'dashboard-tests', 'archive-test-results', 'upload', 'extract-test-results', 'API-tests', 'webdriver-test'],
+    'WPE-Linux-64-bit-Debug-JS-Tests': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'download-built-product', 'extract-built-product', 'jscore-test', 'test262-test'],
+    'GTK-Linux-64bit-Release-Packaging-Nightly-Ubuntu1804': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'compile-webkit', 'generate-minibrowser-bundle'],
+    'GTK-Linux-64bit-Release-Packaging-Nightly-Ubuntu2004': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'compile-webkit', 'generate-minibrowser-bundle'],
+    'WPE-Linux-64bit-Release-Packaging-Nightly-Ubuntu1804': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'compile-webkit', 'generate-minibrowser-bundle'],
+    'WPE-Linux-64bit-Release-Packaging-Nightly-Ubuntu2004': ['configure-build', 'svn', 'kill-old-processes', 'delete-WebKitBuild-directory', 'delete-stale-build-files', 'jhbuild', 'compile-webkit', 'generate-minibrowser-bundle'],
+}
+
+
+class BuildStepsTest(unittest.TestCase):
+    @staticmethod
+    def generateTests():
+        for builder in c['builders']:
+            builderName = builder['name'].encode('ascii', 'ignore')
+            setattr(BuildStepsTest, 'test_builder %s' % builderName, BuildStepsTest.createTest(builder))
+
+    @staticmethod
+    def createTest(builder):
+        def doTest(self):
+            buildSteps = []
+            for step in builder['factory'].steps:
+                buildSteps.append(step[0].name)
+            self.assertTrue(builder['name'] in expected_build_steps, "Missing expected result for builder: %s\n Actual result is %s" % (builder['name'], buildSteps))
+            self.assertListEqual(expected_build_steps[builder['name']], buildSteps)
+
+        return doTest
+
+    def test_unnecessary_expected_results(self):
+        builders = set()
+        for builder in c['builders']:
+            builders.add(builder['name'].encode('ascii', 'ignore'))
+
+        for builder in expected_build_steps:
+            self.assertTrue(builder in builders, "Builder %s doesn't exist, but has unnecessary expected results" % builder)
+
+
+class RunAndUploadPerfTestsTest(unittest.TestCase):
+    def assertResults(self, rc, expected_text):
+        cmd = StubRemoteCommand(rc, expected_text)
+        step = RunAndUploadPerfTests()
+        step.commandComplete(cmd)
+        actual_results = step.evaluateCommand(cmd)
+        actual_text = str(step.getText2(cmd, actual_results)[0])
+        self.assertEqual(expected_text, actual_text)
+
+    def test_success(self):
+        self.assertResults(0, "perf-test")
+
+    def test_tests_failed(self):
+        self.assertResults(5, "5 perf tests failed")
+
+    def test_build_bad_build(self):
+        self.assertResults(255, "build not up to date")
+
+    def test_build_bad_source_json(self):
+        self.assertResults(254, "worker config JSON error")
+
+    def test_build_bad_marge(self):
+        self.assertResults(253, "output JSON merge error")
+
+    def test_build_bad_failed_uploading(self):
+        self.assertResults(252, "upload error")
+
+    def test_build_bad_preparation(self):
+        self.assertResults(251, "system dependency error")
+
+    def test_buildbot_timeout(self):
+        self.assertResults(-1, "timeout")
+
+
+class RunBenchmarkTest(unittest.TestCase):
+    def assertResults(self, rc, expected_text):
+        cmd = StubRemoteCommand(rc, expected_text)
+        step = RunBenchmarkTests()
+        step.commandComplete(cmd)
+        actual_results = step.evaluateCommand(cmd)
+        actual_text = str(step.getText2(cmd, actual_results)[0])
+        self.assertEqual(expected_text, actual_text)
+
+    def test_success(self):
+        self.assertResults(0, "benchmark-test")
+
+    def test_tests_failed(self):
+        self.assertResults(7, "7 benchmark tests failed")
+
+
+# FIXME: We should run this file as part of test-webkitpy.
+if __name__ == '__main__':
+    BuildBotConfigLoader()._add_dependent_modules_to_sys_modules()
+    from loadConfig import *
+    c = {}
+    loadBuilderConfig(c, is_test_mode_enabled=True)
+    BuildStepsConstructorTest.generateTests()
+    BuildStepsTest.generateTests()
+    unittest.main()

Modified: trunk/Tools/CISupport/ews-build/steps.py (270261 => 270262)


--- trunk/Tools/CISupport/ews-build/steps.py	2020-11-30 21:42:48 UTC (rev 270261)
+++ trunk/Tools/CISupport/ews-build/steps.py	2020-11-30 21:45:39 UTC (rev 270262)
@@ -1125,9 +1125,9 @@
 
 
 class RunBuildWebKitOrgUnitTests(shell.ShellCommand):
-    name = 'build-webkit-org-unit-tests'
+    name = 'build-webkit-old-unit-tests'
     description = ['build-webkit-unit-tests running']
-    command = ['python', 'steps_unittest.py']
+    command = ['python', 'steps_unittest_old.py']
 
     def __init__(self, **kwargs):
         shell.ShellCommand.__init__(self, workdir='build/Tools/CISupport/build-webkit-org', timeout=2 * 60, logEnviron=False, **kwargs)
@@ -1134,8 +1134,8 @@
 
     def getResultSummary(self):
         if self.results == SUCCESS:
-            return {u'step': u'Passed build.webkit.org unit tests'}
-        return {u'step': u'Failed build.webkit.org unit tests'}
+            return {u'step': u'Passed build.webkit.org old unit tests'}
+        return {u'step': u'Failed build.webkit.org old unit tests'}
 
 
 class RunEWSUnitTests(shell.ShellCommand):

Modified: trunk/Tools/CISupport/ews-build/steps_unittest.py (270261 => 270262)


--- trunk/Tools/CISupport/ews-build/steps_unittest.py	2020-11-30 21:42:48 UTC (rev 270261)
+++ trunk/Tools/CISupport/ews-build/steps_unittest.py	2020-11-30 21:45:39 UTC (rev 270262)
@@ -737,11 +737,11 @@
             ExpectShell(workdir='build/Tools/CISupport/build-webkit-org',
                         timeout=120,
                         logEnviron=False,
-                        command=['python', 'steps_unittest.py'],
+                        command=['python', 'steps_unittest_old.py'],
                         )
             + 0,
         )
-        self.expectOutcome(result=SUCCESS, state_string='Passed build.webkit.org unit tests')
+        self.expectOutcome(result=SUCCESS, state_string='Passed build.webkit.org old unit tests')
         return self.runStep()
 
     def test_failure(self):
@@ -750,12 +750,12 @@
             ExpectShell(workdir='build/Tools/CISupport/build-webkit-org',
                         timeout=120,
                         logEnviron=False,
-                        command=['python', 'steps_unittest.py'],
+                        command=['python', 'steps_unittest_old.py'],
                         )
             + ExpectShell.log('stdio', stdout='Unhandled Error. Traceback (most recent call last): Keys in cmd missing from expectation: [logfiles.json]')
             + 2,
         )
-        self.expectOutcome(result=FAILURE, state_string='Failed build.webkit.org unit tests')
+        self.expectOutcome(result=FAILURE, state_string='Failed build.webkit.org old unit tests')
         return self.runStep()
 
 

Modified: trunk/Tools/ChangeLog (270261 => 270262)


--- trunk/Tools/ChangeLog	2020-11-30 21:42:48 UTC (rev 270261)
+++ trunk/Tools/ChangeLog	2020-11-30 21:45:39 UTC (rev 270262)
@@ -1,3 +1,19 @@
+2020-11-30  Aakash Jain  <[email protected]>
+
+        [build.webkit.org] Move old buildbot unittests to steps_unittest_old.py
+        https://bugs.webkit.org/show_bug.cgi?id=219364
+
+        Reviewed by Jonathan Bedard.
+
+        * CISupport/build-webkit-org/committer_auth_unittest.py: Removed.
+        * CISupport/build-webkit-org/committer_auth_unittest_old.py: Moved from Tools/CISupport/build-webkit-org/committer_auth_unittest.py.
+        * CISupport/build-webkit-org/steps_unittest.py: Removed.
+        * CISupport/build-webkit-org/steps_unittest_old.py: Moved from Tools/CISupport/build-webkit-org/steps_unittest.py.
+        * CISupport/ews-build/steps.py:
+        (RunBuildWebKitOrgUnitTests): Updated ews configuration appropriately.
+        (RunBuildWebKitOrgUnitTests.getResultSummary):
+        * CISupport/ews-build/steps_unittest.py: Updated ews unit-tests.
+
 2020-11-30  Jonathan Bedard  <[email protected]>
 
         [webkitscmpy] Support remote repositories in git-webkit
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to