Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1691)

Unified Diff: appengine/findit/waterfall/test/process_base_swarming_task_result_pipeline_test.py

Issue 2477343003: [Findit] Refactoring monitor swarming task pipelines (Closed)
Patch Set: Addressing nit Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: appengine/findit/waterfall/test/process_base_swarming_task_result_pipeline_test.py
diff --git a/appengine/findit/waterfall/test/process_base_swarming_task_result_pipeline_test.py b/appengine/findit/waterfall/test/process_base_swarming_task_result_pipeline_test.py
index 5435ec42c75c422fafbe45add85a15f219264ce3..7a8c1c381eb00837fddbfc6d3742694972434600 100644
--- a/appengine/findit/waterfall/test/process_base_swarming_task_result_pipeline_test.py
+++ b/appengine/findit/waterfall/test/process_base_swarming_task_result_pipeline_test.py
@@ -1,10 +1,143 @@
import datetime
-from waterfall.test import wf_testcase
+from model import analysis_status
+from model.flake.flake_swarming_task import FlakeSwarmingTask
+from model.flake.master_flake_analysis import MasterFlakeAnalysis
+from model.wf_swarming_task import WfSwarmingTask
+from waterfall import swarming_util
from waterfall.process_base_swarming_task_result_pipeline import (
ProcessBaseSwarmingTaskResultPipeline)
+from waterfall.process_flake_swarming_task_result_pipeline import (
+ ProcessFlakeSwarmingTaskResultPipeline)
+from waterfall.process_swarming_task_result_pipeline import (
+ ProcessSwarmingTaskResultPipeline)
+from waterfall.test import wf_testcase
+
+
+_ISOLATED_SERVER = 'https://isolateserver.appspot.com'
+_ISOLATED_STORAGE_URL = 'isolateserver.storage.googleapis.com'
+_SAMPLE_FAILURE_LOG = {
+ 'per_iteration_data': [
+ {
+ 'TestSuite1.test1': [
+ {
+ 'status': 'SUCCESS',
+ 'other_info': 'N/A'
+ }
+ ],
+ 'TestSuite1.test2': [
+ {
+ 'status': 'FAILURE',
+ 'other_info': 'N/A'
+ },
+ {
+ 'status': 'FAILURE',
+ 'other_info': 'N/A'
+ },
+ {
+ 'status': 'SUCCESS',
+ 'other_info': 'N/A'
+ }
+ ],
+ 'TestSuite1.test3': [
+ {
+ 'status': 'FAILURE',
+ 'other_info': 'N/A'
+ },
+ {
+ 'status': 'FAILURE',
+ 'other_info': 'N/A'
+ },
+ {
+ 'status': 'FAILURE',
+ 'other_info': 'N/A'
+ }
+ ]
+ },
+ {
+ 'TestSuite1.test1': [
+ {
+ 'status': 'SUCCESS',
+ 'other_info': 'N/A'
+ }
+ ],
+ 'TestSuite1.test2': [
+ {
+ 'status': 'SUCCESS',
+ 'other_info': 'N/A'
+ }
+ ],
+ 'TestSuite1.test3': [
+ {
+ 'status': 'FAILURE',
+ 'other_info': 'N/A'
+ },
+ {
+ 'status': 'FAILURE',
+ 'other_info': 'N/A'
+ },
+ {
+ 'status': 'FAILURE',
+ 'other_info': 'N/A'
+ }
+ ]
+ }
+ ]
+}
+
+
+_SWARMING_TASK_RESULTS = {
+ 'task_id1': {
+ 'state': 'COMPLETED',
+ 'exit_code': '1',
+ 'tags': [
+ 'priority:25',
+ 'ref_name:abc_tests'
+ ],
+ 'outputs_ref': {
+ 'isolatedserver': _ISOLATED_SERVER,
+ 'namespace': 'default-gzip',
+ 'isolated': 'shard1_isolated'
+ },
+ 'created_ts': '2016-02-10T18:32:06.538220',
+ 'started_ts': '2016-02-10T18:32:09.090550',
+ 'completed_ts': '2016-02-10T18:33:09'
+ },
+ 'task_id2': {
+ 'state': 'TIMED_OUT',
+ 'outputs_ref': None
+ }
+}
+
+
+_EXPECTED_TESTS_STATUS = {
+ 'TestSuite1.test1': {
+ 'total_run': 2,
+ 'SUCCESS': 2
+ },
+ 'TestSuite1.test2': {
+ 'total_run': 4,
+ 'SUCCESS': 2,
+ 'FAILURE': 2
+ },
+ 'TestSuite1.test3': {
+ 'total_run': 6,
+ 'FAILURE': 6
+ }
+}
+
+
+_EXPECTED_CLASSIFIED_TESTS = {
+ 'flaky_tests': ['TestSuite1.test2', 'TestSuite1.test1'],
+ 'reliable_tests': ['TestSuite1.test3']
+}
+
class ProcessBaseSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase):
+
+ def _MockedGetSwarmingTaskResultById(self, task_id, _):
+ return _SWARMING_TASK_RESULTS[task_id]
+
def setUp(self):
super(ProcessBaseSwarmingTaskResultPipelineTest, self).setUp()
self.pipeline = ProcessBaseSwarmingTaskResultPipeline()
@@ -13,6 +146,8 @@ class ProcessBaseSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase):
self.build_number = 121
self.step_name = 'abc_tests on platform'
self.test_name = 'test'
+ self.mock(swarming_util, 'GetSwarmingTaskResultById',
+ self._MockedGetSwarmingTaskResultById)
def testConvertDateTime(self):
fmt = '%Y-%m-%dT%H:%M:%S.%f'
@@ -29,3 +164,70 @@ class ProcessBaseSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase):
def testConvertDateTimefailure(self):
with self.assertRaises(ValueError):
self.pipeline._ConvertDateTime('abc')
+
+ def testCheckTestsRunStatusesNoOutPutJson(self):
+ self.assertEqual(
+ {},
+ ProcessBaseSwarmingTaskResultPipeline._CheckTestsRunStatuses(
+ self.pipeline, None, ()))
+
+ def testCheckTestsRunStatuses(self):
+ tests_statuses = (
+ ProcessSwarmingTaskResultPipeline()._CheckTestsRunStatuses(
+ _SAMPLE_FAILURE_LOG))
+ self.assertEqual(_EXPECTED_TESTS_STATUS, tests_statuses)
+
+ def testMonitorSwarmingTaskTimeOut(self):
+ # Override swarming config settings to force a timeout.
+ override_swarming_settings = {
+ 'task_timeout_hours': -1
+ }
+ self.UpdateUnitTestConfigSettings(
+ 'swarming_settings', override_swarming_settings)
+
+ task = FlakeSwarmingTask.Create(
+ self.master_name, self.builder_name, self.build_number, self.step_name,
+ self.test_name)
+ task.task_id = 'task_id1'
+ task.put()
+
+ analysis = MasterFlakeAnalysis.Create(
+ self.master_name, self.builder_name, self.build_number, self.step_name,
+ self.test_name)
+ analysis.Save()
+
+ pipeline = ProcessFlakeSwarmingTaskResultPipeline()
+ step_name, task_info = pipeline.run(
+ self.master_name, self.builder_name, self.build_number, self.step_name,
+ 'task_id1', self.build_number, self.test_name, 1)
+ self.assertEqual('abc_tests', task_info)
+ self.assertEqual(self.step_name, step_name)
+
+ task = FlakeSwarmingTask.Get(
+ self.master_name, self.builder_name, self.build_number, self.step_name,
+ self.test_name)
+ self.assertEqual(analysis_status.ERROR, task.status)
+ self.assertEqual({}, task.tests_statuses)
+
+ def testMonitorSwarmingTaskNotRunning(self):
+ task = WfSwarmingTask.Create(
+ self.master_name, self.builder_name,
+ self.build_number, self.step_name)
+ task.task_id = 'task_id2'
+ task.put()
+
+ pipeline = ProcessSwarmingTaskResultPipeline()
+ step_name, task_info = pipeline.run(
+ self.master_name, self.builder_name,
+ self.build_number, self.step_name)
+
+ self.assertEqual(self.step_name, step_name)
+ self.assertIsNone(task_info[0])
+ self.assertEqual([], task_info[1])
+
+ task = WfSwarmingTask.Get(
+ self.master_name, self.builder_name, self.build_number, self.step_name)
+
+ self.assertEqual(analysis_status.ERROR, task.status)
+ self.assertEqual({}, task.tests_statuses)
+ self.assertEqual({}, task.classified_tests)

Powered by Google App Engine
This is Rietveld 408576698