| OLD | NEW |
| (Empty) | |
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. |
| 4 |
| 5 import datetime |
| 6 |
| 7 from common import time_util |
| 8 from common.waterfall import failure_type |
| 9 from model import analysis_approach_type |
| 10 from model import suspected_cl_status |
| 11 from model.base_build_model import BaseBuildModel |
| 12 from model.wf_suspected_cl import WfSuspectedCL |
| 13 from waterfall import suspected_cl_util |
| 14 from waterfall.test import wf_testcase |
| 15 |
| 16 |
| 17 class SuspectedCLUtilTest(wf_testcase.WaterfallTestCase): |
| 18 |
| 19 def testCreateWfSuspectedCL(self): |
| 20 approach = analysis_approach_type.HEURISTIC |
| 21 master_name = 'm' |
| 22 builder_name = 'b' |
| 23 build_number = 123 |
| 24 compile_failure_type = failure_type.COMPILE |
| 25 repo_name = 'chromium' |
| 26 revision = 'r1' |
| 27 commit_position = 1 |
| 28 failures = {'compile': []} |
| 29 top_score = 5 |
| 30 |
| 31 mocked_utcnow = datetime.datetime(2016, 10, 4, 0, 0, 0) |
| 32 self.MockUTCNow(mocked_utcnow) |
| 33 |
| 34 self.assertIsNone(WfSuspectedCL.Get(repo_name, revision)) |
| 35 |
| 36 suspected_cl_util.UpdateSuspectedCL( |
| 37 repo_name, revision, commit_position, approach, master_name, |
| 38 builder_name, build_number, compile_failure_type, failures, top_score) |
| 39 |
| 40 expected_builds = { |
| 41 BaseBuildModel.CreateBuildId(master_name, builder_name, build_number ):{ |
| 42 'approaches': [approach], |
| 43 'failure_type': compile_failure_type, |
| 44 'failures': failures, |
| 45 'status': None, |
| 46 'top_score': top_score |
| 47 } |
| 48 } |
| 49 |
| 50 suspected_cl = WfSuspectedCL.Get(repo_name, revision) |
| 51 |
| 52 self.assertIsNotNone(suspected_cl) |
| 53 self.assertEqual( |
| 54 [analysis_approach_type.HEURISTIC], suspected_cl.approaches) |
| 55 self.assertEqual([compile_failure_type], suspected_cl.failure_type) |
| 56 self.assertEqual(expected_builds, suspected_cl.builds) |
| 57 self.assertEqual(mocked_utcnow, suspected_cl.identified_time) |
| 58 self.assertEqual(mocked_utcnow, suspected_cl.updated_time) |
| 59 |
| 60 def testUpdateWfSuspectedCLAddAnotherApproach(self): |
| 61 approach = analysis_approach_type.TRY_JOB |
| 62 master_name = 'm' |
| 63 builder_name = 'b' |
| 64 build_number = 122 |
| 65 test_failure_type = failure_type.TEST |
| 66 repo_name = 'chromium' |
| 67 revision = 'r2' |
| 68 commit_position = 2 |
| 69 failures = {'step_1': ['test1', 'test2']} |
| 70 top_score = None |
| 71 |
| 72 suspected_cl = WfSuspectedCL.Create(repo_name, revision, commit_position) |
| 73 suspected_cl.approaches = [analysis_approach_type.HEURISTIC] |
| 74 suspected_cl.builds = { |
| 75 BaseBuildModel.CreateBuildId( |
| 76 master_name, builder_name, build_number ): { |
| 77 'approaches': [analysis_approach_type.HEURISTIC], |
| 78 'failure_type': test_failure_type, |
| 79 'failures': failures, |
| 80 'status': None, |
| 81 'top_score': 4 |
| 82 } |
| 83 } |
| 84 suspected_cl.failure_type = [test_failure_type] |
| 85 suspected_cl.put() |
| 86 |
| 87 suspected_cl_util.UpdateSuspectedCL( |
| 88 repo_name, revision, commit_position, approach, master_name, |
| 89 builder_name, build_number, test_failure_type, failures, top_score) |
| 90 |
| 91 expected_builds = { |
| 92 BaseBuildModel.CreateBuildId( |
| 93 master_name, builder_name, build_number ): { |
| 94 'approaches': [ |
| 95 analysis_approach_type.HEURISTIC, |
| 96 analysis_approach_type.TRY_JOB], |
| 97 'failure_type': test_failure_type, |
| 98 'failures': failures, |
| 99 'status': None, |
| 100 'top_score': 4 |
| 101 } |
| 102 } |
| 103 |
| 104 expected_approaches = [ |
| 105 analysis_approach_type.HEURISTIC, |
| 106 analysis_approach_type.TRY_JOB] |
| 107 |
| 108 suspected_cl = WfSuspectedCL.Get(repo_name, revision) |
| 109 |
| 110 self.assertIsNotNone(suspected_cl) |
| 111 self.assertEqual(expected_approaches, suspected_cl.approaches) |
| 112 self.assertEqual([test_failure_type], suspected_cl.failure_type) |
| 113 self.assertEqual(expected_builds, suspected_cl.builds) |
| 114 |
| 115 def testUpdateWfSuspectedCLAddSameBuild(self): |
| 116 approach = analysis_approach_type.HEURISTIC |
| 117 master_name = 'm' |
| 118 builder_name = 'b' |
| 119 build_number = 122 |
| 120 test_failure_type = failure_type.TEST |
| 121 repo_name = 'chromium' |
| 122 revision = 'r2' |
| 123 commit_position = 2 |
| 124 failures = {'step_1': ['test1', 'test2']} |
| 125 top_score = 4 |
| 126 |
| 127 suspected_cl = WfSuspectedCL.Create(repo_name, revision, commit_position) |
| 128 suspected_cl.approaches = [analysis_approach_type.HEURISTIC] |
| 129 suspected_cl.builds = { |
| 130 BaseBuildModel.CreateBuildId( |
| 131 master_name, builder_name, build_number ): { |
| 132 'approaches': [analysis_approach_type.HEURISTIC], |
| 133 'failure_type': test_failure_type, |
| 134 'failures': failures, |
| 135 'status': None, |
| 136 'top_score': 4 |
| 137 } |
| 138 } |
| 139 suspected_cl.failure_type = [test_failure_type] |
| 140 suspected_cl.put() |
| 141 |
| 142 suspected_cl_util.UpdateSuspectedCL( |
| 143 repo_name, revision, commit_position, approach, master_name, |
| 144 builder_name, build_number, test_failure_type, failures, top_score) |
| 145 |
| 146 expected_builds = { |
| 147 BaseBuildModel.CreateBuildId( |
| 148 master_name, builder_name, build_number ): { |
| 149 'approaches': [analysis_approach_type.HEURISTIC], |
| 150 'failure_type': test_failure_type, |
| 151 'failures': failures, |
| 152 'status': None, |
| 153 'top_score': 4 |
| 154 } |
| 155 } |
| 156 |
| 157 expected_approaches = [analysis_approach_type.HEURISTIC] |
| 158 |
| 159 suspected_cl = WfSuspectedCL.Get(repo_name, revision) |
| 160 |
| 161 self.assertIsNotNone(suspected_cl) |
| 162 self.assertEqual(expected_approaches, suspected_cl.approaches) |
| 163 self.assertEqual([test_failure_type], suspected_cl.failure_type) |
| 164 self.assertEqual(expected_builds, suspected_cl.builds) |
| 165 |
| 166 def testUpdateWfSuspectedCLAddAnotherHeuristic(self): |
| 167 approach = analysis_approach_type.HEURISTIC |
| 168 master_name = 'm' |
| 169 builder_name = 'b' |
| 170 build_number = 122 |
| 171 test_failure_type = failure_type.TEST |
| 172 repo_name = 'chromium' |
| 173 revision = 'r2' |
| 174 commit_position = 2 |
| 175 failures = {'step_1': ['test1', 'test2']} |
| 176 top_score = 4 |
| 177 |
| 178 suspected_cl = WfSuspectedCL.Create(repo_name, revision, commit_position) |
| 179 suspected_cl.approaches = [analysis_approach_type.HEURISTIC] |
| 180 suspected_cl.builds = { |
| 181 BaseBuildModel.CreateBuildId( |
| 182 master_name, builder_name, build_number-1): { |
| 183 'approaches': [analysis_approach_type.HEURISTIC], |
| 184 'failure_type': test_failure_type, |
| 185 'failures': {'step': ['test']}, |
| 186 'status': suspected_cl_status.CORRECT, |
| 187 'top_score': 4 |
| 188 }, |
| 189 BaseBuildModel.CreateBuildId( |
| 190 master_name, builder_name, build_number - 2): { |
| 191 'approaches': [analysis_approach_type.HEURISTIC], |
| 192 'failure_type': test_failure_type, |
| 193 'failures': failures, |
| 194 'status': suspected_cl_status.CORRECT, |
| 195 'top_score': 4 |
| 196 } |
| 197 } |
| 198 suspected_cl.failure_type = [test_failure_type] |
| 199 suspected_cl.put() |
| 200 |
| 201 suspected_cl_util.UpdateSuspectedCL( |
| 202 repo_name, revision, commit_position, approach, master_name, |
| 203 builder_name, build_number, test_failure_type, failures, top_score) |
| 204 |
| 205 expected_builds = { |
| 206 BaseBuildModel.CreateBuildId( |
| 207 master_name, builder_name, build_number-1): { |
| 208 'approaches': [analysis_approach_type.HEURISTIC], |
| 209 'failure_type': test_failure_type, |
| 210 'failures': {'step': ['test']}, |
| 211 'status': suspected_cl_status.CORRECT, |
| 212 'top_score': 4 |
| 213 }, |
| 214 BaseBuildModel.CreateBuildId( |
| 215 master_name, builder_name, build_number - 2): { |
| 216 'approaches': [analysis_approach_type.HEURISTIC], |
| 217 'failure_type': test_failure_type, |
| 218 'failures': failures, |
| 219 'status': suspected_cl_status.CORRECT, |
| 220 'top_score': 4 |
| 221 }, |
| 222 BaseBuildModel.CreateBuildId( |
| 223 master_name, builder_name, build_number): { |
| 224 'approaches': [analysis_approach_type.HEURISTIC], |
| 225 'failure_type': test_failure_type, |
| 226 'failures': failures, |
| 227 'status': suspected_cl_status.CORRECT, |
| 228 'top_score': 4 |
| 229 } |
| 230 } |
| 231 |
| 232 suspected_cl = WfSuspectedCL.Get(repo_name, revision) |
| 233 |
| 234 self.assertIsNotNone(suspected_cl) |
| 235 self.assertEqual( |
| 236 [analysis_approach_type.HEURISTIC], suspected_cl.approaches) |
| 237 self.assertEqual([test_failure_type], suspected_cl.failure_type) |
| 238 self.assertEqual(expected_builds, suspected_cl.builds) |
| 239 |
| 240 def testGetCLInfo(self): |
| 241 self.assertEqual(['chromium', 'rev1'], |
| 242 suspected_cl_util.GetCLInfo('chromium/rev1')) |
| OLD | NEW |