| 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 27 matching lines...) Expand all Loading... |
| 38 return 123 | 38 return 123 |
| 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 testShouldNotSendNotificationForSameFailedBuild(self): |
| 49 criteria = { |
| 50 'time_limit_passed': False |
| 51 } |
| 52 self.assertTrue( |
| 53 send_notification_for_culprit_pipeline._ShouldSendNotification( |
| 54 'm', 'b2', 2, 'chromium', 'r2', 123, criteria)) |
| 49 self.assertFalse( | 55 self.assertFalse( |
| 50 send_notification_for_culprit_pipeline._ShouldSendNotification( | 56 send_notification_for_culprit_pipeline._ShouldSendNotification( |
| 51 'm', 'b1', 1, 'chromium', 'r1', 123, 2, False)) | 57 'm', 'b2', 2, 'chromium', 'r2', 123, criteria)) |
| 52 culprit = WfCulprit.Get('chromium', 'r1') | |
| 53 self.assertIsNotNone(culprit) | |
| 54 self.assertEqual([['m', 'b1', 1]], culprit.builds) | |
| 55 | |
| 56 def testShouldNotSendNotificationForSameFailedBuild(self): | |
| 57 self.assertFalse( | |
| 58 send_notification_for_culprit_pipeline._ShouldSendNotification( | |
| 59 'm', 'b2', 2, 'chromium', 'r2', 123, 2, False)) | |
| 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') | 58 culprit = WfCulprit.Get('chromium', 'r2') |
| 64 self.assertIsNotNone(culprit) | 59 self.assertIsNotNone(culprit) |
| 65 self.assertEqual([['m', 'b2', 2]], culprit.builds) | 60 self.assertEqual([['m', 'b2', 2]], culprit.builds) |
| 61 self.assertEqual(status.RUNNING, culprit.cr_notification_status) |
| 66 | 62 |
| 67 def testShouldSendNotificationForSecondFailedBuild(self): | 63 def testShouldNotSendNotificationIfTimePassed(self): |
| 64 criteria = { |
| 65 'time_limit_passed': True |
| 66 } |
| 68 self.assertFalse( | 67 self.assertFalse( |
| 69 send_notification_for_culprit_pipeline._ShouldSendNotification( | 68 send_notification_for_culprit_pipeline._ShouldSendNotification( |
| 70 'm', 'b31', 31, 'chromium', 'r3', 123, 2, False)) | 69 'm', 'b2', 2, 'chromium', 'r2', 123, criteria)) |
| 71 self.assertTrue( | |
| 72 send_notification_for_culprit_pipeline._ShouldSendNotification( | |
| 73 'm', 'b32', 32, 'chromium', 'r3', 123, 2, False)) | |
| 74 culprit = WfCulprit.Get('chromium', 'r3') | |
| 75 self.assertIsNotNone(culprit) | |
| 76 self.assertEqual(status.RUNNING, culprit.cr_notification_status) | |
| 77 self.assertEqual([['m', 'b31', 31], ['m', 'b32', 32]], culprit.builds) | |
| 78 | |
| 79 def testShouldNotSendNotificationForFirstFailedBuildCycle(self): | |
| 80 rietveld_requests = [] | |
| 81 self._MockRietveld(rietveld_requests) | |
| 82 self._MockGitRepository('url') | |
| 83 self.MockUTCNow(_MOCKED_DATETIME_UTCNOW) | |
| 84 self._MockBuildEndTime() | |
| 85 | |
| 86 pipeline = SendNotificationForCulpritPipeline() | |
| 87 self.assertFalse(pipeline.run('m', 'b4', 4, 'chromium', 'r4')) | |
| 88 self.assertEqual(0, len(rietveld_requests)) | |
| 89 | 70 |
| 90 def testShouldNotSendNotificationIfNoCodeReview(self): | 71 def testShouldNotSendNotificationIfNoCodeReview(self): |
| 91 rietveld_requests = [] | 72 rietveld_requests = [] |
| 92 self._MockRietveld(rietveld_requests) | 73 self._MockRietveld(rietveld_requests) |
| 93 self._MockGitRepository(None) | 74 self._MockGitRepository(None) |
| 94 self.MockUTCNow(_MOCKED_DATETIME_UTCNOW) | 75 self.MockUTCNow(_MOCKED_DATETIME_UTCNOW) |
| 95 self._MockBuildEndTime() | 76 self._MockBuildEndTime() |
| 96 culprit = WfCulprit.Create('chromium', 'r5', 123) | 77 culprit = WfCulprit.Create('chromium', 'r5', 123) |
| 97 culprit.builds.append(['m', 'b51', 51]) | 78 culprit.builds.append(['m', 'b51', 51]) |
| 98 culprit.put() | 79 culprit.put() |
| 99 | 80 |
| 100 pipeline = SendNotificationForCulpritPipeline() | 81 pipeline = SendNotificationForCulpritPipeline() |
| 101 self.assertFalse(pipeline.run('m', 'b52', 52, 'chromium', 'r5')) | 82 self.assertFalse(pipeline.run('m', 'b52', 52, 'chromium', 'r5')) |
| 102 self.assertEqual(0, len(rietveld_requests)) | 83 self.assertEqual(0, len(rietveld_requests)) |
| 103 | 84 |
| 104 def testSendNotificationSuccess(self): | 85 def testSendNotificationSuccess(self): |
| 105 rietveld_requests = [] | 86 rietveld_requests = [] |
| 106 self._MockRietveld(rietveld_requests) | 87 self._MockRietveld(rietveld_requests) |
| 107 self._MockGitRepository('url') | 88 self._MockGitRepository('url') |
| 108 self.MockUTCNow(_MOCKED_DATETIME_UTCNOW) | 89 self.MockUTCNow(_MOCKED_DATETIME_UTCNOW) |
| 109 self._MockBuildEndTime() | 90 self._MockBuildEndTime() |
| 110 culprit = WfCulprit.Create('chromium', 'r6', 123) | 91 culprit = WfCulprit.Create('chromium', 'r6', 123) |
| 111 culprit.builds.append(['m', 'b61', 61]) | 92 culprit.builds.append(['m', 'b61', 61]) |
| 112 culprit.put() | 93 culprit.put() |
| 113 | 94 |
| 114 pipeline = SendNotificationForCulpritPipeline() | 95 pipeline = SendNotificationForCulpritPipeline() |
| 115 self.assertTrue(pipeline.run('m', 'b62', 62, 'chromium', 'r6')) | 96 self.assertTrue(pipeline.run('m', 'b62', 62, 'chromium', 'r6')) |
| 116 self.assertEqual(1, len(rietveld_requests)) | 97 self.assertEqual(1, len(rietveld_requests)) |
| 98 |
| 99 def testDontSendNotificationIfShouldNot(self): |
| 100 rietveld_requests = [] |
| 101 self._MockRietveld(rietveld_requests) |
| 102 self._MockGitRepository('url') |
| 103 self.MockUTCNow(_MOCKED_DATETIME_UTCNOW) |
| 104 self._MockBuildEndTime() |
| 105 culprit = WfCulprit.Create('chromium', 'r7', 123) |
| 106 culprit.builds.append(['m', 'b71', 71]) |
| 107 culprit.put() |
| 108 |
| 109 pipeline = SendNotificationForCulpritPipeline() |
| 110 self.assertFalse(pipeline.run('m', 'b71', 71, 'chromium', 'r7')) |
| 111 self.assertEqual(0, len(rietveld_requests)) |
| OLD | NEW |