| OLD | NEW |
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 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 import datetime | 5 import datetime |
| 6 | 6 |
| 7 from common.git_repository import GitRepository | 7 from common.git_repository import GitRepository |
| 8 from common.rietveld import Rietveld | 8 from common.rietveld import Rietveld |
| 9 from model import analysis_status as status | 9 from model import analysis_status as status |
| 10 from model.wf_culprit import WfCulprit | 10 from model.wf_culprit import WfCulprit |
| (...skipping 28 matching lines...) Expand all Loading... |
| 39 | 39 |
| 40 return MockedChangeLog() | 40 return MockedChangeLog() |
| 41 self.mock(GitRepository, 'GetChangeLog', Mocked_GetChangeLog) | 41 self.mock(GitRepository, 'GetChangeLog', Mocked_GetChangeLog) |
| 42 | 42 |
| 43 def _MockBuildEndTime(self): | 43 def _MockBuildEndTime(self): |
| 44 def Mocked_GetBuildEndTime(*_): | 44 def Mocked_GetBuildEndTime(*_): |
| 45 return _MOCKED_BUILD_END_TIME | 45 return _MOCKED_BUILD_END_TIME |
| 46 self.mock(build_util, 'GetBuildEndTime', Mocked_GetBuildEndTime) | 46 self.mock(build_util, 'GetBuildEndTime', Mocked_GetBuildEndTime) |
| 47 | 47 |
| 48 def testShouldNotSendNotificationForSingleFailedBuild(self): | 48 def testShouldNotSendNotificationForSingleFailedBuild(self): |
| 49 additional_criteria = { |
| 50 'within_time_limit': True |
| 51 } |
| 49 self.assertFalse( | 52 self.assertFalse( |
| 50 send_notification_for_culprit_pipeline._ShouldSendNotification( | 53 send_notification_for_culprit_pipeline._ShouldSendNotification( |
| 51 'm', 'b1', 1, 'chromium', 'r1', 123, 2, False)) | 54 'm', 'b1', 1, 'chromium', 'r1', 123, 2, additional_criteria, False)) |
| 52 culprit = WfCulprit.Get('chromium', 'r1') | 55 culprit = WfCulprit.Get('chromium', 'r1') |
| 53 self.assertIsNotNone(culprit) | 56 self.assertIsNotNone(culprit) |
| 54 self.assertEqual([['m', 'b1', 1]], culprit.builds) | 57 self.assertEqual([['m', 'b1', 1]], culprit.builds) |
| 55 | 58 |
| 56 def testShouldNotSendNotificationForSameFailedBuild(self): | 59 def testShouldNotSendNotificationForSameFailedBuild(self): |
| 60 additional_criteria = { |
| 61 'within_time_limit': True |
| 62 } |
| 63 self.assertTrue( |
| 64 send_notification_for_culprit_pipeline._ShouldSendNotification( |
| 65 'm', 'b2', 2, 'chromium', 'r2', 123, 2, additional_criteria, True)) |
| 57 self.assertFalse( | 66 self.assertFalse( |
| 58 send_notification_for_culprit_pipeline._ShouldSendNotification( | 67 send_notification_for_culprit_pipeline._ShouldSendNotification( |
| 59 'm', 'b2', 2, 'chromium', 'r2', 123, 2, False)) | 68 'm', 'b2', 2, 'chromium', 'r2', 123, 2, additional_criteria, True)) |
| 60 self.assertFalse( | |
| 61 send_notification_for_culprit_pipeline._ShouldSendNotification( | |
| 62 'm', 'b2', 2, 'chromium', 'r2', 123, 2, False)) | |
| 63 culprit = WfCulprit.Get('chromium', 'r2') | 69 culprit = WfCulprit.Get('chromium', 'r2') |
| 64 self.assertIsNotNone(culprit) | 70 self.assertIsNotNone(culprit) |
| 65 self.assertEqual([['m', 'b2', 2]], culprit.builds) | 71 self.assertEqual([['m', 'b2', 2]], culprit.builds) |
| 72 self.assertEqual(status.RUNNING, culprit.cr_notification_status) |
| 66 | 73 |
| 67 def testShouldSendNotificationForSecondFailedBuild(self): | 74 def testShouldSendNotificationForSecondFailedBuild(self): |
| 75 additional_criteria = { |
| 76 'within_time_limit': True |
| 77 } |
| 68 self.assertFalse( | 78 self.assertFalse( |
| 69 send_notification_for_culprit_pipeline._ShouldSendNotification( | 79 send_notification_for_culprit_pipeline._ShouldSendNotification( |
| 70 'm', 'b31', 31, 'chromium', 'r3', 123, 2, False)) | 80 'm', 'b31', 31, 'chromium', 'r3', 123, 2, additional_criteria, |
| 81 False)) |
| 71 self.assertTrue( | 82 self.assertTrue( |
| 72 send_notification_for_culprit_pipeline._ShouldSendNotification( | 83 send_notification_for_culprit_pipeline._ShouldSendNotification( |
| 73 'm', 'b32', 32, 'chromium', 'r3', 123, 2, False)) | 84 'm', 'b32', 32, 'chromium', 'r3', 123, 2, additional_criteria, |
| 85 False)) |
| 74 culprit = WfCulprit.Get('chromium', 'r3') | 86 culprit = WfCulprit.Get('chromium', 'r3') |
| 75 self.assertIsNotNone(culprit) | 87 self.assertIsNotNone(culprit) |
| 76 self.assertEqual(status.RUNNING, culprit.cr_notification_status) | 88 self.assertEqual(status.RUNNING, culprit.cr_notification_status) |
| 77 self.assertEqual([['m', 'b31', 31], ['m', 'b32', 32]], culprit.builds) | 89 self.assertEqual([['m', 'b31', 31], ['m', 'b32', 32]], culprit.builds) |
| 78 | 90 |
| 79 def testShouldNotSendNotificationForFirstFailedBuildCycle(self): | 91 def testShouldNotSendNotificationIfTimePassed(self): |
| 80 rietveld_requests = [] | 92 additional_criteria = { |
| 81 self._MockRietveld(rietveld_requests) | 93 'within_time_limit': False |
| 82 self._MockGitRepository('url') | 94 } |
| 83 self.MockUTCNow(_MOCKED_DATETIME_UTCNOW) | 95 self.assertFalse( |
| 84 self._MockBuildEndTime() | 96 send_notification_for_culprit_pipeline._ShouldSendNotification( |
| 85 | 97 'm', 'b2', 2, 'chromium', 'r2', 123, 2, additional_criteria, True)) |
| 86 pipeline = SendNotificationForCulpritPipeline() | |
| 87 self.assertFalse(pipeline.run('m', 'b4', 4, 'chromium', 'r4')) | |
| 88 self.assertEqual(0, len(rietveld_requests)) | |
| 89 | 98 |
| 90 def testShouldNotSendNotificationIfNoCodeReview(self): | 99 def testShouldNotSendNotificationIfNoCodeReview(self): |
| 91 rietveld_requests = [] | 100 rietveld_requests = [] |
| 92 self._MockRietveld(rietveld_requests) | 101 self._MockRietveld(rietveld_requests) |
| 93 self._MockGitRepository(None) | 102 self._MockGitRepository(None) |
| 94 self.MockUTCNow(_MOCKED_DATETIME_UTCNOW) | 103 self.MockUTCNow(_MOCKED_DATETIME_UTCNOW) |
| 95 self._MockBuildEndTime() | 104 self._MockBuildEndTime() |
| 96 culprit = WfCulprit.Create('chromium', 'r5', 123) | 105 culprit = WfCulprit.Create('chromium', 'r5', 123) |
| 97 culprit.builds.append(['m', 'b51', 51]) | 106 culprit.builds.append(['m', 'b51', 51]) |
| 98 culprit.put() | 107 culprit.put() |
| 99 | 108 |
| 100 pipeline = SendNotificationForCulpritPipeline() | 109 pipeline = SendNotificationForCulpritPipeline() |
| 101 self.assertFalse(pipeline.run('m', 'b52', 52, 'chromium', 'r5')) | 110 self.assertFalse(pipeline.run('m', 'b52', 52, 'chromium', 'r5', False)) |
| 102 self.assertEqual(0, len(rietveld_requests)) | 111 self.assertEqual(0, len(rietveld_requests)) |
| 103 | 112 |
| 104 def testSendNotificationSuccess(self): | 113 def testSendNotificationSuccess(self): |
| 105 rietveld_requests = [] | 114 rietveld_requests = [] |
| 106 self._MockRietveld(rietveld_requests) | 115 self._MockRietveld(rietveld_requests) |
| 107 self._MockGitRepository('url') | 116 self._MockGitRepository('url') |
| 108 self.MockUTCNow(_MOCKED_DATETIME_UTCNOW) | 117 self.MockUTCNow(_MOCKED_DATETIME_UTCNOW) |
| 109 self._MockBuildEndTime() | 118 self._MockBuildEndTime() |
| 110 culprit = WfCulprit.Create('chromium', 'r6', 123) | 119 culprit = WfCulprit.Create('chromium', 'r6', 123) |
| 111 culprit.builds.append(['m', 'b61', 61]) | 120 culprit.builds.append(['m', 'b61', 61]) |
| 112 culprit.put() | 121 culprit.put() |
| 113 | 122 |
| 114 pipeline = SendNotificationForCulpritPipeline() | 123 pipeline = SendNotificationForCulpritPipeline() |
| 115 self.assertTrue(pipeline.run('m', 'b62', 62, 'chromium', 'r6')) | 124 self.assertTrue(pipeline.run('m', 'b62', 62, 'chromium', 'r6', False)) |
| 116 self.assertEqual(1, len(rietveld_requests)) | 125 self.assertEqual(1, len(rietveld_requests)) |
| 126 |
| 127 def testDontSendNotificationIfShouldNot(self): |
| 128 rietveld_requests = [] |
| 129 self._MockRietveld(rietveld_requests) |
| 130 self._MockGitRepository('url') |
| 131 self.MockUTCNow(_MOCKED_DATETIME_UTCNOW) |
| 132 self._MockBuildEndTime() |
| 133 culprit = WfCulprit.Create('chromium', 'r7', 123) |
| 134 culprit.builds.append(['m', 'b71', 71]) |
| 135 culprit.put() |
| 136 |
| 137 pipeline = SendNotificationForCulpritPipeline() |
| 138 self.assertFalse(pipeline.run('m', 'b71', 71, 'chromium', 'r7', False)) |
| 139 self.assertEqual(0, len(rietveld_requests)) |
| OLD | NEW |