nuwan_ag 10 лет назад
Родитель
Сommit
c64fdaed02

+ 7 - 4
cloudbridge/providers/base.py

@@ -5,6 +5,9 @@ from cloudbridge.providers.interfaces import SecurityGroup
 
 
 class BaseCloudProvider(CloudProvider):
 class BaseCloudProvider(CloudProvider):
 
 
+    def __init__(self, config):
+        self.config = config
+
     def name(self):
     def name(self):
         return str(self.__class__.__name__)
         return str(self.__class__.__name__)
 
 
@@ -25,11 +28,11 @@ class BaseCloudProvider(CloudProvider):
             pass  # Undefined service type
             pass  # Undefined service type
         return False
         return False
 
 
-    def _get_config_value(self, config, key, default_value):
-        if isinstance(config, dict):
-            return config.get(key, default_value)
+    def _get_config_value(self, key, default_value):
+        if isinstance(self.config, dict):
+            return self.config.get(key, default_value)
         else:
         else:
-            return getattr(config, key) if hasattr(config, key) and getattr(config, key) else default_value
+            return getattr(self.config, key) if hasattr(self.config, key) and getattr(self.config, key) else default_value
 
 
 
 
 class BaseKeyPair(KeyPair):
 class BaseKeyPair(KeyPair):

+ 8 - 10
cloudbridge/providers/ec2/__init__.py

@@ -15,20 +15,18 @@ from cloudbridge.providers.interfaces import KeyPair
 class EC2CloudProviderV1(BaseCloudProvider):
 class EC2CloudProviderV1(BaseCloudProvider):
 
 
     def __init__(self, config):
     def __init__(self, config):
-        self.config = config
+        super(EC2CloudProviderV1, self).__init__(config)
         self.cloud_type = 'ec2'
         self.cloud_type = 'ec2'
 
 
         # Initialize cloud connection fields
         # Initialize cloud connection fields
-        self.a_key = self._get_config_value(
-            config, 'access_key', os.environ.get('EC2_ACCESS_KEY', None))
-        self.s_key = self._get_config_value(
-            config, 'secret_key', os.environ.get('EC2_SECRET_KEY', None))
-        self.is_secure = self._get_config_value(config, 'is_secure', True)
-        self.region_name = self._get_config_value(config, 'region_name', 'us-east-1')
+        self.a_key = self._get_config_value('access_key', os.environ.get('EC2_ACCESS_KEY', None))
+        self.s_key = self._get_config_value('secret_key', os.environ.get('EC2_SECRET_KEY', None))
+        self.is_secure = self._get_config_value('is_secure', True)
+        self.region_name = self._get_config_value('region_name', 'us-east-1')
         self.region_endpoint = self._get_config_value(
         self.region_endpoint = self._get_config_value(
-            config, 'region_endpoint', 'ec2.us-east-1.amazonaws.com')
-        self.ec2_port = self._get_config_value(config, 'ec2_port', '')
-        self.ec2_conn_path = self._get_config_value(config, 'ec2_port', '/')
+            'region_endpoint', 'ec2.us-east-1.amazonaws.com')
+        self.ec2_port = self._get_config_value('ec2_port', '')
+        self.ec2_conn_path = self._get_config_value('ec2_port', '/')
 
 
         # Create a connection object
         # Create a connection object
         self.ec2_conn = self._connect_ec2()
         self.ec2_conn = self._connect_ec2()

+ 10 - 0
cloudbridge/providers/interfaces.py

@@ -40,6 +40,16 @@ class CloudProvider(object):
         raise NotImplementedError(
         raise NotImplementedError(
             '__init__ not implemented by this provider')
             '__init__ not implemented by this provider')
 
 
+    def config(self):
+        """
+        Returns the config object associated with this provider.
+
+        :rtype: ``object``
+        :return:  The config object used to initialize this provider
+        """
+        raise NotImplementedError(
+            'CloudProvider.config not implemented by this provider')
+
     def has_service(self, service_type):
     def has_service(self, service_type):
         """
         """
         Checks whether this provider supports a given service.
         Checks whether this provider supports a given service.

+ 6 - 9
cloudbridge/providers/openstack/__init__.py

@@ -17,18 +17,15 @@ from cloudbridge.providers.interfaces import KeyPair
 class OpenStackCloudProviderV1(BaseCloudProvider):
 class OpenStackCloudProviderV1(BaseCloudProvider):
 
 
     def __init__(self, config):
     def __init__(self, config):
-        self.config = config
+        super(OpenStackCloudProviderV1, self).__init__(config)
 
 
         self.api_version = self._get_config_value(
         self.api_version = self._get_config_value(
-            config, 'api_version', os.environ.get('OS_COMPUTE_API_VERSION', 2))
-        self.username = self._get_config_value(
-            config, 'username', os.environ.get('OS_USERNAME', None))
-        self.password = self._get_config_value(
-            config, 'password', os.environ.get('OS_PASSWORD', None))
+            'api_version', os.environ.get('OS_COMPUTE_API_VERSION', 2))
+        self.username = self._get_config_value('username', os.environ.get('OS_USERNAME', None))
+        self.password = self._get_config_value('password', os.environ.get('OS_PASSWORD', None))
         self.tenant_name = self._get_config_value(
         self.tenant_name = self._get_config_value(
-            config, 'tenant_name', os.environ.get('OS_TENANT_NAME', None))
-        self.auth_url = self._get_config_value(
-            config, 'auth_url', os.environ.get('OS_AUTH_URL', None))
+            'tenant_name', os.environ.get('OS_TENANT_NAME', None))
+        self.auth_url = self._get_config_value('auth_url', os.environ.get('OS_AUTH_URL', None))
 
 
         self.nova = self._connect_nova()
         self.nova = self._connect_nova()
         self.keystone = self._connect_keystone()
         self.keystone = self._connect_keystone()

+ 9 - 4
test/helpers.py

@@ -33,6 +33,13 @@ class ProviderTestCaseGenerator():
         """
         """
         return provider_class({})
         return provider_class({})
 
 
+    def generate_new_test_class(self, name, testcase_class):
+        """
+        Generates a new type which inherits from the given testcase_class and unittest.TestCase
+        """
+        class_name = "{0}{1}".format(name, testcase_class.__name__)
+        return type(class_name, (testcase_class, unittest.TestCase), {})
+
     def generate_test_suite_for_provider_testcase(self, provider_class, testcase_class):
     def generate_test_suite_for_provider_testcase(self, provider_class, testcase_class):
         """
         """
         Generate and return a suite of tests for a specific provider class and testcase
         Generate and return a suite of tests for a specific provider class and testcase
@@ -42,10 +49,8 @@ class ProviderTestCaseGenerator():
         testnames = testloader.getTestCaseNames(testcase_class)
         testnames = testloader.getTestCaseNames(testcase_class)
         suite = unittest.TestSuite()
         suite = unittest.TestSuite()
         for name in testnames:
         for name in testnames:
-            generated_cls = type(
-                "test" + provider_class.__name__ + str(testcase_class.__name__), (testcase_class, unittest.TestCase), {})
-            suite.addTest(
-                generated_cls(name, self.create_provider_instance(provider_class)))
+            generated_cls = self.generate_new_test_class(provider_class.__name__, testcase_class)
+            suite.addTest(generated_cls(name, self.create_provider_instance(provider_class)))
         return suite
         return suite
 
 
     def generate_test_suite_for_provider(self, provider_class):
     def generate_test_suite_for_provider(self, provider_class):