test_cloud_factory.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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. from cloudbridge.cloud.providers.aws.provider import MockAWSCloudProvider
  9. from test import helpers
  10. class CloudFactoryTestCase(unittest.TestCase):
  11. _multiprocess_can_split_ = True
  12. def test_create_provider_valid(self):
  13. """
  14. Creating a provider with a known name should return
  15. a valid implementation
  16. """
  17. self.assertIsInstance(CloudProviderFactory().create_provider(
  18. factory.ProviderList.AWS, {}),
  19. interfaces.CloudProvider,
  20. "create_provider did not return a valid VM type")
  21. def test_create_provider_invalid(self):
  22. """
  23. Creating a provider with an invalid name should raise a
  24. NotImplementedError
  25. """
  26. with self.assertRaises(NotImplementedError):
  27. CloudProviderFactory().create_provider("ec23", {})
  28. def test_find_provider_mock_valid(self):
  29. """
  30. Searching for a provider with a known mock driver should return
  31. an implementation implementing helpers.TestMockHelperMixin
  32. """
  33. mock = CloudProviderFactory().get_provider_class(
  34. factory.ProviderList.AWS, get_mock=True)
  35. self.assertTrue(
  36. issubclass(
  37. mock,
  38. helpers.TestMockHelperMixin),
  39. "Expected mock for AWS but class does not implement mock provider")
  40. for cls in CloudProviderFactory().get_all_provider_classes(
  41. get_mock=False):
  42. self.assertTrue(
  43. not issubclass(
  44. cls,
  45. TestMockHelperMixin),
  46. "Did not expect mock but %s implements mock provider" %
  47. cls)
  48. def test_get_provider_class_valid(self):
  49. """
  50. Searching for a provider class with a known name should return a valid
  51. class
  52. """
  53. self.assertEqual(CloudProviderFactory().get_provider_class(
  54. factory.ProviderList.AWS), AWSCloudProvider)
  55. def test_get_provider_class_invalid(self):
  56. """
  57. Searching for a provider class with an invalid name should
  58. return None
  59. """
  60. self.assertIsNone(CloudProviderFactory().get_provider_class("aws1"))
  61. def test_register_provider_class_invalid(self):
  62. """
  63. Attempting to register an invalid test class should be ignored
  64. """
  65. class DummyClass(object):
  66. PROVIDER_ID = 'aws'
  67. factory = CloudProviderFactory()
  68. factory.register_provider_class(DummyClass)
  69. self.assertTrue(DummyClass not in
  70. factory.get_all_provider_classes(get_mock=False))
  71. def test_register_provider_class_double(self):
  72. """
  73. Attempting to register the same class twice should register second
  74. instance
  75. """
  76. class DummyClass(CloudProvider):
  77. PROVIDER_ID = 'aws'
  78. factory = CloudProviderFactory()
  79. factory.list_providers()
  80. factory.register_provider_class(DummyClass)
  81. self.assertTrue(DummyClass in
  82. factory.get_all_provider_classes(get_mock=False))
  83. self.assertTrue(AWSCloudProvider not in
  84. factory.get_all_provider_classes(get_mock=False))
  85. def test_register_mock_provider_class_double(self):
  86. """
  87. Attempting to register the same mock provider twice should register
  88. only the second instance
  89. """
  90. class DummyClass(CloudProvider, TestMockHelperMixin):
  91. PROVIDER_ID = 'aws'
  92. factory = CloudProviderFactory()
  93. factory.list_providers()
  94. factory.register_provider_class(DummyClass)
  95. self.assertTrue(DummyClass in
  96. factory.get_all_provider_classes(get_mock=True))
  97. self.assertTrue(MockAWSCloudProvider not in
  98. factory.get_all_provider_classes(get_mock=True))
  99. def test_register_provider_class_without_id(self):
  100. """
  101. Attempting to register a class without a PROVIDER_ID attribute
  102. should be ignored.
  103. """
  104. class DummyClass(CloudProvider):
  105. pass
  106. factory = CloudProviderFactory()
  107. factory.register_provider_class(DummyClass)
  108. self.assertTrue(DummyClass not in
  109. factory.get_all_provider_classes(get_mock=False))