[ews] Services EWS should also run build.webkit.org unit tests
https://bugs.webkit.org/show_bug.cgi?id=202864

Reviewed by Jonathan Bedard.

* BuildSlaveSupport/ews-build/factories.py:
(ServicesFactory.__init__): Added new RunBuildWebKitUnitTests step.
* BuildSlaveSupport/ews-build/steps.py:
(CheckPatchRelevance): Added paths for build.webkit.org code.
(RunBuildWebKitUnitTests): Build step to run build.webkit.org unit tests.
(RunBuildWebKitUnitTests.__init__): Set workdir, timeout and logEnviron.
(RunBuildWebKitUnitTests.getResultSummary): Customize Buildbot messages for this build step.
* BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@251025 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Tools/BuildSlaveSupport/ews-build/factories.py b/Tools/BuildSlaveSupport/ews-build/factories.py
index 1aa7bff..a16d2f0 100644
--- a/Tools/BuildSlaveSupport/ews-build/factories.py
+++ b/Tools/BuildSlaveSupport/ews-build/factories.py
@@ -27,7 +27,7 @@
 from steps import (ApplyPatch, ApplyWatchList, CheckOutSource, CheckOutSpecificRevision, CheckPatchRelevance,
                    CheckStyle, CompileJSC, CompileWebKit, ConfigureBuild,
                    DownloadBuiltProduct, ExtractBuiltProduct, InstallGtkDependencies, InstallWpeDependencies, KillOldProcesses,
-                   PrintConfiguration, RunAPITests, RunBindingsTests, RunEWSBuildbotCheckConfig, RunEWSUnitTests,
+                   PrintConfiguration, RunAPITests, RunBindingsTests, RunBuildWebKitOrgUnitTests, RunEWSBuildbotCheckConfig, RunEWSUnitTests,
                    RunJavaScriptCoreTests, RunWebKit1Tests, RunWebKitPerlTests,
                    RunWebKitPyTests, RunWebKitTests, UpdateWorkingDirectory, ValidatePatch)
 
@@ -183,3 +183,4 @@
         Factory.__init__(self, platform, configuration, architectures, False, additionalArguments, checkRelevance=True)
         self.addStep(RunEWSUnitTests())
         self.addStep(RunEWSBuildbotCheckConfig())
+        self.addStep(RunBuildWebKitOrgUnitTests())
diff --git a/Tools/BuildSlaveSupport/ews-build/steps.py b/Tools/BuildSlaveSupport/ews-build/steps.py
index 9c7fbb2..948a714 100644
--- a/Tools/BuildSlaveSupport/ews-build/steps.py
+++ b/Tools/BuildSlaveSupport/ews-build/steps.py
@@ -225,7 +225,9 @@
     ]
 
     services_paths = [
+        'Tools/BuildSlaveSupport/build.webkit.org-config',
         'Tools/BuildSlaveSupport/ews-build',
+        'Tools/BuildSlaveSupport/Shared',
     ]
 
     jsc_paths = [
@@ -602,6 +604,20 @@
         super(RunWebKitPerlTests, self).__init__(timeout=2 * 60, logEnviron=False, **kwargs)
 
 
+class RunBuildWebKitOrgUnitTests(shell.ShellCommand):
+    name = 'build-webkit-org-unit-tests'
+    description = ['build-webkit-unit-tests running']
+    command = ['python', 'steps_unittest.py']
+
+    def __init__(self, **kwargs):
+        shell.ShellCommand.__init__(self, workdir='build/Tools/BuildSlaveSupport/build.webkit.org-config', timeout=2 * 60, logEnviron=False, **kwargs)
+
+    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'}
+
+
 class RunEWSUnitTests(shell.ShellCommand):
     name = 'ews-unit-tests'
     description = ['ews-unit-tests running']
diff --git a/Tools/BuildSlaveSupport/ews-build/steps_unittest.py b/Tools/BuildSlaveSupport/ews-build/steps_unittest.py
index e2391b3..5b13641 100644
--- a/Tools/BuildSlaveSupport/ews-build/steps_unittest.py
+++ b/Tools/BuildSlaveSupport/ews-build/steps_unittest.py
@@ -39,7 +39,7 @@
                    CompileJSC, CompileJSCToT, CompileWebKit, CompileWebKitToT, ConfigureBuild,
                    DownloadBuiltProduct, ExtractBuiltProduct, ExtractTestResults, InstallGtkDependencies, InstallWpeDependencies, KillOldProcesses,
                    PrintConfiguration, ReRunAPITests, ReRunJavaScriptCoreTests, ReRunWebKitTests, RunAPITests, RunAPITestsWithoutPatch,
-                   RunBindingsTests, RunEWSBuildbotCheckConfig, RunEWSUnitTests, RunJavaScriptCoreTests, RunJavaScriptCoreTestsToT, RunWebKit1Tests,
+                   RunBindingsTests, RunBuildWebKitOrgUnitTests, RunEWSBuildbotCheckConfig, RunEWSUnitTests, RunJavaScriptCoreTests, RunJavaScriptCoreTestsToT, RunWebKit1Tests,
                    RunWebKitPerlTests, RunWebKitPyTests, RunWebKitTests, TestWithFailureCount, Trigger, TransferToS3, UnApplyPatchIfRequired,
                    UpdateWorkingDirectory, UploadBuiltProduct, UploadTestResults, ValidatePatch)
 
@@ -523,6 +523,42 @@
         return self.runStep()
 
 
+class TestRunBuildWebKitOrgUnitTests(BuildStepMixinAdditions, unittest.TestCase):
+    def setUp(self):
+        self.longMessage = True
+        return self.setUpBuildStep()
+
+    def tearDown(self):
+        return self.tearDownBuildStep()
+
+    def test_success(self):
+        self.setupStep(RunBuildWebKitOrgUnitTests())
+        self.expectRemoteCommands(
+            ExpectShell(workdir='build/Tools/BuildSlaveSupport/build.webkit.org-config',
+                        timeout=120,
+                        logEnviron=False,
+                        command=['python', 'steps_unittest.py'],
+                        )
+            + 0,
+        )
+        self.expectOutcome(result=SUCCESS, state_string='Passed build.webkit.org unit tests')
+        return self.runStep()
+
+    def test_failure(self):
+        self.setupStep(RunBuildWebKitOrgUnitTests())
+        self.expectRemoteCommands(
+            ExpectShell(workdir='build/Tools/BuildSlaveSupport/build.webkit.org-config',
+                        timeout=120,
+                        logEnviron=False,
+                        command=['python', 'steps_unittest.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')
+        return self.runStep()
+
+
 class TestKillOldProcesses(BuildStepMixinAdditions, unittest.TestCase):
     def setUp(self):
         self.longMessage = True
diff --git a/Tools/ChangeLog b/Tools/ChangeLog
index 3f042b1..db98ad2 100644
--- a/Tools/ChangeLog
+++ b/Tools/ChangeLog
@@ -1,3 +1,19 @@
+2019-10-11  Aakash Jain  <aakash_jain@apple.com>
+
+        [ews] Services EWS should also run build.webkit.org unit tests
+        https://bugs.webkit.org/show_bug.cgi?id=202864
+
+        Reviewed by Jonathan Bedard.
+
+        * BuildSlaveSupport/ews-build/factories.py:
+        (ServicesFactory.__init__): Added new RunBuildWebKitUnitTests step.
+        * BuildSlaveSupport/ews-build/steps.py:
+        (CheckPatchRelevance): Added paths for build.webkit.org code.
+        (RunBuildWebKitUnitTests): Build step to run build.webkit.org unit tests.
+        (RunBuildWebKitUnitTests.__init__): Set workdir, timeout and logEnviron.
+        (RunBuildWebKitUnitTests.getResultSummary): Customize Buildbot messages for this build step.
+        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.
+
 2019-10-11  Chris Dumez  <cdumez@apple.com>
 
         Move SuspendedPage logic from WebProcessPool to new WebBackForwardCache class