helpers.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import unittest
  2. from cloudbridge.providers.factory import CloudProviderFactory
  3. from cloudbridge.providers.factory import ProviderList
  4. def create_test_instance(provider):
  5. instance_name = "HelloCloudBridge-{0}".format(provider.name)
  6. if "EC2CloudProvider" in provider.name:
  7. return provider.compute.create_instance(instance_name, "ami-d85e75b0", "t1.micro")
  8. elif "OpenStackCloudProvider" in provider.name:
  9. return provider.compute.create_instance(
  10. "{0}-{1}".format(instance_name, provider.name), "d57696ba-5ed2-43fe-bf78-a587829973a9", "m2.xsmall")
  11. def get_test_instance(provider):
  12. instance = create_test_instance(provider)
  13. instance.wait_till_ready()
  14. return instance
  15. class ProviderTestBase(object):
  16. """
  17. A dummy base class for Test Cases. Does not inherit from unittest.TestCase
  18. to avoid confusing test discovery by unittest and nose2. unittest.TestCase
  19. is injected as a base class by the generator, so calling the unittest constructor
  20. works correctly.
  21. """
  22. def __init__(self, methodName, provider):
  23. unittest.TestCase.__init__(self, methodName=methodName)
  24. self.provider = provider
  25. class ProviderTestCaseGenerator():
  26. """
  27. Generates test cases for all provider - testcase combinations.
  28. Detailed docs at test/__init__.py
  29. """
  30. def __init__(self, test_classes):
  31. self.all_test_classes = test_classes
  32. def create_provider_instance(self, provider_class):
  33. """
  34. Instantiate a default provider instance. All required connection settings
  35. are expected to be set as environment variables.
  36. """
  37. return provider_class({})
  38. def generate_new_test_class(self, name, testcase_class):
  39. """
  40. Generates a new type which inherits from the given testcase_class and unittest.TestCase
  41. """
  42. class_name = "{0}{1}".format(name, testcase_class.__name__)
  43. return type(class_name, (testcase_class, unittest.TestCase), {})
  44. def generate_test_suite_for_provider_testcase(self, provider_class, testcase_class):
  45. """
  46. Generate and return a suite of tests for a specific provider class and testcase
  47. combination
  48. """
  49. testloader = unittest.TestLoader()
  50. testnames = testloader.getTestCaseNames(testcase_class)
  51. suite = unittest.TestSuite()
  52. for name in testnames:
  53. generated_cls = self.generate_new_test_class(provider_class.__name__, testcase_class)
  54. suite.addTest(generated_cls(name, self.create_provider_instance(provider_class)))
  55. return suite
  56. def generate_test_suite_for_provider(self, provider_class):
  57. """
  58. Generate and return a suite of all available tests for a given provider class
  59. """
  60. suite = unittest.TestSuite()
  61. suites = map(lambda test_class: self.generate_test_suite_for_provider_testcase(
  62. provider_class, test_class), self.all_test_classes)
  63. map(suite.addTest, suites)
  64. return suite
  65. def generate_tests(self):
  66. """
  67. Generate and return a suite of tests for all provider and test class combinations
  68. """
  69. factory = CloudProviderFactory()
  70. provider_classes = factory.get_all_provider_classes()
  71. suite = unittest.TestSuite()
  72. suites = map(self.generate_test_suite_for_provider, provider_classes)
  73. map(suite.addTest, suites)
  74. return suite