| 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')
|
|
|
|
|