Title: [233757] trunk/Tools
Revision
233757
Author
[email protected]
Date
2018-07-11 21:08:20 -0700 (Wed, 11 Jul 2018)

Log Message

[ews-build] EWS should unapply patch and re-run jsc tests when patch fails jsc tests
https://bugs.webkit.org/show_bug.cgi?id=187549

Reviewed by Alexey Proskuryakov.

* BuildSlaveSupport/ews-build/factories.py:
(JSCTestsFactory.__init__):
* BuildSlaveSupport/ews-build/steps.py:
(CompileJSCOnlyToT): Build ToT without patch.
(CompileJSCOnlyToT.doStepIf): Run this step only if patch failed to build.
(RunJavaScriptCoreTests.evaluateCommand): Set patchFailedJSCTests property appropriately.
(ReRunJavaScriptCoreTests): Re-runs JSC tests.
(ReRunJavaScriptCoreTests.doStepIf): Run this step only if patch failed JSC tests.
(ReRunJavaScriptCoreTests.evaluateCommand): Set patchFailedJSCTests property appropriately.
(RunJavaScriptCoreTestsToT): Run JSC tests on ToT without patch.
(RunJavaScriptCoreTestsToT.doStepIf): Run this step only if patch failed JSC tests.
* BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

Modified Paths

Diff

Modified: trunk/Tools/BuildSlaveSupport/ews-build/factories.py (233756 => 233757)


--- trunk/Tools/BuildSlaveSupport/ews-build/factories.py	2018-07-12 04:06:27 UTC (rev 233756)
+++ trunk/Tools/BuildSlaveSupport/ews-build/factories.py	2018-07-12 04:08:20 UTC (rev 233757)
@@ -71,7 +71,12 @@
     def __init__(self, platform, configuration='release', architectures=None, additionalArguments=None, **kwargs):
         Factory.__init__(self, platform, configuration, architectures, False, additionalArguments)
         self.addStep(CompileJSCOnly())
+        self.addStep(UnApplyPatchIfRequired())
+        self.addStep(CompileJSCOnlyToT())
         self.addStep(RunJavaScriptCoreTests())
+        self.addStep(ReRunJavaScriptCoreTests())
+        self.addStep(UnApplyPatchIfRequired())
+        self.addStep(RunJavaScriptCoreTestsToT())
 
 
 class GTKFactory(Factory):

Modified: trunk/Tools/BuildSlaveSupport/ews-build/steps.py (233756 => 233757)


--- trunk/Tools/BuildSlaveSupport/ews-build/steps.py	2018-07-12 04:06:27 UTC (rev 233756)
+++ trunk/Tools/BuildSlaveSupport/ews-build/steps.py	2018-07-12 04:08:20 UTC (rev 233757)
@@ -73,7 +73,7 @@
         super(UnApplyPatchIfRequired, self).__init__(alwaysUseLatest=True, **kwargs)
 
     def doStepIf(self, step):
-        return self.getProperty('patchFailedToBuild') or self.getProperty('patchFailedTests')
+        return self.getProperty('patchFailedToBuild') or self.getProperty('patchFailedJSCTests')
 
     def hideStepIf(self, results, step):
         return not self.doStepIf(step)
@@ -187,6 +187,16 @@
     command = ["perl", "Tools/Scripts/build-jsc", WithProperties("--%(configuration)s")]
 
 
+class CompileJSCOnlyToT(CompileJSCOnly):
+    name = 'build-jsc-tot'
+
+    def doStepIf(self, step):
+        return self.getProperty('patchFailedToBuild')
+
+    def hideStepIf(self, results, step):
+        return not self.doStepIf(step)
+
+
 class RunJavaScriptCoreTests(shell.Test):
     name = 'jscore-test'
     description = ['jscore-tests running']
@@ -200,7 +210,39 @@
         appendCustomBuildFlags(self, self.getProperty('platform'), self.getProperty('fullPlatform'))
         return shell.Test.start(self)
 
+    def evaluateCommand(self, cmd):
+        if cmd.didFail():
+            self.setProperty('patchFailedJSCTests', True)
 
+        return super(RunJavaScriptCoreTests, self).evaluateCommand(cmd)
+
+
+class ReRunJavaScriptCoreTests(RunJavaScriptCoreTests):
+    name = 'jscore-test-rerun'
+
+    def doStepIf(self, step):
+        return self.getProperty('patchFailedJSCTests')
+
+    def hideStepIf(self, results, step):
+        return not self.doStepIf(step)
+
+    def evaluateCommand(self, cmd):
+        self.setProperty('patchFailedJSCTests', cmd.didFail())
+        return super(RunJavaScriptCoreTests, self).evaluateCommand(cmd)
+
+
+class RunJavaScriptCoreTestsToT(RunJavaScriptCoreTests):
+    name = 'jscore-test-tot'
+    jsonFileName = 'jsc_results.json'
+    command = ['perl', 'Tools/Scripts/run-_javascript_core-tests', '--no-fail-fast', '--json-output={0}'.format(jsonFileName), WithProperties('--%(configuration)s')]
+
+    def doStepIf(self, step):
+        return self.getProperty('patchFailedJSCTests')
+
+    def hideStepIf(self, results, step):
+        return not self.doStepIf(step)
+
+
 class CleanBuild(shell.Compile):
     name = "delete-WebKitBuild-directory"
     description = ["deleting WebKitBuild directory"]

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


--- trunk/Tools/BuildSlaveSupport/ews-build/steps_unittest.py	2018-07-12 04:06:27 UTC (rev 233756)
+++ trunk/Tools/BuildSlaveSupport/ews-build/steps_unittest.py	2018-07-12 04:08:20 UTC (rev 233757)
@@ -526,6 +526,52 @@
         return self.runStep()
 
 
+class TestCompileJSCOnlyToT(BuildStepMixinAdditions, unittest.TestCase):
+    def setUp(self):
+        self.longMessage = True
+        return self.setUpBuildStep()
+
+    def tearDown(self):
+        return self.tearDownBuildStep()
+
+    def test_success(self):
+        self.setupStep(CompileJSCOnlyToT())
+        self.setProperty('fullPlatform', 'jsc-only')
+        self.setProperty('configuration', 'release')
+        self.setProperty('patchFailedToBuild', 'True')
+        self.expectRemoteCommands(
+            ExpectShell(workdir='wkdir',
+                        command=['perl', 'Tools/Scripts/build-jsc', '--release'],
+                        )
+            + 0,
+        )
+        self.expectOutcome(result=SUCCESS, state_string='compiled')
+        return self.runStep()
+
+    def test_failure(self):
+        self.setupStep(CompileJSCOnlyToT())
+        self.setProperty('fullPlatform', 'jsc-only')
+        self.setProperty('configuration', 'debug')
+        self.setProperty('patchFailedToBuild', 'True')
+        self.expectRemoteCommands(
+            ExpectShell(workdir='wkdir',
+                        command=['perl', 'Tools/Scripts/build-jsc', '--debug'],
+                        )
+            + ExpectShell.log('stdio', stdout='1 error generated.')
+            + 2,
+        )
+        self.expectOutcome(result=FAILURE, state_string='compiled (failure)')
+        return self.runStep()
+
+    def test_skip(self):
+        self.setupStep(CompileJSCOnlyToT())
+        self.setProperty('fullPlatform', 'jsc-only')
+        self.setProperty('configuration', 'debug')
+        self.expectHidden(True)
+        self.expectOutcome(result=SKIPPED, state_string='compiled (skipped)')
+        return self.runStep()
+
+
 class TestRunJavaScriptCoreTests(BuildStepMixinAdditions, unittest.TestCase):
     def setUp(self):
         self.longMessage = True
@@ -565,5 +611,103 @@
         return self.runStep()
 
 
+class TestReRunJavaScriptCoreTests(BuildStepMixinAdditions, unittest.TestCase):
+    def setUp(self):
+        self.longMessage = True
+        self.jsonFileName = 'jsc_results.json'
+        return self.setUpBuildStep()
+
+    def tearDown(self):
+        return self.tearDownBuildStep()
+
+    def test_success(self):
+        self.setupStep(ReRunJavaScriptCoreTests())
+        self.setProperty('fullPlatform', 'jsc-only')
+        self.setProperty('configuration', 'release')
+        self.setProperty('patchFailedJSCTests', 'True')
+        self.expectRemoteCommands(
+            ExpectShell(workdir='wkdir',
+                        command=['perl', 'Tools/Scripts/run-_javascript_core-tests', '--no-build', '--no-fail-fast', '--json-output={0}'.format(self.jsonFileName), '--release'],
+                        logfiles={'json': self.jsonFileName},
+                        )
+            + 0,
+        )
+        self.expectOutcome(result=SUCCESS, state_string='jscore-tests')
+        return self.runStep()
+
+    def test_failure(self):
+        self.setupStep(ReRunJavaScriptCoreTests())
+        self.setProperty('fullPlatform', 'jsc-only')
+        self.setProperty('configuration', 'debug')
+        self.setProperty('patchFailedJSCTests', 'True')
+        self.expectRemoteCommands(
+            ExpectShell(workdir='wkdir',
+                        command=['perl', 'Tools/Scripts/run-_javascript_core-tests', '--no-build', '--no-fail-fast', '--json-output={0}'.format(self.jsonFileName), '--debug'],
+                        logfiles={'json': self.jsonFileName},
+                        )
+            + ExpectShell.log('stdio', stdout='9 failures found.')
+            + 2,
+        )
+        self.expectOutcome(result=FAILURE, state_string='jscore-tests (failure)')
+        return self.runStep()
+
+    def test_skip(self):
+        self.setupStep(ReRunJavaScriptCoreTests())
+        self.setProperty('fullPlatform', 'jsc-only')
+        self.setProperty('configuration', 'debug')
+        self.expectHidden(True)
+        self.expectOutcome(result=SKIPPED, state_string='jscore-tests (skipped)')
+        return self.runStep()
+
+
+class TestRunJavaScriptCoreTestsToT(BuildStepMixinAdditions, unittest.TestCase):
+    def setUp(self):
+        self.longMessage = True
+        self.jsonFileName = 'jsc_results.json'
+        return self.setUpBuildStep()
+
+    def tearDown(self):
+        return self.tearDownBuildStep()
+
+    def test_success(self):
+        self.setupStep(RunJavaScriptCoreTestsToT())
+        self.setProperty('fullPlatform', 'jsc-only')
+        self.setProperty('configuration', 'release')
+        self.setProperty('patchFailedJSCTests', 'True')
+        self.expectRemoteCommands(
+            ExpectShell(workdir='wkdir',
+                        command=['perl', 'Tools/Scripts/run-_javascript_core-tests', '--no-fail-fast', '--json-output={0}'.format(self.jsonFileName), '--release'],
+                        logfiles={'json': self.jsonFileName},
+                        )
+            + 0,
+        )
+        self.expectOutcome(result=SUCCESS, state_string='jscore-tests')
+        return self.runStep()
+
+    def test_failure(self):
+        self.setupStep(RunJavaScriptCoreTestsToT())
+        self.setProperty('fullPlatform', 'jsc-only')
+        self.setProperty('configuration', 'debug')
+        self.setProperty('patchFailedJSCTests', 'True')
+        self.expectRemoteCommands(
+            ExpectShell(workdir='wkdir',
+                        command=['perl', 'Tools/Scripts/run-_javascript_core-tests', '--no-fail-fast', '--json-output={0}'.format(self.jsonFileName), '--debug'],
+                        logfiles={'json': self.jsonFileName},
+                        )
+            + ExpectShell.log('stdio', stdout='9 failures found.')
+            + 2,
+        )
+        self.expectOutcome(result=FAILURE, state_string='jscore-tests (failure)')
+        return self.runStep()
+
+    def test_skip(self):
+        self.setupStep(RunJavaScriptCoreTestsToT())
+        self.setProperty('fullPlatform', 'jsc-only')
+        self.setProperty('configuration', 'debug')
+        self.expectHidden(True)
+        self.expectOutcome(result=SKIPPED, state_string='jscore-tests (skipped)')
+        return self.runStep()
+
+
 if __name__ == '__main__':
     unittest.main()

Modified: trunk/Tools/ChangeLog (233756 => 233757)


--- trunk/Tools/ChangeLog	2018-07-12 04:06:27 UTC (rev 233756)
+++ trunk/Tools/ChangeLog	2018-07-12 04:08:20 UTC (rev 233757)
@@ -1,3 +1,23 @@
+2018-07-11  Aakash Jain  <[email protected]>
+
+        [ews-build] EWS should unapply patch and re-run jsc tests when patch fails jsc tests
+        https://bugs.webkit.org/show_bug.cgi?id=187549
+
+        Reviewed by Alexey Proskuryakov.
+
+        * BuildSlaveSupport/ews-build/factories.py:
+        (JSCTestsFactory.__init__):
+        * BuildSlaveSupport/ews-build/steps.py:
+        (CompileJSCOnlyToT): Build ToT without patch.
+        (CompileJSCOnlyToT.doStepIf): Run this step only if patch failed to build.
+        (RunJavaScriptCoreTests.evaluateCommand): Set patchFailedJSCTests property appropriately.
+        (ReRunJavaScriptCoreTests): Re-runs JSC tests.
+        (ReRunJavaScriptCoreTests.doStepIf): Run this step only if patch failed JSC tests.
+        (ReRunJavaScriptCoreTests.evaluateCommand): Set patchFailedJSCTests property appropriately.
+        (RunJavaScriptCoreTestsToT): Run JSC tests on ToT without patch.
+        (RunJavaScriptCoreTestsToT.doStepIf): Run this step only if patch failed JSC tests.
+        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.
+
 2018-07-11  Commit Queue  <[email protected]>
 
         Unreviewed, rolling out r233742.
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to