Merge ~cjwatson/launchpad:testfix-oci-build-info-to-buildd into launchpad:master

Proposed by Colin Watson
Status: Merged
Approved by: Colin Watson
Approved revision: 8c54c0a43a7d4a40be7e7834d66094ee5b0463c6
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~cjwatson/launchpad:testfix-oci-build-info-to-buildd
Merge into: launchpad:master
Diff against target: 213 lines (+94/-94)
1 file modified
lib/lp/oci/tests/test_ocirecipebuildbehaviour.py (+94/-94)
Reviewer Review Type Date Requested Status
Thiago F. Pappacena (community) Approve
Review via email: mp+392613@code.launchpad.net

Commit message

Move _getBuildInfoArgs tests to TestAsyncOCIRecipeBuildBehaviour

Description of the change

MakeOCIBuildMixin.makeJob adds asynchronous cleanup functions, so can't be used in a synchronous test suite.

To post a comment you must log in.
Revision history for this message
Thiago F. Pappacena (pappacena) wrote :

LGTM!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py b/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py
index 562cb26..2297d6e 100644
--- a/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py
+++ b/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py
@@ -134,7 +134,7 @@ class MakeOCIBuildMixin:
134 return job134 return job
135135
136136
137class TestOCIBuildBehaviour(TestCaseWithFactory, MakeOCIBuildMixin):137class TestOCIBuildBehaviour(TestCaseWithFactory):
138138
139 layer = LaunchpadZopelessLayer139 layer = LaunchpadZopelessLayer
140140
@@ -153,99 +153,6 @@ class TestOCIBuildBehaviour(TestCaseWithFactory, MakeOCIBuildMixin):
153 job = IBuildFarmJobBehaviour(build)153 job = IBuildFarmJobBehaviour(build)
154 self.assertProvides(job, IBuildFarmJobBehaviour)154 self.assertProvides(job, IBuildFarmJobBehaviour)
155155
156 def makeRecipe(self, processor_names, **kwargs):
157 recipe = self.factory.makeOCIRecipe(**kwargs)
158 processors_list = []
159 distroseries = self.factory.makeDistroSeries(
160 distribution=recipe.oci_project.distribution)
161 for proc_name in processor_names:
162 proc = getUtility(IProcessorSet).getByName(proc_name)
163 distro = self.factory.makeDistroArchSeries(
164 distroseries=distroseries, architecturetag=proc_name,
165 processor=proc)
166 distro.addOrUpdateChroot(self.factory.makeLibraryFileAlias())
167 processors_list.append(proc)
168 recipe.setProcessors(processors_list)
169 return recipe
170
171 def makeBuildRequest(self, recipe, requester):
172 build_request = recipe.requestBuilds(requester)
173 # Create the builds for the build request, and set them at the build
174 # request job.
175 builds = recipe.requestBuildsFromJob(requester, build_request)
176 job = removeSecurityProxy(build_request).job
177 removeSecurityProxy(job).builds = builds
178 return build_request
179
180 def test_getBuildInfoArgs_with_build_request(self):
181 owner = self.factory.makePerson()
182 owner.setPreferredEmail(self.factory.makeEmail('owner@foo.com', owner))
183 oci_project = self.factory.makeOCIProject(registrant=owner)
184 recipe = self.makeRecipe(
185 processor_names=["amd64", "386"],
186 oci_project=oci_project, registrant=owner, owner=owner)
187 build_request = self.makeBuildRequest(recipe, recipe.owner)
188 self.assertEqual(2, build_request.builds.count())
189 build = build_request.builds[0]
190 build_per_proc = {i.processor.name: i for i in build_request.builds}
191 job = self.makeJob(build=build)
192
193 self.assertThat(job._getBuildInfoArgs(), MatchesDict({
194 "architectures": MatchesSetwise(Equals("amd64"), Equals("386")),
195 "recipe_owner": Equals({
196 "name": recipe.owner.name,
197 "email": "owner@foo.com"}),
198 "build_request_id": Equals(build_request.id),
199 "build_requester": Equals({
200 "name": build.requester.name,
201 "email": "owner@foo.com"}),
202 "build_request_timestamp": Equals(
203 build_request.date_requested.isoformat()),
204 "build_urls": MatchesDict({
205 "amd64": Equals(canonical_url(build_per_proc["amd64"])),
206 "386": Equals(canonical_url(build_per_proc["386"]))
207 }),
208 }))
209
210 def test_getBuildInfoArgs_hide_email(self):
211 owner = self.factory.makePerson()
212 owner.setPreferredEmail(self.factory.makeEmail('owner@foo.com', owner))
213 owner.hide_email_addresses = True
214 oci_project = self.factory.makeOCIProject(registrant=owner)
215 recipe = self.makeRecipe(
216 processor_names=["amd64"],
217 oci_project=oci_project, registrant=owner, owner=owner)
218 build_request = self.makeBuildRequest(recipe, recipe.owner)
219 build = build_request.builds[0]
220 job = self.makeJob(build=build)
221
222 self.assertThat(job._getBuildInfoArgs(), MatchesDict({
223 "architectures": Equals(["amd64"]),
224 "recipe_owner": Equals({"name": recipe.owner.name, "email": None}),
225 "build_request_id": Equals(build_request.id),
226 "build_requester": Equals({
227 "name": build.requester.name, "email": None}),
228 "build_request_timestamp": Equals(
229 build_request.date_requested.isoformat()),
230 "build_urls": MatchesDict({
231 "amd64": Equals(canonical_url(build_request.builds[0]))
232 }),
233 }))
234
235 def test_getBuildInfoArgs_without_build_request(self):
236 recipe = self.makeRecipe(processor_names=["amd64"])
237 distro_arch_series = removeSecurityProxy(
238 recipe.getAllowedArchitectures()[0])
239 build = self.factory.makeOCIRecipeBuild(
240 recipe=recipe, distro_arch_series=distro_arch_series)
241 job = self.makeJob(build=build)
242 self.assertThat(job._getBuildInfoArgs(), ContainsDict({
243 "architectures": Equals(["amd64"]),
244 "build_request_id": Equals(None),
245 "build_request_timestamp": Equals(None),
246 "build_urls": MatchesDict({"amd64": Equals(canonical_url(build))}),
247 }))
248
249156
250class TestAsyncOCIRecipeBuildBehaviour(157class TestAsyncOCIRecipeBuildBehaviour(
251 StatsMixin, MakeOCIBuildMixin, TestCaseWithFactory):158 StatsMixin, MakeOCIBuildMixin, TestCaseWithFactory):
@@ -343,6 +250,99 @@ class TestAsyncOCIRecipeBuildBehaviour(
343 }),250 }),
344 ]))251 ]))
345252
253 def makeRecipe(self, processor_names, **kwargs):
254 recipe = self.factory.makeOCIRecipe(**kwargs)
255 processors_list = []
256 distroseries = self.factory.makeDistroSeries(
257 distribution=recipe.oci_project.distribution)
258 for proc_name in processor_names:
259 proc = getUtility(IProcessorSet).getByName(proc_name)
260 distro = self.factory.makeDistroArchSeries(
261 distroseries=distroseries, architecturetag=proc_name,
262 processor=proc)
263 distro.addOrUpdateChroot(self.factory.makeLibraryFileAlias())
264 processors_list.append(proc)
265 recipe.setProcessors(processors_list)
266 return recipe
267
268 def makeBuildRequest(self, recipe, requester):
269 build_request = recipe.requestBuilds(requester)
270 # Create the builds for the build request, and set them at the build
271 # request job.
272 builds = recipe.requestBuildsFromJob(requester, build_request)
273 job = removeSecurityProxy(build_request).job
274 removeSecurityProxy(job).builds = builds
275 return build_request
276
277 def test_getBuildInfoArgs_with_build_request(self):
278 owner = self.factory.makePerson()
279 owner.setPreferredEmail(self.factory.makeEmail('owner@foo.com', owner))
280 oci_project = self.factory.makeOCIProject(registrant=owner)
281 recipe = self.makeRecipe(
282 processor_names=["amd64", "386"],
283 oci_project=oci_project, registrant=owner, owner=owner)
284 build_request = self.makeBuildRequest(recipe, recipe.owner)
285 self.assertEqual(2, build_request.builds.count())
286 build = build_request.builds[0]
287 build_per_proc = {i.processor.name: i for i in build_request.builds}
288 job = self.makeJob(build=build)
289
290 self.assertThat(job._getBuildInfoArgs(), MatchesDict({
291 "architectures": MatchesSetwise(Equals("amd64"), Equals("386")),
292 "recipe_owner": Equals({
293 "name": recipe.owner.name,
294 "email": "owner@foo.com"}),
295 "build_request_id": Equals(build_request.id),
296 "build_requester": Equals({
297 "name": build.requester.name,
298 "email": "owner@foo.com"}),
299 "build_request_timestamp": Equals(
300 build_request.date_requested.isoformat()),
301 "build_urls": MatchesDict({
302 "amd64": Equals(canonical_url(build_per_proc["amd64"])),
303 "386": Equals(canonical_url(build_per_proc["386"]))
304 }),
305 }))
306
307 def test_getBuildInfoArgs_hide_email(self):
308 owner = self.factory.makePerson()
309 owner.setPreferredEmail(self.factory.makeEmail('owner@foo.com', owner))
310 owner.hide_email_addresses = True
311 oci_project = self.factory.makeOCIProject(registrant=owner)
312 recipe = self.makeRecipe(
313 processor_names=["amd64"],
314 oci_project=oci_project, registrant=owner, owner=owner)
315 build_request = self.makeBuildRequest(recipe, recipe.owner)
316 build = build_request.builds[0]
317 job = self.makeJob(build=build)
318
319 self.assertThat(job._getBuildInfoArgs(), MatchesDict({
320 "architectures": Equals(["amd64"]),
321 "recipe_owner": Equals({"name": recipe.owner.name, "email": None}),
322 "build_request_id": Equals(build_request.id),
323 "build_requester": Equals({
324 "name": build.requester.name, "email": None}),
325 "build_request_timestamp": Equals(
326 build_request.date_requested.isoformat()),
327 "build_urls": MatchesDict({
328 "amd64": Equals(canonical_url(build_request.builds[0]))
329 }),
330 }))
331
332 def test_getBuildInfoArgs_without_build_request(self):
333 recipe = self.makeRecipe(processor_names=["amd64"])
334 distro_arch_series = removeSecurityProxy(
335 recipe.getAllowedArchitectures()[0])
336 build = self.factory.makeOCIRecipeBuild(
337 recipe=recipe, distro_arch_series=distro_arch_series)
338 job = self.makeJob(build=build)
339 self.assertThat(job._getBuildInfoArgs(), ContainsDict({
340 "architectures": Equals(["amd64"]),
341 "build_request_id": Equals(None),
342 "build_request_timestamp": Equals(None),
343 "build_urls": MatchesDict({"amd64": Equals(canonical_url(build))}),
344 }))
345
346 @defer.inlineCallbacks346 @defer.inlineCallbacks
347 def test_extraBuildArgs_git(self):347 def test_extraBuildArgs_git(self):
348 # extraBuildArgs returns appropriate arguments if asked to build a348 # extraBuildArgs returns appropriate arguments if asked to build a

Subscribers

People subscribed via source and target branches

to status/vote changes: