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

Side by Side Diff: appengine/findit/waterfall/test/monitor_try_job_pipeline_test.py

Issue 1591003002: [Findit] Modify tryjob pipelines to trigger try jobs for test failure. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Simplify the format for final try-job result for test failures. Created 4 years, 10 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 unified diff | Download patch
OLDNEW
1 # Copyright 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 from testing_utils import testing 5 from testing_utils import testing
6 6
7 from common import buildbucket_client 7 from common import buildbucket_client
8 from model import wf_analysis_status 8 from model import wf_analysis_status
9 from model.wf_try_job import WfTryJob 9 from model.wf_try_job import WfTryJob
10 from waterfall.monitor_try_job_pipeline import MonitorTryJobPipeline 10 from waterfall.monitor_try_job_pipeline import MonitorTryJobPipeline
11 from waterfall.try_job_enums import TryJobType
11 12
12 class MonitorTryJobPipelineTest(testing.AppengineTestCase): 13 class MonitorTryJobPipelineTest(testing.AppengineTestCase):
13 def _Mock_GetTryJobs(self, build_id): 14 def _Mock_GetTryJobs(self, build_id):
14 def Mocked_GetTryJobs(*_): 15 def Mocked_GetTryJobs(*_):
15 data = { 16 data = {
16 '1': { 17 '1': {
17 'build': { 18 'build': {
18 'id': '1', 19 'id': '1',
19 'url': 'url', 20 'url': 'url',
20 'status': 'COMPLETED', 21 'status': 'COMPLETED',
21 'result_details_json': ( 22 'result_details_json': (
22 '{"properties": {"result": [["rev1", "passed"],' 23 '{"properties": {"result": [["rev1", "passed"],'
23 ' ["rev2", "failed"]]}}') 24 ' ["rev2", "failed"]]}}')
24 } 25 }
25 }, 26 },
26 '2': { 27 '2': {
27 'error': { 28 'error': {
28 'reason': 'BUILD_NOT_FOUND', 29 'reason': 'BUILD_NOT_FOUND',
29 'message': 'message', 30 'message': 'message',
30 } 31 }
32 },
33 '3': {
34 'build': {
35 'id': '3',
36 'url': 'url',
37 'status': 'COMPLETED',
38 'result_details_json': (
39 '{"properties": {"result": {"rev1": {"a_test": {"status":'
40 ' "passed", "valid": true}}, "rev2": {"a_test": '
41 '{"status": "failed", "valid": true, "failures": ["test1"'
42 ', "test2"]}}}}}')
43 }
31 } 44 }
32 } 45 }
33 compile_results = [] 46 try_job_results = []
34 build_error = data.get(build_id) 47 build_error = data.get(build_id)
35 if build_error.get('error'): # pragma: no cover 48 if build_error.get('error'): # pragma: no cover
36 compile_results.append(( 49 try_job_results.append((
37 buildbucket_client.BuildbucketError(build_error['error']), None)) 50 buildbucket_client.BuildbucketError(build_error['error']), None))
38 else: 51 else:
39 compile_results.append(( 52 try_job_results.append((
40 None, buildbucket_client.BuildbucketBuild(build_error['build']))) 53 None, buildbucket_client.BuildbucketBuild(build_error['build'])))
41 return compile_results 54 return try_job_results
42 self.mock(buildbucket_client, 'GetTryJobs', Mocked_GetTryJobs) 55 self.mock(buildbucket_client, 'GetTryJobs', Mocked_GetTryJobs)
43 56
44 def testGetTryJobsForCompileSuccess(self): 57 def testGetTryJobsForCompileSuccess(self):
45 master_name = 'm' 58 master_name = 'm'
46 builder_name = 'b' 59 builder_name = 'b'
47 build_number = 1 60 build_number = 1
48 try_job_id = '1' 61 try_job_id = '1'
49 62
50 try_job = WfTryJob.Create(master_name, builder_name, build_number) 63 try_job = WfTryJob.Create(master_name, builder_name, build_number)
51 try_job.compile_results = [ 64 try_job.compile_results = [
52 { 65 {
53 'result': None, 66 'result': None,
54 'url': 'url', 67 'url': 'url',
55 'try_job_id': '1', 68 'try_job_id': '1',
56 } 69 }
57 ] 70 ]
58 try_job.status = wf_analysis_status.ANALYZING 71 try_job.status = wf_analysis_status.ANALYZING
59 try_job.put() 72 try_job.put()
60 self._Mock_GetTryJobs(try_job_id) 73 self._Mock_GetTryJobs(try_job_id)
61 74
62 pipeline = MonitorTryJobPipeline() 75 pipeline = MonitorTryJobPipeline()
63 compile_result = pipeline.run( 76 compile_result = pipeline.run(
64 master_name, builder_name, build_number, try_job_id) 77 master_name, builder_name, build_number, TryJobType.COMPILE,
78 try_job_id)
65 79
66 expected_compile_result = { 80 expected_compile_result = {
67 'result': [ 81 'result': [
68 ['rev1', 'passed'], 82 ['rev1', 'passed'],
69 ['rev2', 'failed'] 83 ['rev2', 'failed']
70 ], 84 ],
71 'url': 'url', 85 'url': 'url',
72 'try_job_id': '1', 86 'try_job_id': '1',
73 } 87 }
74 self.assertEqual(expected_compile_result, compile_result) 88 self.assertEqual(expected_compile_result, compile_result)
75 89
76 try_job = WfTryJob.Get(master_name, builder_name, build_number) 90 try_job = WfTryJob.Get(master_name, builder_name, build_number)
77 self.assertEqual(expected_compile_result, try_job.compile_results[-1]) 91 self.assertEqual(expected_compile_result, try_job.compile_results[-1])
78 self.assertEqual(wf_analysis_status.ANALYZING, try_job.status) 92 self.assertEqual(wf_analysis_status.ANALYZING, try_job.status)
93
94
95 def testGetTryJobsForTestSuccess(self):
96 master_name = 'm'
97 builder_name = 'b'
98 build_number = 1
99 try_job_id = '3'
100
101 try_job = WfTryJob.Create(master_name, builder_name, build_number)
102 try_job.test_results = [
103 {
104 'result': None,
105 'url': 'url',
106 'try_job_id': '3',
107 }
108 ]
109 try_job.status = wf_analysis_status.ANALYZING
110 try_job.put()
111 self._Mock_GetTryJobs(try_job_id)
112
113 pipeline = MonitorTryJobPipeline()
114 test_result = pipeline.run(
115 master_name, builder_name, build_number, TryJobType.TEST,
116 try_job_id)
117
118 expected_test_result = {
119 'result': {
120 'rev1': {
121 'a_test': {
122 'status': 'passed',
123 'valid': True
124 }
125 },
126 'rev2': {
127 'a_test': {
128 'status': 'failed',
129 'valid': True,
130 'failures': ['test1', 'test2']
131 }
132 }
133 },
134 'url': 'url',
135 'try_job_id': '3',
136 }
137 self.assertEqual(expected_test_result, test_result)
138
139 try_job = WfTryJob.Get(master_name, builder_name, build_number)
140 self.assertEqual(expected_test_result, try_job.test_results[-1])
141 self.assertEqual(wf_analysis_status.ANALYZING, try_job.status)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698