test_provider_compute_service.py 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import uuid
  2. import ipaddress
  3. from cloudbridge.providers.interfaces import InstanceState
  4. from test.helpers import ProviderTestBase
  5. import test.helpers as helpers
  6. class ProviderComputeServiceTestCase(ProviderTestBase):
  7. def __init__(self, methodName, provider):
  8. super(ProviderComputeServiceTestCase, self).__init__(
  9. methodName=methodName, provider=provider)
  10. def test_crud_instance(self):
  11. name = "CBInstCrud-{0}-{1}".format(
  12. self.provider.name,
  13. uuid.uuid4())
  14. inst = helpers.create_test_instance(self.provider, name)
  15. with helpers.exception_action(lambda: inst.terminate()):
  16. inst.wait_till_ready(interval=self.get_test_wait_interval())
  17. all_instances = self.provider.compute.instances.list()
  18. found_instances = [i for i in all_instances if i.name == name]
  19. self.assertTrue(
  20. len(found_instances) == 1,
  21. "List instances does not return the expected instance %s" %
  22. name)
  23. get_inst = self.provider.compute.instances.get(
  24. inst.instance_id)
  25. self.assertTrue(
  26. found_instances[0].instance_id ==
  27. get_inst.instance_id == inst.instance_id,
  28. "Ids returned by list: {0} and get: {1} are not as "
  29. " expected: {2}" .format(found_instances[0].instance_id,
  30. get_inst.instance_id,
  31. inst.instance_id))
  32. self.assertTrue(
  33. found_instances[0].name ==
  34. get_inst.name == inst.name,
  35. "Names returned by list: {0} and get: {1} are not as "
  36. " expected: {2}" .format(found_instances[0].name,
  37. get_inst.name,
  38. inst.name))
  39. inst.terminate()
  40. inst.wait_for(
  41. [InstanceState.TERMINATED, InstanceState.UNKNOWN],
  42. terminal_states=[InstanceState.ERROR],
  43. interval=self.get_test_wait_interval())
  44. deleted_inst = self.provider.compute.instances.get(
  45. inst.instance_id)
  46. self.assertTrue(
  47. deleted_inst is None or deleted_inst.state in (
  48. InstanceState.TERMINATED,
  49. InstanceState.UNKNOWN),
  50. "Instance %s should have been deleted but still exists." %
  51. name)
  52. def _is_valid_ip(self, address):
  53. try:
  54. ipaddress.ip_address(address)
  55. except ValueError:
  56. return False
  57. return True
  58. def test_instance_properties(self):
  59. instance_name = "CBInstProps-{0}-{1}".format(
  60. self.provider.name,
  61. uuid.uuid4())
  62. test_instance = helpers.get_test_instance(self.provider,
  63. instance_name)
  64. with helpers.exception_action(lambda: test_instance.terminate()):
  65. self.assertEqual(
  66. test_instance.name, instance_name,
  67. "Instance name {0} is not equal to the expected name"
  68. " {1}".format(test_instance.name, instance_name))
  69. image_id = helpers.get_provider_test_data(self.provider, "image")
  70. self.assertEqual(test_instance.image_id, image_id,
  71. "Image id {0} is not equal to the expected id"
  72. " {1}".format(test_instance.image_id, image_id))
  73. self.assertIsInstance(test_instance.public_ips, list)
  74. self.assertIsInstance(test_instance.private_ips, list)
  75. # Must have either a public or a private ip
  76. ip_private = test_instance.private_ips[0] \
  77. if test_instance.private_ips else None
  78. ip_address = test_instance.public_ips[0] \
  79. if test_instance.public_ips else ip_private
  80. self.assertIsNotNone(
  81. ip_address,
  82. "Instance must have either a public IP or a private IP")
  83. self.assertTrue(
  84. self._is_valid_ip(ip_address),
  85. "Instance must have a valid IP address")
  86. test_instance.terminate()