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

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

Issue 2187763004: [Findit] Refactor Findit pipeline. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: rebase Created 4 years, 4 months 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/try_job_util_test.py
diff --git a/appengine/findit/waterfall/test/try_job_util_test.py b/appengine/findit/waterfall/test/try_job_util_test.py
index 8e8a458eb17880177f9471675c31b6dfe8327bdd..896d4d04378956def69e2624484cec1bb8c4c859 100644
--- a/appengine/findit/waterfall/test/try_job_util_test.py
+++ b/appengine/findit/waterfall/test/try_job_util_test.py
@@ -13,24 +13,18 @@ from model.wf_failure_group import WfFailureGroup
from model.wf_try_job import WfTryJob
from waterfall import try_job_util
from waterfall.test import wf_testcase
-from waterfall.try_job_type import TryJobType
-class _MockRootPipeline(object):
- STARTED = False
-
- def __init__(self, *_):
- pass
-
- def start(self, *_, **__):
- _MockRootPipeline.STARTED = True
-
- @property
- def pipeline_status_path(self):
- return 'path'
+class TryJobUtilTest(wf_testcase.WaterfallTestCase):
+ def testShouldBailOutforOutdatedBuild(self):
+ yesterday = datetime.utcnow() - timedelta(days=1)
+ build = WfBuild.Create('m', 'b', 1)
+ build.start_time = yesterday
+ self.assertTrue(try_job_util._ShouldBailOutForOutdatedBuild(build))
-class TryJobUtilTest(wf_testcase.WaterfallTestCase):
+ build.start_time = yesterday + timedelta(hours=1)
+ self.assertFalse(try_job_util._ShouldBailOutForOutdatedBuild(build))
def testNotNeedANewTryJobIfBuilderIsNotSupportedYet(self):
master_name = 'master3'
@@ -65,19 +59,14 @@ class TryJobUtilTest(wf_testcase.WaterfallTestCase):
'blame_list': ['223-1', '223-2', '223-3'],
'chromium_revision': '223-3'
}
- }
+ },
+ 'failure_type': failure_type.COMPILE
}
- self.mock(
- try_job_util.swarming_tasks_to_try_job_pipeline,
- 'SwarmingTasksToTryJobPipeline', _MockRootPipeline)
- _MockRootPipeline.STARTED = False
-
- failure_result_map = try_job_util.ScheduleTryJobIfNeeded(
- failure_info, None, None)
+ need_try_job = try_job_util.NeedANewTryJob(
+ master_name, builder_name, build_number, failure_info, None, None)
- self.assertFalse(_MockRootPipeline.STARTED)
- self.assertEqual({}, failure_result_map)
+ self.assertFalse(need_try_job)
def testBailOutForTestTryJob(self):
master_name = 'master2'
@@ -100,10 +89,10 @@ class TryJobUtilTest(wf_testcase.WaterfallTestCase):
try_job_util, '_ShouldBailOutForOutdatedBuild',
_MockShouldBailOutForOutdatedBuild)
- failure_result_map = try_job_util.ScheduleTryJobIfNeeded(
- failure_info, None, None)
+ need_try_job = try_job_util.NeedANewTryJob(
+ master_name, builder_name, build_number, failure_info, None, None)
- self.assertEqual({}, failure_result_map)
+ self.assertFalse(need_try_job)
def testBailOutForTryJobWithOutdatedTimestamp(self):
master_name = 'master1'
@@ -121,6 +110,7 @@ class TryJobUtilTest(wf_testcase.WaterfallTestCase):
'last_pass': 220
}
},
+ 'failure_type': failure_type.COMPILE
}
yesterday = datetime.utcnow() - timedelta(days=1)
@@ -128,11 +118,6 @@ class TryJobUtilTest(wf_testcase.WaterfallTestCase):
build.start_time = yesterday
build.put()
- self.mock(
- try_job_util.swarming_tasks_to_try_job_pipeline,
- 'SwarmingTasksToTryJobPipeline', _MockRootPipeline)
- _MockRootPipeline.STARTED = False
-
def _MockShouldBailOutForOutdatedBuild(*_):
return True
@@ -140,52 +125,10 @@ class TryJobUtilTest(wf_testcase.WaterfallTestCase):
try_job_util, '_ShouldBailOutForOutdatedBuild',
_MockShouldBailOutForOutdatedBuild)
- failure_result_map = try_job_util.ScheduleTryJobIfNeeded(
- failure_info, None, None, False)
-
- self.assertFalse(_MockRootPipeline.STARTED)
- self.assertEqual({}, failure_result_map)
-
- def testForceTryJob(self):
- master_name = 'm'
- builder_name = 'b'
- build_number = 223
- WfAnalysis.Create(master_name, builder_name, build_number).put()
- failure_info = {
- 'master_name': master_name,
- 'builder_name': builder_name,
- 'build_number': build_number,
- 'failed_steps': {
- 'compile': {
- 'current_failure': 223,
- 'first_failure': 223,
- 'last_pass': 222
- }
- },
- 'builds': {
- '222': {
- 'blame_list': ['222-1'],
- 'chromium_revision': '222-1'
- },
- '223': {
- 'blame_list': ['223-1', '223-2', '223-3'],
- 'chromium_revision': '223-3'
- }
- },
- 'failure_type': failure_type.COMPILE
- }
-
- self.mock(
- try_job_util.swarming_tasks_to_try_job_pipeline,
- 'SwarmingTasksToTryJobPipeline', _MockRootPipeline)
- _MockRootPipeline.STARTED = False
-
- try_job_util.ScheduleTryJobIfNeeded(failure_info, None, None, True)
+ need_try_job = try_job_util.NeedANewTryJob(
+ master_name, builder_name, build_number, failure_info, None, None)
- try_job = WfTryJob.Get(master_name, builder_name, build_number)
-
- self.assertTrue(_MockRootPipeline.STARTED)
- self.assertIsNotNone(try_job)
+ self.assertFalse(need_try_job)
def testNotNeedANewTryJobIfNotFirstTimeFailure(self):
master_name = 'm'
@@ -224,21 +167,18 @@ class TryJobUtilTest(wf_testcase.WaterfallTestCase):
'failure_type': failure_type.COMPILE
}
- self.mock(
- try_job_util.swarming_tasks_to_try_job_pipeline,
- 'SwarmingTasksToTryJobPipeline', _MockRootPipeline)
- _MockRootPipeline.STARTED = False
+ WfAnalysis.Create(master_name, builder_name, build_number).put()
def _MockShouldBailOutForOutdatedBuild(*_):
return False
-
self.mock(
try_job_util, '_ShouldBailOutForOutdatedBuild',
_MockShouldBailOutForOutdatedBuild)
- try_job_util.ScheduleTryJobIfNeeded(failure_info, None, None)
+ need_try_job = try_job_util.NeedANewTryJob(
+ master_name, builder_name, build_number, failure_info, None, None)
- self.assertFalse(_MockRootPipeline.STARTED)
+ self.assertFalse(need_try_job)
def testBlameListsIntersect(self):
self.assertFalse(try_job_util._BlameListsIntersection(['0'], ['1']))
@@ -863,97 +803,29 @@ class TryJobUtilTest(wf_testcase.WaterfallTestCase):
self.assertTrue(
WfFailureGroup.Get(master_name_2, builder_name, build_number))
- def testNeedANewTryJobForFirstFailureInGroup(self):
- master_name = 'm'
- builder_name = 'b'
- build_number = 223
- builds = {
- str(build_number): {
- 'blame_list': ['a']
- }
- }
- failed_steps = {
- 'compile': {
- 'current_failure': 223,
- 'first_failure': 223,
- 'last_pass': 220
- }
- }
- signals = {
- 'compile': {
- 'failed_output_nodes': [
- 'abc.obj'
- ]
- }
- }
-
- # Run _NeedANewTryJob with signals that have certain failed output nodes.
- # Observe a need for a new try job.
- WfAnalysis.Create(master_name, builder_name, build_number).put()
- need_try_job, _, _, _ = try_job_util._NeedANewTryJob(
- master_name, builder_name, build_number, failure_type.COMPILE,
- failed_steps, {}, builds, signals, None)
- self.assertTrue(need_try_job)
-
- def testNotNeedANewTryJobForSecondFailureInGroup(self):
- master_name = 'm'
- master_name_2 = 'm2'
- builder_name = 'b'
- build_number = 223
- builds = {
- str(build_number): {
- 'blame_list': ['a']
- }
- }
- failed_steps = {
- 'compile': {
- 'current_failure': 223,
- 'first_failure': 223,
- 'last_pass': 220
- }
- }
-
- signals = {
- 'compile': {
- 'failed_output_nodes': [
- 'abc.obj'
- ]
- }
- }
-
- # Run _NeedANewTryJob with signals that have certain failed output nodes.
- # This should create a new wf_failure_group.
- WfAnalysis.Create(master_name, builder_name, build_number).put()
- try_job_util._NeedANewTryJob(
- master_name, builder_name, build_number, failure_type.COMPILE,
- failed_steps, {}, builds, signals, None)
- self.assertIsNotNone(
- WfFailureGroup.Get(master_name, builder_name, build_number))
-
- # Run _NeedANewTryJob with signals that have the same failed output nodes.
- # Observe no need for a new try job.
- WfAnalysis.Create(master_name_2, builder_name, build_number).put()
- need_try_job, _, _, _ = try_job_util._NeedANewTryJob(
- master_name_2, builder_name, build_number, failure_type.COMPILE,
- failed_steps, {}, builds, signals, None)
- self.assertFalse(need_try_job)
-
def testNotNeedANewTryJobIfOneWithResultExists(self):
master_name = 'm'
builder_name = 'b'
build_number = 223
- WfAnalysis.Create(master_name, builder_name, build_number).put()
- builds = {
- str(build_number): {
- 'blame_list': ['a']
- }
- }
- failed_steps = {
- 'compile': {
- 'current_failure': 223,
- 'first_failure': 223,
- 'last_pass': 220
- }
+ failure_info = {
+ 'failed_steps': {
+ 'compile': {
+ 'current_failure': 223,
+ 'first_failure': 223,
+ 'last_pass': 220
+ }
+ },
+ 'builds': {
+ '222': {
+ 'blame_list': ['222-1'],
+ 'chromium_revision': '222-1'
+ },
+ '223': {
+ 'blame_list': ['223-1', '223-2', '223-3'],
+ 'chromium_revision': '223-3'
+ }
+ },
+ 'failure_type': failure_type.COMPILE
}
try_job = WfTryJob.Create(master_name, builder_name, build_number)
@@ -961,196 +833,164 @@ class TryJobUtilTest(wf_testcase.WaterfallTestCase):
try_job.status = analysis_status.COMPLETED
try_job.put()
- failure_result_map = {}
- need_try_job, last_pass, try_job_type, targeted_tests = (
- try_job_util._NeedANewTryJob(master_name, builder_name, build_number,
- failure_type.COMPILE, failed_steps,
- failure_result_map, builds, None, None))
+ WfAnalysis.Create(master_name, builder_name, build_number).put()
- expected_failure_result_map = {
- 'compile': 'm/b/223'
- }
+ def _MockShouldBailOutForOutdatedBuild(*_):
+ return False
+ self.mock(
+ try_job_util, '_ShouldBailOutForOutdatedBuild',
+ _MockShouldBailOutForOutdatedBuild)
+
+ need_try_job = try_job_util.NeedANewTryJob(
+ master_name, builder_name, build_number, failure_info, None, None)
self.assertFalse(need_try_job)
- self.assertEqual(expected_failure_result_map, failure_result_map)
- self.assertEqual(220, last_pass)
- self.assertEqual(TryJobType.COMPILE, try_job_type)
- self.assertIsNone(targeted_tests)
def testNeedANewTryJobIfExistingOneHasError(self):
master_name = 'm'
builder_name = 'b'
build_number = 223
- WfAnalysis.Create(master_name, builder_name, build_number).put()
- builds = {
- str(build_number): {
- 'blame_list': ['a']
- }
- }
- failed_steps = {
- 'compile': {
- 'current_failure': 223,
- 'first_failure': 223,
- 'last_pass': 220
- }
+ failure_info = {
+ 'failed_steps': {
+ 'compile': {
+ 'current_failure': 223,
+ 'first_failure': 223,
+ 'last_pass': 220
+ }
+ },
+ 'builds': {
+ '222': {
+ 'blame_list': ['222-1'],
+ 'chromium_revision': '222-1'
+ },
+ '223': {
+ 'blame_list': ['223-1', '223-2', '223-3'],
+ 'chromium_revision': '223-3'
+ }
+ },
+ 'failure_type': failure_type.COMPILE
}
try_job = WfTryJob.Create(master_name, builder_name, build_number)
try_job.status = analysis_status.ERROR
try_job.put()
- failure_result_map = {}
- need_try_job, last_pass, try_job_type, targeted_tests = (
- try_job_util._NeedANewTryJob(master_name, builder_name, build_number,
- failure_type.COMPILE, failed_steps,
- failure_result_map, builds, None, None))
-
- expected_failure_result_map = {
- 'compile': 'm/b/223'
- }
- self.assertTrue(need_try_job)
- self.assertEqual(expected_failure_result_map, failure_result_map)
- self.assertEqual(220, last_pass)
- self.assertEqual(TryJobType.COMPILE, try_job_type)
- self.assertIsNone(targeted_tests)
-
- def testNotNeedANewTryJobIfLastPassCannotDetermine(self):
- master_name = 'm'
- builder_name = 'b'
- build_number = 223
WfAnalysis.Create(master_name, builder_name, build_number).put()
- builds = {
- str(build_number): {
- 'blame_list': ['a']
- }
- }
- failed_steps = {
- 'compile': {
- 'current_failure': 223,
- 'first_failure': 223
- }
- }
- try_job = WfTryJob.Create(master_name, builder_name, build_number)
- try_job.status = analysis_status.ERROR
- try_job.put()
+ def _MockShouldBailOutForOutdatedBuild(*_):
+ return False
+ self.mock(
+ try_job_util, '_ShouldBailOutForOutdatedBuild',
+ _MockShouldBailOutForOutdatedBuild)
- failure_result_map = {}
- need_try_job, last_pass, try_job_type, targeted_tests = (
- try_job_util._NeedANewTryJob(master_name, builder_name, build_number,
- failure_type.COMPILE, failed_steps,
- failure_result_map, builds, None, None))
+ need_try_job = try_job_util.NeedANewTryJob(
+ master_name, builder_name, build_number, failure_info, None, None)
- self.assertFalse(need_try_job)
- self.assertEqual({}, failure_result_map)
- self.assertIsNone(last_pass)
- self.assertEqual(TryJobType.COMPILE, try_job_type)
- self.assertIsNone(targeted_tests)
+ self.assertTrue(need_try_job)
- def testNeedANewTryJobIfTestFailureNonSwarming(self):
+ def testNotNeedANewTryJobIfNoNewFailure(self):
master_name = 'm'
builder_name = 'b'
build_number = 223
- WfAnalysis.Create(master_name, builder_name, build_number).put()
- builds = {
- str(build_number): {
- 'blame_list': ['a']
- }
+ failure_info = {
+ 'failed_steps': {
+ 'a': {
+ 'current_failure': 223,
+ 'first_failure': 222,
+ 'last_pass': 221,
+ 'tests': {
+ 'a.t2': {
+ 'current_failure': 223,
+ 'first_failure': 222,
+ 'last_pass': 221
+ }
+ }
+ }
+ },
+ 'failure_type': failure_type.TEST
}
- failed_steps = {
+
+ analysis = WfAnalysis.Create(master_name, builder_name, build_number)
+ analysis.failure_result_map = {
'a': {
- 'current_failure': 223,
- 'first_failure': 223,
- 'last_pass': 222
- },
- 'b': {
- 'current_failure': 223,
- 'first_failure': 222,
- 'last_pass': 221
+ 'a.t2': 'm/b/222'
}
}
+ analysis.put()
- failure_result_map = {}
- need_try_job, last_pass, try_job_type, targeted_tests = (
- try_job_util._NeedANewTryJob(master_name, builder_name, build_number,
- failure_type.TEST, failed_steps,
- failure_result_map, builds, None, None))
-
- expected_failure_result_map = {
- 'a': 'm/b/223',
- 'b': 'm/b/222'
- }
+ def _MockShouldBailOutForOutdatedBuild(*_):
+ return False
+ self.mock(
+ try_job_util, '_ShouldBailOutForOutdatedBuild',
+ _MockShouldBailOutForOutdatedBuild)
- expected_targeted_tests = {
- 'a': []
- }
+ need_try_job = try_job_util.NeedANewTryJob(
+ master_name, builder_name, build_number, failure_info, None, None)
- self.assertTrue(need_try_job)
- self.assertEqual(expected_failure_result_map, failure_result_map)
- self.assertEqual(222, last_pass)
- self.assertEqual('test', try_job_type)
- self.assertEqual(expected_targeted_tests, targeted_tests)
+ self.assertFalse(need_try_job)
def testNeedANewTryJobIfTestFailureSwarming(self):
master_name = 'm'
builder_name = 'b'
build_number = 223
- WfAnalysis.Create(master_name, builder_name, build_number).put()
- builds = {
- str(build_number): {
- 'blame_list': ['a']
- }
- }
- failed_steps = {
- 'a': {
- 'current_failure': 223,
- 'first_failure': 222,
- 'last_pass': 221,
- 'tests': {
- 'a.PRE_t1': {
- 'current_failure': 223,
- 'first_failure': 223,
- 'last_pass': 221,
- 'base_test_name': 'a.t1'
- },
- 'a.t2': {
- 'current_failure': 223,
- 'first_failure': 222,
- 'last_pass': 221
- },
- 'a.t3': {
- 'current_failure': 223,
- 'first_failure': 223,
- 'last_pass': 222
+ failure_info = {
+ 'failed_steps': {
+ 'a': {
+ 'current_failure': 223,
+ 'first_failure': 222,
+ 'last_pass': 221,
+ 'tests': {
+ 'a.PRE_t1': {
+ 'current_failure': 223,
+ 'first_failure': 223,
+ 'last_pass': 221,
+ 'base_test_name': 'a.t1'
+ },
+ 'a.t2': {
+ 'current_failure': 223,
+ 'first_failure': 222,
+ 'last_pass': 221
+ },
+ 'a.t3': {
+ 'current_failure': 223,
+ 'first_failure': 223,
+ 'last_pass': 222
+ }
+ }
+ },
+ 'b': {
+ 'current_failure': 223,
+ 'first_failure': 222,
+ 'last_pass': 221,
+ 'tests': {
+ 'b.t1': {
+ 'current_failure': 223,
+ 'first_failure': 222,
+ 'last_pass': 221
+ },
+ 'b.t2': {
+ 'current_failure': 223,
+ 'first_failure': 222,
+ 'last_pass': 221
+ }
}
}
},
- 'b': {
- 'current_failure': 223,
- 'first_failure': 222,
- 'last_pass': 221,
- 'tests': {
- 'b.t1': {
- 'current_failure': 223,
- 'first_failure': 222,
- 'last_pass': 221
- },
- 'b.t2': {
- 'current_failure': 223,
- 'first_failure': 222,
- 'last_pass': 221
- }
+ 'builds': {
+ '222': {
+ 'blame_list': ['222-1'],
+ 'chromium_revision': '222-1'
+ },
+ '223': {
+ 'blame_list': ['223-1', '223-2', '223-3'],
+ 'chromium_revision': '223-3'
}
- }
+ },
+ 'failure_type': failure_type.TEST
}
- failure_result_map = {}
- need_try_job, last_pass, try_job_type, targeted_tests = (
- try_job_util._NeedANewTryJob(master_name, builder_name, build_number,
- failure_type.TEST, failed_steps,
- failure_result_map, builds, None, None))
-
- expected_failure_result_map = {
+ analysis = WfAnalysis.Create(master_name, builder_name, build_number)
+ analysis.failure_result_map = {
'a': {
'a.PRE_t1': 'm/b/223',
'a.t2': 'm/b/222',
@@ -1159,18 +999,20 @@ class TryJobUtilTest(wf_testcase.WaterfallTestCase):
'b': {
'b.t1': 'm/b/222',
'b.t2': 'm/b/222'
- },
+ }
}
+ analysis.put()
- expected_targeted_tests = {
- 'a': ['a.t1', 'a.t3']
- }
+ def _MockShouldBailOutForOutdatedBuild(*_):
+ return False
+ self.mock(
+ try_job_util, '_ShouldBailOutForOutdatedBuild',
+ _MockShouldBailOutForOutdatedBuild)
+
+ need_try_job = try_job_util.NeedANewTryJob(
+ master_name, builder_name, build_number, failure_info, None, None)
self.assertTrue(need_try_job)
- self.assertEqual(expected_failure_result_map, failure_result_map)
- self.assertEqual(221, last_pass)
- self.assertEqual('test', try_job_type)
- self.assertEqual(expected_targeted_tests, targeted_tests)
def testNeedANewTryJob(self):
master_name = 'm'
@@ -1200,73 +1042,138 @@ class TryJobUtilTest(wf_testcase.WaterfallTestCase):
'failure_type': failure_type.COMPILE
}
- self.mock(
- try_job_util.swarming_tasks_to_try_job_pipeline,
- 'SwarmingTasksToTryJobPipeline', _MockRootPipeline)
- _MockRootPipeline.STARTED = False
+ analysis = WfAnalysis.Create(master_name, builder_name, build_number)
+ analysis.failure_result_map = {
+ 'compile': 'm/b/223'
+ }
+ analysis.put()
def _MockShouldBailOutForOutdatedBuild(*_):
return False
-
self.mock(
try_job_util, '_ShouldBailOutForOutdatedBuild',
_MockShouldBailOutForOutdatedBuild)
- try_job_util.ScheduleTryJobIfNeeded(failure_info, None, None)
+ need_try_job = try_job_util.NeedANewTryJob(
+ master_name, builder_name, build_number, failure_info, None, None)
- try_job = WfTryJob.Get(master_name, builder_name, build_number)
+ self.assertTrue(need_try_job)
- self.assertTrue(_MockRootPipeline.STARTED)
- self.assertIsNotNone(try_job)
+ def testNotNeedANewTryJobForOtherType(self):
+ master_name = 'm'
+ builder_name = 'b'
+ build_number = 223
+ failure_info = {
+ 'master_name': master_name,
+ 'builder_name': builder_name,
+ 'build_number': build_number,
+ 'failed_steps': {},
+ 'builds': {
+ '222': {
+ 'blame_list': ['222-1'],
+ 'chromium_revision': '222-1'
+ },
+ '223': {
+ 'blame_list': ['223-1', '223-2', '223-3'],
+ 'chromium_revision': '223-3'
+ }
+ },
+ 'failure_type': failure_type.UNKNOWN
+ }
- def testUseFailedOutputNodesFromSignals(self):
- signals = {
- 'compile': {
- 'failed_targets': [
- {'target': 'a.exe'},
- {'source': 'b.cc', 'target': 'b.o'},
- ],
- 'failed_output_nodes': ['a', 'b'],
- }
+ def _MockShouldBailOutForOutdatedBuild(*_):
+ return False
+ self.mock(
+ try_job_util, '_ShouldBailOutForOutdatedBuild',
+ _MockShouldBailOutForOutdatedBuild)
+
+ need_try_job = try_job_util.NeedANewTryJob(
+ master_name, builder_name, build_number, failure_info, None, None)
+
+ self.assertFalse(need_try_job)
+
+ def testNotNeedANewTryJobForCompileTypeNoFailureInfo(self):
+ master_name = 'm'
+ builder_name = 'b'
+ build_number = 223
+ failure_info = {
+ 'master_name': master_name,
+ 'builder_name': builder_name,
+ 'build_number': build_number,
+ 'failed_steps': {},
+ 'builds': {
+ '222': {
+ 'blame_list': ['222-1'],
+ 'chromium_revision': '222-1'
+ },
+ '223': {
+ 'blame_list': ['223-1', '223-2', '223-3'],
+ 'chromium_revision': '223-3'
+ }
+ },
+ 'failure_type': failure_type.COMPILE
}
- self.assertEqual(
- try_job_util._GetFailedTargetsFromSignals(signals, 'm', 'b'),
- ['a', 'b'])
+ def _MockShouldBailOutForOutdatedBuild(*_):
+ return False
+ self.mock(
+ try_job_util, '_ShouldBailOutForOutdatedBuild',
+ _MockShouldBailOutForOutdatedBuild)
- def testGetFailedTargetsFromSignals(self):
- self.assertEqual(
- try_job_util._GetFailedTargetsFromSignals({}, 'm', 'b'), [])
+ need_try_job = try_job_util.NeedANewTryJob(
+ master_name, builder_name, build_number, failure_info, None, None)
- self.assertEqual(
- try_job_util._GetFailedTargetsFromSignals({'compile': {}}, 'm', 'b'),
- [])
+ self.assertFalse(need_try_job)
- signals = {
- 'compile': {
- 'failed_targets': [
- {'target': 'a.exe'},
- {'source': 'b.cc',
- 'target': 'b.o'}]
- }
+ def testForceTryJob(self):
+ master_name = 'm'
+ builder_name = 'b'
+ build_number = 223
+ failure_info = {
+ 'failed_steps': {
+ 'a': {
+ 'current_failure': 223,
+ 'first_failure': 223,
+ 'last_pass': 222,
+ 'tests': {
+ 'a.t2': {
+ 'current_failure': 223,
+ 'first_failure': 223,
+ 'last_pass': 222
+ }
+ }
+ }
+ },
+ 'builds': {
+ '222': {
+ 'blame_list': ['222-1'],
+ 'chromium_revision': '222-1'
+ },
+ '223': {
+ 'blame_list': ['223-1', '223-2', '223-3'],
+ 'chromium_revision': '223-3'
+ }
+ },
+ 'failure_type': failure_type.TEST
}
- self.assertEqual(
- try_job_util._GetFailedTargetsFromSignals(signals, 'm', 'b'), ['a.exe'])
+ try_job = WfTryJob.Create(master_name, builder_name, build_number)
+ try_job.compile_results = [['rev', 'failed']]
+ try_job.status = analysis_status.COMPLETED
+ try_job.put()
- def testUseObjectFilesAsFailedTargetIfStrictRegexUsed(self):
- signals = {
- 'compile': {
- 'failed_targets': [
- {'source': 'b.cc', 'target': 'b.o'},
- ]
+ analysis = WfAnalysis.Create(master_name, builder_name, build_number)
+ analysis.failure_result_map = {
+ 'a': {
+ 'a.t2': 'm/b/223'
}
}
+ analysis.put()
- self.assertEqual(
- try_job_util._GetFailedTargetsFromSignals(
- signals, 'master1', 'builder1'),
- ['b.o'])
+ need_try_job = try_job_util.NeedANewTryJob(
+ master_name, builder_name, build_number, failure_info, None, None, True)
+
+ self.assertTrue(need_try_job)
def testGetSuspectedCLsWithFailuresNoHeuristicResult(self):
heuristic_result = None
@@ -1342,64 +1249,51 @@ class TryJobUtilTest(wf_testcase.WaterfallTestCase):
expected_suspected_revisions,
sorted(try_job_util.GetSuspectedCLsWithFailures(heuristic_result)))
- def testGetSuspectsFromHeuristicResultForCompile(self):
- heuristic_result = {
- 'failures': [
- {
- 'step_name': 'compile',
- 'suspected_cls': [
- {
- 'revision': 'r1',
- },
- {
- 'revision': 'r2',
- },
- ],
- },
- ]
+ def testUseFailedOutputNodesFromSignals(self):
+ signals = {
+ 'compile': {
+ 'failed_targets': [
+ {'target': 'a.exe'},
+ {'source': 'b.cc', 'target': 'b.o'},
+ ],
+ 'failed_output_nodes': ['a', 'b'],
+ }
}
- expected_suspected_revisions = ['r1', 'r2']
+
self.assertEqual(
- expected_suspected_revisions,
- try_job_util._GetSuspectsFromHeuristicResult(heuristic_result))
+ try_job_util.GetFailedTargetsFromSignals(signals, 'm', 'b'),
+ ['a', 'b'])
- def testGetSuspectsFromHeuristicResultForTest(self):
- heuristic_result = {
- 'failures': [
- {
- 'step_name': 'step1',
- 'suspected_cls': [
- {
- 'revision': 'r1',
- },
- {
- 'revision': 'r2',
- },
- ],
- },
- {
- 'step_name': 'step2',
- 'suspected_cls': [
- {
- 'revision': 'r1',
- },
- {
- 'revision': 'r3',
- },
- ],
- },
- ]
+ def testGetFailedTargetsFromSignals(self):
+ self.assertEqual(
+ try_job_util.GetFailedTargetsFromSignals({}, 'm', 'b'), [])
+
+ self.assertEqual(
+ try_job_util.GetFailedTargetsFromSignals({'compile': {}}, 'm', 'b'),
+ [])
+
+ signals = {
+ 'compile': {
+ 'failed_targets': [
+ {'target': 'a.exe'},
+ {'source': 'b.cc',
+ 'target': 'b.o'}]
+ }
}
- expected_suspected_revisions = ['r1', 'r2', 'r3']
+
self.assertEqual(
- expected_suspected_revisions,
- try_job_util._GetSuspectsFromHeuristicResult(heuristic_result))
+ try_job_util.GetFailedTargetsFromSignals(signals, 'm', 'b'), ['a.exe'])
- def testShouldBailOutforOutdatedBuild(self):
- yesterday = datetime.utcnow() - timedelta(days=1)
- build = WfBuild.Create('m', 'b', 1)
- build.start_time = yesterday
- self.assertTrue(try_job_util._ShouldBailOutForOutdatedBuild(build))
+ def testUseObjectFilesAsFailedTargetIfStrictRegexUsed(self):
+ signals = {
+ 'compile': {
+ 'failed_targets': [
+ {'source': 'b.cc', 'target': 'b.o'},
+ ]
+ }
+ }
- build.start_time = yesterday + timedelta(hours=1)
- self.assertFalse(try_job_util._ShouldBailOutForOutdatedBuild(build))
+ self.assertEqual(
+ try_job_util.GetFailedTargetsFromSignals(
+ signals, 'master1', 'builder1'),
+ ['b.o'])
« no previous file with comments | « appengine/findit/waterfall/test/try_job_pipeline_test.py ('k') | appengine/findit/waterfall/try_job_pipeline.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698