337 pprops = { |
337 pprops = { |
338 "alias": "cat", |
338 "alias": "cat", |
339 "client_uuid": "2c6a8ff8-20e5-11de-a818-001fd0979039", |
339 "client_uuid": "2c6a8ff8-20e5-11de-a818-001fd0979039", |
340 "disabled": True, |
340 "disabled": True, |
341 "meta_root": os.path.join(self.test_root, "bobcat"), |
341 "meta_root": os.path.join(self.test_root, "bobcat"), |
342 "repositories": [robj, r2obj], |
342 "repository": r2obj, |
343 "selected_repository": r2obj, |
|
344 } |
343 } |
345 |
344 |
346 # Check that all properties can be set at construction time. |
345 # Check that all properties can be set at construction time. |
347 pobj = publisher.Publisher("bobcat", **pprops) |
346 pobj = publisher.Publisher("bobcat", **pprops) |
348 |
347 |
352 self.assertEqual(pprops[p], getattr(pobj, p)) |
351 self.assertEqual(pprops[p], getattr(pobj, p)) |
353 |
352 |
354 # Verify that a copy matches its original. |
353 # Verify that a copy matches its original. |
355 cpobj = copy.copy(pobj) |
354 cpobj = copy.copy(pobj) |
356 for p in pprops: |
355 for p in pprops: |
357 if p in ("repositories", "selected_repository"): |
356 if p == "repository": |
358 # These attributes can't be directly compared. |
357 # These attributes can't be directly compared. |
359 continue |
358 continue |
360 self.assertEqual(getattr(pobj, p), getattr(cpobj, p)) |
359 self.assertEqual(getattr(pobj, p), getattr(cpobj, p)) |
361 |
360 |
362 # Assume that if the origins match, we have the right selected |
361 # Assume that if the origins match, we have the right selected |
363 # repository. |
362 # repository. |
364 self.assertEqual(cpobj.selected_repository.origins, |
363 self.assertEqual(cpobj.repository.origins, |
365 r2obj.origins) |
364 r2obj.origins) |
366 |
365 |
367 # Compare all of the repository objects individually. Assume |
366 # Compare the source_object_id of the copied repository object |
368 # that if the source_object_id matches, that the copy happened |
367 # with the id of the source repository object. |
369 # correctly. |
368 self.assertEqual(id(pobj), cpobj._source_object_id) |
370 for i in range(0, len(pobj.repositories)): |
369 |
371 srepo = pobj.repositories[i] |
|
372 crepo = cpobj.repositories[i] |
|
373 self.assertEqual(id(srepo), crepo._source_object_id) |
|
374 cpobj = None |
370 cpobj = None |
375 |
371 |
376 # Verify that individual properties can be set. |
372 # Verify that individual properties can be set. |
377 pobj = publisher.Publisher("tomcat") |
373 pobj = publisher.Publisher("tomcat") |
378 pobj.prefix = "bobcat" |
374 pobj.prefix = "bobcat" |
384 pobj.add_repository(r) |
380 pobj.add_repository(r) |
385 else: |
381 else: |
386 setattr(pobj, p, pprops[p]) |
382 setattr(pobj, p, pprops[p]) |
387 self.assertEqual(getattr(pobj, p), pprops[p]) |
383 self.assertEqual(getattr(pobj, p), pprops[p]) |
388 |
384 |
389 pobj.selected_repository = robj |
385 pobj.repository = robj |
390 self.assertEqual(pobj.selected_repository, robj) |
386 self.assertEqual(pobj.repository, robj) |
391 |
387 |
392 # An invalid value shouldn't be allowed. |
388 # An invalid value shouldn't be allowed. |
393 self.assertRaises(api_errors.UnknownRepository, setattr, |
389 self.assertRaises(api_errors.UnknownRepository, setattr, |
394 pobj, "selected_repository", -1) |
390 pobj, "repository", -1) |
395 |
|
396 # A repository object not already in the list of repositories |
|
397 # shouldn't be allowed. |
|
398 self.assertRaises(api_errors.UnknownRepository, setattr, |
|
399 pobj, "selected_repository", publisher.Repository()) |
|
400 |
|
401 # Verify that management methods work as expected. |
|
402 pobj.set_selected_repository(origin=r2obj.origins[-1]) |
|
403 self.assertEqual(pobj.selected_repository, r2obj) |
|
404 |
|
405 pobj.set_selected_repository(name=robj.name) |
|
406 self.assertEqual(pobj.selected_repository, robj) |
|
407 |
391 |
408 pobj.reset_client_uuid() |
392 pobj.reset_client_uuid() |
409 self.assertNotEqual(pobj.client_uuid, None) |
393 self.assertNotEqual(pobj.client_uuid, None) |
410 self.assertNotEqual(pobj.client_uuid, pprops["client_uuid"]) |
394 self.assertNotEqual(pobj.client_uuid, pprops["client_uuid"]) |
411 |
395 |
413 self.assertTrue(os.path.exists(pobj.meta_root)) |
397 self.assertTrue(os.path.exists(pobj.meta_root)) |
414 |
398 |
415 pobj.remove_meta_root() |
399 pobj.remove_meta_root() |
416 self.assertFalse(os.path.exists(pobj.meta_root)) |
400 self.assertFalse(os.path.exists(pobj.meta_root)) |
417 |
401 |
418 # Verify that get and remove works as expected. |
|
419 for r in pprops["repositories"]: |
|
420 gr = pobj.get_repository(name=r.name) |
|
421 self.assertEqual(r, gr) |
|
422 |
|
423 gr = pobj.get_repository(origin=r.origins[-1]) |
|
424 self.assertEqual(r, gr) |
|
425 |
|
426 if r == pobj.selected_repository: |
|
427 # Attempting to remove the selected repository |
|
428 # should raise an exception. |
|
429 ex = api_errors.SelectedRepositoryRemoval |
|
430 self.assertRaises(ex, pobj.remove_repository, |
|
431 name=r.name) |
|
432 else: |
|
433 pobj.remove_repository(name=r.name) |
|
434 self.assertRaises(api_errors.UnknownRepository, |
|
435 pobj.get_repository, name=r.name) |
|
436 |
|
437 |
402 |
438 if __name__ == "__main__": |
403 if __name__ == "__main__": |
439 unittest.main() |
404 unittest.main() |
440 |
405 |