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

Side by Side Diff: third_party/buildbot_7_12/buildbot/test/test_changes.py

Issue 12207158: Bye bye buildbot 0.7.12. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 7 years, 10 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 # -*- test-case-name: buildbot.test.test_changes -*-
2
3 from twisted.trial import unittest
4 from twisted.internet import defer, reactor
5
6 from buildbot import master
7 from buildbot.changes import pb
8 from buildbot.scripts import runner
9
10 import sys
11 if sys.version_info[:3] < (2,4,0):
12 from sets import Set as set
13
14 d1 = {'files': ["Project/foo.c", "Project/bar/boo.c"],
15 'who': "marvin",
16 'comments': "Some changes in Project"}
17 d2 = {'files': ["OtherProject/bar.c"],
18 'who': "zaphod",
19 'comments': "other changes"}
20 d3 = {'files': ["Project/baz.c", "OtherProject/bloo.c"],
21 'who': "alice",
22 'comments': "mixed changes"}
23 d4 = {'files': ["trunk/baz.c", "branches/foobranch/foo.c", "trunk/bar.c"],
24 'who': "alice",
25 'comments': "mixed changes"}
26 d5 = {'files': ["Project/foo.c"],
27 'who': "trillian",
28 'comments': "Some changes in Project",
29 'category': "categoryA"}
30
31 class TestChangePerspective(unittest.TestCase):
32
33 def setUp(self):
34 self.changes = []
35
36 def addChange(self, c):
37 self.changes.append(c)
38
39 def testNoPrefix(self):
40 p = pb.ChangePerspective(self, None)
41 p.perspective_addChange(d1)
42 self.failUnlessEqual(len(self.changes), 1)
43 c1 = self.changes[0]
44 self.failUnlessEqual(set(c1.files),
45 set(["Project/foo.c", "Project/bar/boo.c"]))
46 self.failUnlessEqual(c1.comments, "Some changes in Project")
47 self.failUnlessEqual(c1.who, "marvin")
48
49 def testPrefix(self):
50 p = pb.ChangePerspective(self, "Project/")
51
52 p.perspective_addChange(d1)
53 self.failUnlessEqual(len(self.changes), 1)
54 c1 = self.changes[-1]
55 self.failUnlessEqual(set(c1.files), set(["foo.c", "bar/boo.c"]))
56 self.failUnlessEqual(c1.comments, "Some changes in Project")
57 self.failUnlessEqual(c1.who, "marvin")
58
59 p.perspective_addChange(d2) # should be ignored
60 self.failUnlessEqual(len(self.changes), 1)
61
62 p.perspective_addChange(d3) # should ignore the OtherProject file
63 self.failUnlessEqual(len(self.changes), 2)
64
65 c3 = self.changes[-1]
66 self.failUnlessEqual(set(c3.files), set(["baz.c"]))
67 self.failUnlessEqual(c3.comments, "mixed changes")
68 self.failUnlessEqual(c3.who, "alice")
69
70 def testPrefix2(self):
71 p = pb.ChangePerspective(self, "Project/bar/")
72
73 p.perspective_addChange(d1)
74 self.failUnlessEqual(len(self.changes), 1)
75 c1 = self.changes[-1]
76 self.failUnlessEqual(set(c1.files), set(["boo.c"]))
77 self.failUnlessEqual(c1.comments, "Some changes in Project")
78 self.failUnlessEqual(c1.who, "marvin")
79
80 p.perspective_addChange(d2) # should be ignored
81 self.failUnlessEqual(len(self.changes), 1)
82
83 p.perspective_addChange(d3) # should ignore this too
84 self.failUnlessEqual(len(self.changes), 1)
85
86 def testPrefix3(self):
87 p = pb.ChangePerspective(self, "trunk/")
88
89 p.perspective_addChange(d4)
90 self.failUnlessEqual(len(self.changes), 1)
91 c1 = self.changes[-1]
92 self.failUnlessEqual(set(c1.files), set(["baz.c", "bar.c"]))
93 self.failUnlessEqual(c1.comments, "mixed changes")
94
95 def testPrefix4(self):
96 p = pb.ChangePerspective(self, "branches/foobranch/")
97
98 p.perspective_addChange(d4)
99 self.failUnlessEqual(len(self.changes), 1)
100 c1 = self.changes[-1]
101 self.failUnlessEqual(set(c1.files), set(["foo.c"]))
102 self.failUnlessEqual(c1.comments, "mixed changes")
103
104 def testCategory(self):
105 p = pb.ChangePerspective(self, None)
106 p.perspective_addChange(d5)
107 self.failUnlessEqual(len(self.changes), 1)
108 c1 = self.changes[0]
109 self.failUnlessEqual(c1.category, "categoryA")
110
111 config_empty = """
112 BuildmasterConfig = c = {}
113 c['slaves'] = []
114 c['builders'] = []
115 c['schedulers'] = []
116 c['slavePortnum'] = 0
117 """
118
119 config_sender = config_empty + \
120 """
121 from buildbot.changes import pb
122 c['change_source'] = pb.PBChangeSource(port=None)
123 """
124
125 class Sender(unittest.TestCase):
126 def setUp(self):
127 self.master = master.BuildMaster(".")
128 def tearDown(self):
129 d = defer.maybeDeferred(self.master.stopService)
130 # TODO: something in Twisted-2.0.0 (and probably 2.0.1) doesn't shut
131 # down the Broker listening socket when it's supposed to.
132 # Twisted-1.3.0, and current SVN (which will be post-2.0.1) are ok.
133 # This iterate() is a quick hack to deal with the problem. I need to
134 # investigate more thoroughly and find a better solution.
135 d.addCallback(self.stall, 0.1)
136 return d
137
138 def stall(self, res, timeout):
139 d = defer.Deferred()
140 reactor.callLater(timeout, d.callback, res)
141 return d
142
143 def testSender(self):
144 self.master.loadConfig(config_empty)
145 self.master.startService()
146 # TODO: BuildMaster.loadChanges replaces the change_svc object, so we
147 # have to load it twice. Clean this up.
148 d = self.master.loadConfig(config_sender)
149 d.addCallback(self._testSender_1)
150 return d
151
152 def _testSender_1(self, res):
153 self.cm = cm = self.master.change_svc
154 s1 = list(self.cm)[0]
155 port = self.master.slavePort._port.getHost().port
156
157 self.options = {'username': "alice",
158 'master': "localhost:%d" % port,
159 'files': ["foo.c"],
160 'category': "categoryA",
161 }
162
163 d = runner.sendchange(self.options)
164 d.addCallback(self._testSender_2)
165 return d
166
167 def _testSender_2(self, res):
168 # now check that the change was received
169 self.failUnlessEqual(len(self.cm.changes), 1)
170 c = self.cm.changes.pop()
171 self.failUnlessEqual(c.who, "alice")
172 self.failUnlessEqual(c.files, ["foo.c"])
173 self.failUnlessEqual(c.comments, "")
174 self.failUnlessEqual(c.revision, None)
175 self.failUnlessEqual(c.category, "categoryA")
176
177 self.options['revision'] = "r123"
178 self.options['comments'] = "test change"
179
180 d = runner.sendchange(self.options)
181 d.addCallback(self._testSender_3)
182 return d
183
184 def _testSender_3(self, res):
185 self.failUnlessEqual(len(self.cm.changes), 1)
186 c = self.cm.changes.pop()
187 self.failUnlessEqual(c.who, "alice")
188 self.failUnlessEqual(c.files, ["foo.c"])
189 self.failUnlessEqual(c.comments, "test change")
190 self.failUnlessEqual(c.revision, "r123")
191 self.failUnlessEqual(c.category, "categoryA")
192
193 # test options['logfile'] by creating a temporary file
194 logfile = self.mktemp()
195 f = open(logfile, "wt")
196 f.write("longer test change")
197 f.close()
198 self.options['comments'] = None
199 self.options['logfile'] = logfile
200
201 d = runner.sendchange(self.options)
202 d.addCallback(self._testSender_4)
203 return d
204
205 def _testSender_4(self, res):
206 self.failUnlessEqual(len(self.cm.changes), 1)
207 c = self.cm.changes.pop()
208 self.failUnlessEqual(c.who, "alice")
209 self.failUnlessEqual(c.files, ["foo.c"])
210 self.failUnlessEqual(c.comments, "longer test change")
211 self.failUnlessEqual(c.revision, "r123")
212 self.failUnlessEqual(c.category, "categoryA")
213
214 # make sure that numeric revisions work too
215 self.options['logfile'] = None
216 del self.options['revision']
217 self.options['revision_number'] = 42
218
219 d = runner.sendchange(self.options)
220 d.addCallback(self._testSender_5)
221 return d
222
223 def _testSender_5(self, res):
224 self.failUnlessEqual(len(self.cm.changes), 1)
225 c = self.cm.changes.pop()
226 self.failUnlessEqual(c.who, "alice")
227 self.failUnlessEqual(c.files, ["foo.c"])
228 self.failUnlessEqual(c.comments, "")
229 self.failUnlessEqual(c.revision, 42)
230 self.failUnlessEqual(c.category, "categoryA")
231
232 # verify --branch too
233 self.options['branch'] = "branches/test"
234
235 d = runner.sendchange(self.options)
236 d.addCallback(self._testSender_6)
237 return d
238
239 def _testSender_6(self, res):
240 self.failUnlessEqual(len(self.cm.changes), 1)
241 c = self.cm.changes.pop()
242 self.failUnlessEqual(c.who, "alice")
243 self.failUnlessEqual(c.files, ["foo.c"])
244 self.failUnlessEqual(c.comments, "")
245 self.failUnlessEqual(c.revision, 42)
246 self.failUnlessEqual(c.branch, "branches/test")
247 self.failUnlessEqual(c.category, "categoryA")
OLDNEW
« no previous file with comments | « third_party/buildbot_7_12/buildbot/test/test_changemaster.py ('k') | third_party/buildbot_7_12/buildbot/test/test_config.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698