Index: appengine/findit/waterfall/test/build_failure_analysis_pipelines_test.py |
diff --git a/appengine/findit/waterfall/test/build_failure_analysis_pipelines_test.py b/appengine/findit/waterfall/test/build_failure_analysis_pipelines_test.py |
index b8e26621b4a43326887c62fe223f047530ad565a..6b52333ada5c894619f5fb4c4fb564671e4d6f98 100644 |
--- a/appengine/findit/waterfall/test/build_failure_analysis_pipelines_test.py |
+++ b/appengine/findit/waterfall/test/build_failure_analysis_pipelines_test.py |
@@ -17,14 +17,14 @@ from waterfall import lock_util |
class BuildFailureAnalysisPipelinesTest(testing.AppengineTestCase): |
app_module = handlers._APP |
- def _CreateAndSaveBuildAnanlysis( |
+ def _CreateAndSaveBuildAnalysis( |
self, master_name, builder_name, build_number, status): |
analysis = BuildAnalysis.CreateBuildAnalysis( |
master_name, builder_name, build_number) |
analysis.status = status |
analysis.put() |
- def testAnanlysIsNeededWhenBuildWasNeverAnalyzed(self): |
+ def testAnalysisIsNeededWhenBuildWasNeverAnalyzed(self): |
master_name = 'm' |
builder_name = 'b 1' |
build_number = 123 |
@@ -38,7 +38,7 @@ class BuildFailureAnalysisPipelinesTest(testing.AppengineTestCase): |
master_name = 'm' |
builder_name = 'b 1' |
build_number = 123 |
- self._CreateAndSaveBuildAnanlysis(master_name, builder_name, build_number, |
+ self._CreateAndSaveBuildAnalysis(master_name, builder_name, build_number, |
BuildAnalysisStatus.ANALYZED) |
need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis( |
@@ -46,31 +46,74 @@ class BuildFailureAnalysisPipelinesTest(testing.AppengineTestCase): |
self.assertFalse(need_analysis) |
- def testNewAnanlysIsNeededWhenForced(self): |
+ def testNewAnalysisIsNeededWhenForced(self): |
master_name = 'm' |
builder_name = 'b 1' |
build_number = 123 |
- self._CreateAndSaveBuildAnanlysis(master_name, builder_name, build_number, |
- BuildAnalysisStatus.ANALYZED) |
+ self._CreateAndSaveBuildAnalysis( |
+ master_name, builder_name, build_number, BuildAnalysisStatus.ANALYZED) |
need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis( |
master_name, builder_name, build_number, True) |
self.assertTrue(need_analysis) |
+ def _MockChangeLog( |
+ self, urlfetch, user_name, revision, commit_position, file_path): |
+ url = ('https://chromium.googlesource.com/chromium/src/+/%s?format=json' |
+ % revision) |
+ |
+ COMMIT_LOG_TEMPLATE = """)]}' |
+ { |
+ "commit": "REVISION", |
+ "tree": "tree_rev", |
+ "parents": [ |
+ "revX" |
+ ], |
+ "author": { |
+ "name": "USER_NAME@chromium.org", |
+ "email": "USER_NAME@chromium.org", |
+ "time": "Wed Jun 11 19:35:32 2014" |
+ }, |
+ "committer": { |
+ "name": "USER_NAME@chromium.org", |
+ "email": "USER_NAME@chromium.org", |
+ "time": "Wed Jun 11 19:35:32 2014" |
+ }, |
+ "message": |
+ "git-svn-id: svn://svn.chromium.org/chromium/src@COMMIT_POSITION bla", |
+ "tree_diff": [ |
+ { |
+ "type": "modify", |
+ "old_id": "idX", |
+ "old_mode": 33188, |
+ "old_path": "FILE_PATH", |
+ "new_id": "idY", |
+ "new_mode": 33188, |
+ "new_path": "FILE_PATH" |
+ } |
+ ] |
+ } |
+ """ |
+ commit_log = COMMIT_LOG_TEMPLATE.replace( |
+ 'REVISION', revision).replace('USER_NAME', user_name).replace( |
+ 'COMMIT_POSITION', str(commit_position)).replace('FILE_PATH', file_path) |
+ urlfetch.register_handler(url, commit_log) |
+ |
+ |
def testSuccessfulAnalysisOfBuildFailure(self): |
master_name = 'm' |
builder_name = 'b' |
- build_number = 123 |
+ build_number = 124 |
def _WaitUntilDownloadAllowed(*_): |
return True |
self.mock(lock_util, 'WaitUntilDownloadAllowed', _WaitUntilDownloadAllowed) |
- # Mock build data in urlfetch. |
with self.mock_urlfetch() as urlfetch: |
- for i in range(3): |
+ # Mock build data. |
+ for i in range(2): |
build_url = buildbot.CreateBuildUrl( |
master_name, builder_name, build_number - i, json_api=True) |
file_name = os.path.join(os.path.dirname(__file__), 'data', |
@@ -78,6 +121,18 @@ class BuildFailureAnalysisPipelinesTest(testing.AppengineTestCase): |
with open(file_name, 'r') as f: |
urlfetch.register_handler(build_url, f.read()) |
+ # Mock step log. |
+ step_log_url = buildbot.CreateStdioLogUrl( |
+ master_name, builder_name, build_number, 'a') |
+ urlfetch.register_handler( |
+ step_log_url, 'error in file a/b/x.cc:89 ...') |
+ |
+ # Mock change logs. |
+ self._MockChangeLog(urlfetch, 'user1', 'some_git_hash', 8888, 'a/b/x.cc') |
+ self._MockChangeLog( |
+ urlfetch, 'user1', '64c72819e898e952103b63eabc12772f9640af07', |
+ 8887, 'd/e/y.cc') |
+ |
build_failure_analysis_pipelines.ScheduleAnalysisIfNeeded( |
master_name, builder_name, build_number, False, 'default') |