test_cloud_factory.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import unittest
  2. from cloudbridge.cloud import factory
  3. from cloudbridge.cloud import interfaces
  4. from cloudbridge.cloud.factory import CloudProviderFactory
  5. from cloudbridge.cloud.interfaces import TestMockHelperMixin
  6. from cloudbridge.cloud.interfaces.provider import CloudProvider
  7. from cloudbridge.cloud.providers.aws import AWSCloudProvider
  8. class CloudFactoryTestCase(unittest.TestCase):
  9. _multiprocess_can_split_ = True
  10. def test_create_provider_valid(self):
  11. # Creating a provider with a known name should return
  12. # a valid implementation
  13. self.assertIsInstance(CloudProviderFactory().create_provider(
  14. factory.ProviderList.AWS, {}),
  15. interfaces.CloudProvider,
  16. "create_provider did not return a valid VM type")
  17. def test_create_provider_invalid(self):
  18. # Creating a provider with an invalid name should raise a
  19. # NotImplementedError
  20. with self.assertRaises(NotImplementedError):
  21. CloudProviderFactory().create_provider("ec23", {})
  22. def test_get_provider_class_valid(self):
  23. # Searching for a provider class with a known name should return a
  24. # valid class
  25. self.assertEqual(CloudProviderFactory().get_provider_class(
  26. factory.ProviderList.AWS), AWSCloudProvider)
  27. def test_get_provider_class_invalid(self):
  28. # Searching for a provider class with an invalid name should
  29. # return None
  30. self.assertIsNone(CloudProviderFactory().get_provider_class("aws1"))
  31. def test_find_provider_include_mocks(self):
  32. self.assertTrue(
  33. any(cls for cls
  34. in CloudProviderFactory().get_all_provider_classes()
  35. if issubclass(cls, TestMockHelperMixin)),
  36. "expected to find at least one mock provider")
  37. def test_find_provider_exclude_mocks(self):
  38. for cls in CloudProviderFactory().get_all_provider_classes(
  39. ignore_mocks=True):
  40. self.assertTrue(
  41. not issubclass(cls, TestMockHelperMixin),
  42. "Did not expect mock but %s implements mock provider" % cls)
  43. def test_register_provider_class_invalid(self):
  44. # Attempting to register an invalid test class should be ignored
  45. class DummyClass(object):
  46. PROVIDER_ID = 'aws'
  47. factory = CloudProviderFactory()
  48. factory.register_provider_class(DummyClass)
  49. self.assertTrue(DummyClass not in
  50. factory.get_all_provider_classes())
  51. def test_register_provider_class_double(self):
  52. # Attempting to register the same class twice should register second
  53. # instance
  54. class DummyClass(CloudProvider):
  55. PROVIDER_ID = 'aws'
  56. factory = CloudProviderFactory()
  57. factory.list_providers()
  58. factory.register_provider_class(DummyClass)
  59. self.assertTrue(DummyClass in
  60. factory.get_all_provider_classes())
  61. self.assertTrue(AWSCloudProvider not in
  62. factory.get_all_provider_classes())
  63. def test_register_provider_class_without_id(self):
  64. # Attempting to register a class without a PROVIDER_ID attribute
  65. # should be ignored.
  66. class DummyClass(CloudProvider):
  67. pass
  68. factory = CloudProviderFactory()
  69. factory.register_provider_class(DummyClass)
  70. self.assertTrue(DummyClass not in
  71. factory.get_all_provider_classes())