test_interface.py 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import unittest
  2. import cloudbridge
  3. from cloudbridge import interfaces
  4. from cloudbridge.factory import CloudProviderFactory
  5. from cloudbridge.interfaces import TestMockHelperMixin
  6. from cloudbridge.interfaces.exceptions import ProviderConnectionException
  7. from tests.helpers import ProviderTestBase
  8. class CloudInterfaceTestCase(ProviderTestBase):
  9. _multiprocess_can_split_ = True
  10. def test_name_property(self):
  11. # Name should always return a value and should not raise an exception
  12. assert self.provider.name
  13. def test_has_service_valid_service_type(self):
  14. # has_service with a valid service type should return
  15. # a boolean and raise no exceptions
  16. for key, value in interfaces.CloudServiceType.__dict__.items():
  17. if not key.startswith("__"):
  18. self.provider.has_service(value)
  19. def test_has_service_invalid_service_type(self):
  20. # has_service with an invalid service type should return False
  21. self.assertFalse(
  22. self.provider.has_service("NON_EXISTENT_SERVICE"),
  23. "has_service should not return True for a non-existent service")
  24. def test_library_version(self):
  25. # Check that the library version can be retrieved.
  26. self.assertIsNotNone(cloudbridge.get_version(),
  27. "Did not get library version.")
  28. def test_authenticate_success(self):
  29. self.assertTrue(self.provider.authenticate())
  30. def test_authenticate_failure(self):
  31. if isinstance(self.provider, TestMockHelperMixin):
  32. raise unittest.SkipTest(
  33. "Mock providers are not expected to"
  34. " authenticate correctly")
  35. # Mock up test by clearing credentials on a per provider basis
  36. cloned_config = self.provider.config.copy()
  37. if self.provider.PROVIDER_ID == 'aws':
  38. cloned_config['aws_access_key'] = "dummy_a_key"
  39. cloned_config['aws_secret_key'] = "dummy_s_key"
  40. elif self.provider.PROVIDER_ID == 'openstack':
  41. cloned_config['os_username'] = "cb_dummy"
  42. cloned_config['os_password'] = "cb_dummy"
  43. elif self.provider.PROVIDER_ID == 'azure':
  44. cloned_config['azure_subscription_id'] = "cb_dummy"
  45. elif self.provider.PROVIDER_ID == 'gcp':
  46. cloned_config['gcp_service_creds_dict'] = {'dummy': 'dict'}
  47. with self.assertRaises(ProviderConnectionException):
  48. cloned_provider = CloudProviderFactory().create_provider(
  49. self.provider.PROVIDER_ID, cloned_config)
  50. cloned_provider.authenticate()
  51. def test_provider_zone_in_region(self):
  52. cloned_config = self.provider.config.copy()
  53. # Just a simpler way set zone to null for any provider
  54. # instead of doing it individually for each provider
  55. cloned_config['aws_zone_name'] = None
  56. cloned_config['azure_zone_name'] = None
  57. cloned_config['gcp_zone_name'] = None
  58. cloned_config['openstack_zone_name'] = None
  59. cloned_provider = CloudProviderFactory().create_provider(
  60. self.provider.PROVIDER_ID, cloned_config)
  61. region = cloned_provider.compute.regions.get(
  62. cloned_provider.region_name)
  63. matches = [zone.name for zone in region.zones
  64. if zone.name == cloned_provider.zone_name]
  65. # FIXME: GCP always requires a zone, so skip for now
  66. if self.provider.PROVIDER_ID != 'gcp':
  67. self.assertListEqual([cloned_provider.zone_name], matches)
  68. def test_provider_always_has_zone(self):
  69. cloned_config = self.provider.config.copy()
  70. # Just a simpler way set zone to null for any provider
  71. # instead of doing it individually for each provider
  72. cloned_config['aws_zone_name'] = None
  73. cloned_config['azure_zone_name'] = None
  74. cloned_config['gcp_zone_name'] = None
  75. cloned_config['openstack_zone_name'] = None
  76. cloned_provider = CloudProviderFactory().create_provider(
  77. self.provider.PROVIDER_ID, cloned_config)
  78. # FIXME: GCP always requires a zone, so skip for now
  79. if self.provider.PROVIDER_ID != 'gcp':
  80. self.assertIsNotNone(cloned_provider.zone_name)