make CommonConfig as singleton 09/44909/1
authorPeriyasamy Palanisamy <periyasamy.palanisamy@ericsson.com>
Thu, 12 Oct 2017 09:43:05 +0000 (11:43 +0200)
committerPeriyasamy Palanisamy <periyasamy.palanisamy@ericsson.com>
Thu, 12 Oct 2017 09:43:05 +0000 (11:43 +0200)
* It is not necessary to instantiate CommonConfig object from each
testcase and can be made as singleton

Change-Id: I99d995486fbd88ea8a77ec7bd9e41a55047ebaca
Signed-off-by: Periyasamy Palanisamy <periyasamy.palanisamy@ericsson.com>
sdnvpn/lib/config.py

index c3f6b22..99e5d00 100644 (file)
@@ -21,34 +21,48 @@ class CommonConfig(object):
     """
     Common configuration parameters across testcases
     """
+    class __CommonConfig:
+        """
+        Inner class used to make CommonConfig as singleton
+        """
+
+        def __init__(self):
+            self.config_file = pkg_resources.resource_filename(
+                'sdnvpn', 'test/functest/config.yaml')
+            self.keyfile_path = pkg_resources.resource_filename(
+                'sdnvpn', 'artifacts/id_rsa')
+            self.test_db = CONST.results_test_db_url
+            self.quagga_setup_script_path = pkg_resources.resource_filename(
+                'sdnvpn', 'artifacts/quagga_setup.sh')
+            self.line_length = 90  # length for the summary table
+            self.vm_boot_timeout = 180
+            self.default_flavor = ft_utils.get_parameter_from_yaml(
+                "defaults.flavor", self.config_file)
+            self.image_filename = CONST.openstack_image_file_name
+            self.image_format = CONST.openstack_image_disk_format
+            self.image_path = '{0}/{1}'.format(CONST.dir_functest_images,
+                                               self.image_filename)
+            # This is the ubuntu image used by sfc
+            # Basically vanilla ubuntu + some scripts in there
+            # We can use it to setup a quagga instance
+            # TODO does functest have an ubuntu image somewhere?
+            self.ubuntu_image_name = "sdnvpn-ubuntu"
+            self.ubuntu_image_path = '{0}/{1}'.format(
+                CONST.dir_functest_images,
+                "ubuntu-16.04-server-cloudimg-amd64-disk1.img")
+            self.custom_flavor_name = 'm1.custom'
+            self.custom_flavor_ram = 1024
+            self.custom_flavor_disk = 10
+            self.custom_flavor_vcpus = 1
+
+    commonCfgInstance = None
+
     def __init__(self):
-        self.config_file = pkg_resources.resource_filename(
-            'sdnvpn', 'test/functest/config.yaml')
-        self.keyfile_path = pkg_resources.resource_filename(
-            'sdnvpn', 'artifacts/id_rsa')
-        self.test_db = CONST.results_test_db_url
-        self.quagga_setup_script_path = pkg_resources.resource_filename(
-            'sdnvpn', 'artifacts/quagga_setup.sh')
-        self.line_length = 90  # length for the summary table
-        self.vm_boot_timeout = 180
-        self.default_flavor = ft_utils.get_parameter_from_yaml(
-            "defaults.flavor", self.config_file)
-        self.image_filename = CONST.openstack_image_file_name
-        self.image_format = CONST.openstack_image_disk_format
-        self.image_path = '{0}/{1}'.format(CONST.dir_functest_images,
-                                           self.image_filename)
-        # This is the ubuntu image used by sfc
-        # Basically vanilla ubuntu + some scripts in there
-        # We can use it to setup a quagga instance
-        # TODO does functest have an ubuntu image somewhere?
-        self.ubuntu_image_name = "sdnvpn-ubuntu"
-        self.ubuntu_image_path = '{0}/{1}'.format(
-            CONST.dir_functest_images,
-            "ubuntu-16.04-server-cloudimg-amd64-disk1.img")
-        self.custom_flavor_name = 'm1.custom'
-        self.custom_flavor_ram = 1024
-        self.custom_flavor_disk = 10
-        self.custom_flavor_vcpus = 1
+        if not CommonConfig.commonCfgInstance:
+            CommonConfig.commonCfgInstance = CommonConfig.__CommonConfig()
+
+    def __getattr__(self, name):
+        return getattr(self.commonCfgInstance, name)
 
 
 class TestcaseConfig(object):