Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(656)

Side by Side Diff: appengine/findit/waterfall/test/send_notification_for_culprit_pipeline_test.py

Issue 2116073002: [Findit] Fix redirect bug and update template for waterfall/culprit. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Add one unittest. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « appengine/findit/waterfall/test/build_util_test.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
11 from waterfall import build_util
11 from waterfall import send_notification_for_culprit_pipeline 12 from waterfall import send_notification_for_culprit_pipeline
12 from waterfall.send_notification_for_culprit_pipeline import ( 13 from waterfall.send_notification_for_culprit_pipeline import (
13 SendNotificationForCulpritPipeline) 14 SendNotificationForCulpritPipeline)
14 from waterfall.test import wf_testcase 15 from waterfall.test import wf_testcase
15 16
16 17
17 _MOCKED_DATETIME_UTCNOW = datetime.datetime(2016, 06, 28, 12, 44, 00) 18 _MOCKED_DATETIME_UTCNOW = datetime.datetime(2016, 06, 28, 12, 44, 00)
18 _MOCKED_COMMIT_TIME = datetime.datetime(2016, 06, 28, 12, 40, 00) 19 _MOCKED_BUILD_END_TIME = datetime.datetime(2016, 06, 28, 12, 40, 00)
19 20
20 class SendNotificationForCulpritPipelineTest(wf_testcase.WaterfallTestCase): 21 class SendNotificationForCulpritPipelineTest(wf_testcase.WaterfallTestCase):
21 22
22 def _MockRietveld(self, rietveld_requests): 23 def _MockRietveld(self, rietveld_requests):
23 def Mocked_Rietveld_PostMessage(_, url, message): 24 def Mocked_Rietveld_PostMessage(_, url, message):
24 rietveld_requests.append((url, message)) 25 rietveld_requests.append((url, message))
25 return True 26 return True
26 self.mock(Rietveld, 'PostMessage', Mocked_Rietveld_PostMessage) 27 self.mock(Rietveld, 'PostMessage', Mocked_Rietveld_PostMessage)
27 28
28 def _MockGitRepository(self, mocked_url): 29 def _MockGitRepository(self, mocked_url):
29 def Mocked_GetChangeLog(*_): 30 def Mocked_GetChangeLog(*_):
30 class MockedChangeLog(object): 31 class MockedChangeLog(object):
31 @property 32 @property
32 def code_review_url(self): 33 def code_review_url(self):
33 return mocked_url 34 return mocked_url
35
34 @property 36 @property
35 def committer_time(self): 37 def commit_position(self):
36 return _MOCKED_COMMIT_TIME 38 return 123
39
37 return MockedChangeLog() 40 return MockedChangeLog()
38 self.mock(GitRepository, 'GetChangeLog', Mocked_GetChangeLog) 41 self.mock(GitRepository, 'GetChangeLog', Mocked_GetChangeLog)
39 42
40 def _MockDatetimeUtcNow(self): 43 def _MockDatetimeUtcNow(self):
41 class Mocked_Datetime(object): 44 class Mocked_Datetime(object):
42 @staticmethod 45 @staticmethod
43 def utcnow(): 46 def utcnow():
44 return _MOCKED_DATETIME_UTCNOW 47 return _MOCKED_DATETIME_UTCNOW
45 self.mock(send_notification_for_culprit_pipeline, 48 self.mock(send_notification_for_culprit_pipeline,
46 'datetime', Mocked_Datetime) 49 'datetime', Mocked_Datetime)
47 50
51 def _MockBuildEndTime(self):
52 def Mocked_GetBuildEndTime(*_):
53 return _MOCKED_BUILD_END_TIME
54 self.mock(build_util, 'GetBuildEndTime', Mocked_GetBuildEndTime)
55
48 def testShouldNotSendNotificationForSingleFailedBuild(self): 56 def testShouldNotSendNotificationForSingleFailedBuild(self):
49 self.assertFalse( 57 self.assertFalse(
50 send_notification_for_culprit_pipeline._ShouldSendNotification( 58 send_notification_for_culprit_pipeline._ShouldSendNotification(
51 'm', 'b1', 1, 'chromium', 'r1', 2, False)) 59 'm', 'b1', 1, 'chromium', 'r1', 123, 2, False))
52 culprit = WfCulprit.Get('chromium', 'r1') 60 culprit = WfCulprit.Get('chromium', 'r1')
53 self.assertIsNotNone(culprit) 61 self.assertIsNotNone(culprit)
54 self.assertEqual([['m', 'b1', 1]], culprit.builds) 62 self.assertEqual([['m', 'b1', 1]], culprit.builds)
55 63
56 def testShouldNotSendNotificationForSameFailedBuild(self): 64 def testShouldNotSendNotificationForSameFailedBuild(self):
57 self.assertFalse( 65 self.assertFalse(
58 send_notification_for_culprit_pipeline._ShouldSendNotification( 66 send_notification_for_culprit_pipeline._ShouldSendNotification(
59 'm', 'b2', 2, 'chromium', 'r2', 2, False)) 67 'm', 'b2', 2, 'chromium', 'r2', 123, 2, False))
60 self.assertFalse( 68 self.assertFalse(
61 send_notification_for_culprit_pipeline._ShouldSendNotification( 69 send_notification_for_culprit_pipeline._ShouldSendNotification(
62 'm', 'b2', 2, 'chromium', 'r2', 2, False)) 70 'm', 'b2', 2, 'chromium', 'r2', 123, 2, False))
63 culprit = WfCulprit.Get('chromium', 'r2') 71 culprit = WfCulprit.Get('chromium', 'r2')
64 self.assertIsNotNone(culprit) 72 self.assertIsNotNone(culprit)
65 self.assertEqual([['m', 'b2', 2]], culprit.builds) 73 self.assertEqual([['m', 'b2', 2]], culprit.builds)
66 74
67 def testShouldSendNotificationForSecondFailedBuild(self): 75 def testShouldSendNotificationForSecondFailedBuild(self):
68 self.assertFalse( 76 self.assertFalse(
69 send_notification_for_culprit_pipeline._ShouldSendNotification( 77 send_notification_for_culprit_pipeline._ShouldSendNotification(
70 'm', 'b31', 31, 'chromium', 'r3', 2, False)) 78 'm', 'b31', 31, 'chromium', 'r3', 123, 2, False))
71 self.assertTrue( 79 self.assertTrue(
72 send_notification_for_culprit_pipeline._ShouldSendNotification( 80 send_notification_for_culprit_pipeline._ShouldSendNotification(
73 'm', 'b32', 32, 'chromium', 'r3', 2, False)) 81 'm', 'b32', 32, 'chromium', 'r3', 123, 2, False))
74 culprit = WfCulprit.Get('chromium', 'r3') 82 culprit = WfCulprit.Get('chromium', 'r3')
75 self.assertIsNotNone(culprit) 83 self.assertIsNotNone(culprit)
76 self.assertEqual(status.RUNNING, culprit.cr_notification_status) 84 self.assertEqual(status.RUNNING, culprit.cr_notification_status)
77 self.assertEqual([['m', 'b31', 31], ['m', 'b32', 32]], culprit.builds) 85 self.assertEqual([['m', 'b31', 31], ['m', 'b32', 32]], culprit.builds)
78 86
79 def testShouldNotSendNotificationForFirstFailedBuildCycle(self): 87 def testShouldNotSendNotificationForFirstFailedBuildCycle(self):
80 rietveld_requests = [] 88 rietveld_requests = []
81 self._MockRietveld(rietveld_requests) 89 self._MockRietveld(rietveld_requests)
82 self._MockGitRepository('url') 90 self._MockGitRepository('url')
83 self._MockDatetimeUtcNow() 91 self._MockDatetimeUtcNow()
92 self._MockBuildEndTime()
84 93
85 pipeline = SendNotificationForCulpritPipeline() 94 pipeline = SendNotificationForCulpritPipeline()
86 self.assertFalse(pipeline.run('m', 'b4', 4, 'chromium', 'r4')) 95 self.assertFalse(pipeline.run('m', 'b4', 4, 'chromium', 'r4'))
87 self.assertEqual(0, len(rietveld_requests)) 96 self.assertEqual(0, len(rietveld_requests))
88 97
89 def testShouldNotSendNotificationIfNoCodeReview(self): 98 def testShouldNotSendNotificationIfNoCodeReview(self):
90 rietveld_requests = [] 99 rietveld_requests = []
91 self._MockRietveld(rietveld_requests) 100 self._MockRietveld(rietveld_requests)
92 self._MockGitRepository(None) 101 self._MockGitRepository(None)
93 self._MockDatetimeUtcNow() 102 self._MockDatetimeUtcNow()
94 culprit = WfCulprit.Create('chromium', 'r5') 103 self._MockBuildEndTime()
104 culprit = WfCulprit.Create('chromium', 'r5', 123)
95 culprit.builds.append(['m', 'b51', 51]) 105 culprit.builds.append(['m', 'b51', 51])
96 culprit.put() 106 culprit.put()
97 107
98 pipeline = SendNotificationForCulpritPipeline() 108 pipeline = SendNotificationForCulpritPipeline()
99 self.assertFalse(pipeline.run('m', 'b52', 52, 'chromium', 'r5')) 109 self.assertFalse(pipeline.run('m', 'b52', 52, 'chromium', 'r5'))
100 self.assertEqual(0, len(rietveld_requests)) 110 self.assertEqual(0, len(rietveld_requests))
101 111
102 def testSendNotificationSuccess(self): 112 def testSendNotificationSuccess(self):
103 rietveld_requests = [] 113 rietveld_requests = []
104 self._MockRietveld(rietveld_requests) 114 self._MockRietveld(rietveld_requests)
105 self._MockGitRepository('url') 115 self._MockGitRepository('url')
106 self._MockDatetimeUtcNow() 116 self._MockDatetimeUtcNow()
107 culprit = WfCulprit.Create('chromium', 'r6') 117 self._MockBuildEndTime()
118 culprit = WfCulprit.Create('chromium', 'r6', 123)
108 culprit.builds.append(['m', 'b61', 61]) 119 culprit.builds.append(['m', 'b61', 61])
109 culprit.put() 120 culprit.put()
110 121
111 pipeline = SendNotificationForCulpritPipeline() 122 pipeline = SendNotificationForCulpritPipeline()
112 self.assertTrue(pipeline.run('m', 'b62', 62, 'chromium', 'r6')) 123 self.assertTrue(pipeline.run('m', 'b62', 62, 'chromium', 'r6'))
113 self.assertEqual(1, len(rietveld_requests)) 124 self.assertEqual(1, len(rietveld_requests))
OLDNEW
« no previous file with comments | « appengine/findit/waterfall/test/build_util_test.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698