test_provider_factory.py 4.0 KB

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