test_cloud_factory.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import unittest
  2. from cloudbridge.cloud import factory
  3. from cloudbridge.cloud import interfaces
  4. from cloudbridge.cloud.base.helpers import TestMockHelperMixin
  5. from cloudbridge.cloud.factory import CloudProviderFactory
  6. from cloudbridge.cloud.interfaces.provider import CloudProvider
  7. from cloudbridge.cloud.providers.aws import AWSCloudProvider
  8. import test.helpers as helpers
  9. class CloudFactoryTestCase(unittest.TestCase):
  10. def test_create_provider_valid(self):
  11. """
  12. Creating a provider with a known name should return
  13. a valid implementation
  14. """
  15. self.assertIsInstance(CloudProviderFactory().create_provider(
  16. factory.ProviderList.AWS, {}),
  17. interfaces.CloudProvider,
  18. "create_provider did not return a valid instance type")
  19. def test_create_provider_invalid(self):
  20. """
  21. Creating a provider with an invalid name should raise a
  22. NotImplementedError
  23. """
  24. with self.assertRaises(NotImplementedError):
  25. CloudProviderFactory().create_provider("ec23", {})
  26. def test_find_provider_mock_valid(self):
  27. """
  28. Searching for a provider with a known mock driver should return
  29. an implementation implementing helpers.TestMockHelperMixin
  30. """
  31. mock = CloudProviderFactory().get_provider_class(
  32. factory.ProviderList.AWS, get_mock=True)
  33. self.assertTrue(
  34. issubclass(
  35. mock,
  36. helpers.TestMockHelperMixin),
  37. "Expected mock for AWS but class does not implement mock provider")
  38. for cls in CloudProviderFactory().get_all_provider_classes(
  39. get_mock=False):
  40. self.assertTrue(
  41. not issubclass(
  42. cls,
  43. TestMockHelperMixin),
  44. "Did not expect mock but %s implements mock provider" %
  45. cls)
  46. def test_get_provider_class_valid(self):
  47. """
  48. Searching for a provider class with a known name should return a valid
  49. class
  50. """
  51. self.assertEqual(CloudProviderFactory().get_provider_class(
  52. factory.ProviderList.AWS), AWSCloudProvider)
  53. def test_get_provider_class_invalid(self):
  54. """
  55. Searching for a provider class with an invalid name should
  56. return None
  57. """
  58. self.assertIsNone(CloudProviderFactory().get_provider_class("aws1"))
  59. def test_register_test_class_invalid(self):
  60. """
  61. Attempting to register an invalid test class should be ignored
  62. """
  63. class DummyClass(object):
  64. SHORT_NAME = 'aws'
  65. factory = CloudProviderFactory()
  66. factory.register_provider_class(DummyClass)
  67. self.assertTrue(DummyClass not in
  68. factory.get_all_provider_classes(get_mock=False))
  69. def test_register_test_class_double(self):
  70. """
  71. Attempting to register the same class twice should register second
  72. instance
  73. """
  74. class DummyClass(CloudProvider):
  75. SHORT_NAME = 'aws'
  76. factory = CloudProviderFactory()
  77. factory.register_provider_class(DummyClass)
  78. self.assertTrue(DummyClass in
  79. factory.get_all_provider_classes(get_mock=False))
  80. self.assertTrue(AWSCloudProvider not in
  81. factory.get_all_provider_classes(get_mock=False))
  82. def test_register_test_class_without_shortname(self):
  83. """
  84. Attempting to register a class without a SHORT_NAME attribute
  85. should be ignored.
  86. """
  87. class DummyClass(CloudProvider):
  88. pass
  89. factory = CloudProviderFactory()
  90. factory.register_provider_class(DummyClass)
  91. self.assertTrue(DummyClass not in
  92. factory.get_all_provider_classes(get_mock=False))