test_image_service.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. from cloudbridge.base import helpers as cb_helpers
  2. from cloudbridge.interfaces import MachineImageState
  3. from cloudbridge.interfaces.resources import Instance
  4. from cloudbridge.interfaces.resources import MachineImage
  5. from tests import helpers
  6. from tests.helpers import ProviderTestBase
  7. from tests.helpers import standard_interface_tests as sit
  8. class CloudImageServiceTestCase(ProviderTestBase):
  9. _multiprocess_can_split_ = True
  10. @helpers.skipIfNoService(['compute.images'])
  11. def test_storage_services_event_pattern(self):
  12. self.assertEqual(self.provider.compute.images._service_event_pattern,
  13. "provider.compute.images",
  14. "Event pattern for {} service should be '{}', "
  15. "but found '{}'.".format("images",
  16. "provider.compute.images",
  17. self.provider.compute.images.
  18. _service_event_pattern))
  19. @helpers.skipIfNoService(['compute.images', 'networking.networks',
  20. 'compute.instances'])
  21. def test_create_and_list_image(self):
  22. instance_label = "cb-crudimage-{0}".format(helpers.get_uuid())
  23. img_inst_label = "cb-crudimage-{0}".format(helpers.get_uuid())
  24. # Declare these variables and late binding will allow
  25. # the cleanup method access to the most current values
  26. test_instance = None
  27. subnet = None
  28. def create_img(label):
  29. return test_instance.create_image(label=label)
  30. def cleanup_img(img):
  31. if img:
  32. img.delete()
  33. img.wait_for(
  34. [MachineImageState.UNKNOWN, MachineImageState.ERROR])
  35. img.refresh()
  36. self.assertTrue(
  37. img.state == MachineImageState.UNKNOWN,
  38. "MachineImage.state must be unknown when refreshing after "
  39. "a delete but got %s"
  40. % img.state)
  41. def extra_tests(img):
  42. # check image size
  43. img.refresh()
  44. self.assertGreater(img.min_disk, 0, "Minimum disk"
  45. " size required by image is invalid")
  46. create_instance_from_image(img)
  47. def create_instance_from_image(img):
  48. img_instance = None
  49. with cb_helpers.cleanup_action(
  50. lambda: helpers.cleanup_test_resources(img_instance)):
  51. img_instance = self.provider.compute.instances.create(
  52. img_inst_label, img,
  53. helpers.get_provider_test_data(self.provider, 'vm_type'),
  54. subnet=subnet)
  55. img_instance.wait_till_ready()
  56. self.assertIsInstance(img_instance, Instance)
  57. self.assertEqual(
  58. img_instance.label, img_inst_label,
  59. "Instance label {0} is not equal to the expected label"
  60. " {1}".format(img_instance.label, img_inst_label))
  61. image_id = img.id
  62. self.assertEqual(img_instance.image_id, image_id,
  63. "Image id {0} is not equal to the expected id"
  64. " {1}".format(img_instance.image_id,
  65. image_id))
  66. self.assertIsInstance(img_instance.public_ips, list)
  67. if img_instance.public_ips:
  68. self.assertTrue(
  69. img_instance.public_ips[0],
  70. "public ip should contain a"
  71. " valid value if a list of public_ips exist")
  72. self.assertIsInstance(img_instance.private_ips, list)
  73. self.assertTrue(img_instance.private_ips[0],
  74. "private ip should"
  75. " contain a valid value")
  76. with cb_helpers.cleanup_action(lambda: helpers.cleanup_test_resources(
  77. test_instance)):
  78. subnet = helpers.get_or_create_default_subnet(
  79. self.provider)
  80. test_instance = helpers.get_test_instance(
  81. self.provider, instance_label, subnet=subnet)
  82. sit.check_crud(self, self.provider.compute.images, MachineImage,
  83. "cb-listimg", create_img, cleanup_img,
  84. extra_test_func=extra_tests)