diff --git a/tungsten_tempest_plugin/config.py b/tungsten_tempest_plugin/config.py
index b82299e..4fd1bb7 100644
--- a/tungsten_tempest_plugin/config.py
+++ b/tungsten_tempest_plugin/config.py
@@ -35,6 +35,9 @@
     cfg.StrOpt('catalog_type',
                default='sdn-l-config',
                help="Catalog type of the SDN service"),
+    cfg.StrOpt('contrail_version',
+               default='5.0',
+               help="Version of SDN service"),
 ]
 
 tungsten_log_group = cfg.OptGroup(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_alarm.py b/tungsten_tempest_plugin/tests/api/contrail/test_alarm.py
index fa76dd4..d293f4d 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_alarm.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_alarm.py
@@ -32,42 +32,29 @@
 class AlarmContrailTest(rbac_base.BaseContrailTest):
     """Test class to test Alarm objects using RBAC roles"""
 
-    def _create_global_system_config(self):
-        config_name = data_utils.rand_name('test-config')
-        parent_type = 'config-root'
-        config_fq_name = [config_name]
-        new_config = \
-            self.config_client.create_global_system_configs(
-                parent_type=parent_type,
-                display_name=config_name,
-                fq_name=config_fq_name)['global-system-config']
-        self.addCleanup(self._try_delete_resource,
-                        (self.config_client.
-                         delete_global_system_config),
-                        new_config['uuid'])
-        return new_config
-
-    def _create_alarm(self, global_system_config):
+    def _create_alarm(self):
         post_body = {
-            'fq_name': [global_system_config,
+            'fq_name': ['default-domain',
+                        self.tenant_name,
                         data_utils.rand_name('alarm')],
             'alarm_severity': 1,
-            'parent_type': 'global-system-config',
+            'parent_type': 'project',
             'uve_keys': {
-                'uve_key': ['analytics_node']
+                'uve_key': ['virtual-network']
             },
             'alarm_rules': {
                 'or_list': [{
                     'and_list': [{
                         'operation': '!=',
-                        'operand1': 'NodeStatus.process_info.process_state',
+                        'operand1': data_utils.rand_name('tempest-alarm'),
                         'operand2': {
-                            'json_value': '"PROCESS_STATE_RUNNING"'
+                            'uve_attribute': 'name'
                         }
                     }]
                 }]
             }
         }
+
         resp_body = self.alarm_client.create_alarms(
             **post_body)
         alarm_uuid = resp_body['alarm']['uuid']
@@ -95,19 +82,15 @@
     @decorators.idempotent_id('7fe55d0c-e54a-4bb7-95a6-9c53f9e9c4bf')
     def test_create_alarms(self):
         """test method for create alarms"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
         with self.rbac_utils.override_role(self):
-            self._create_alarm(global_system_config)
+            self._create_alarm()
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["show_alarm"])
     @decorators.idempotent_id('ab0ccbe4-7bfe-4176-890a-d438ee04290d')
     def test_show_alarm(self):
         """test method for show alarms"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        alarm_uuid = self._create_alarm(global_system_config)
+        alarm_uuid = self._create_alarm()
         with self.rbac_utils.override_role(self):
             self.alarm_client.show_alarm(alarm_uuid)
 
@@ -116,9 +99,7 @@
     @decorators.idempotent_id('ab331cca-ee53-4106-9b30-7319bfb1bea7')
     def test_update_alarm(self):
         """test method for update alarms"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        alarm_uuid = self._create_alarm(global_system_config)
+        alarm_uuid = self._create_alarm()
         with self.rbac_utils.override_role(self):
             self._update_alarm(alarm_uuid)
 
@@ -128,7 +109,6 @@
     def test_delete_alarm(self):
         """test method for delete alarms"""
         # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        alarm_uuid = self._create_alarm(global_system_config)
+        alarm_uuid = self._create_alarm()
         with self.rbac_utils.override_role(self):
             self.alarm_client.delete_alarm(alarm_uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_analytics_node.py b/tungsten_tempest_plugin/tests/api/contrail/test_analytics_node.py
index 85dedeb..9a15ab4 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_analytics_node.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_analytics_node.py
@@ -32,25 +32,10 @@
 class ContrailAnalyticsNodeTest(rbac_base.BaseContrailTest):
     """Test class to test analytics node objects using RBAC roles"""
 
-    def _create_global_system_config(self):
-        config_name = data_utils.rand_name('test-config')
-        parent_type = 'config-root'
-        config_fq_name = [config_name]
-        new_config = \
-            self.config_client.create_global_system_configs(
-                parent_type=parent_type,
-                display_name=config_name,
-                fq_name=config_fq_name)['global-system-config']
-        self.addCleanup(self._try_delete_resource,
-                        (self.config_client.
-                         delete_global_system_config),
-                        new_config['uuid'])
-        return new_config
-
-    def _create_analytics_node(self, global_system_config):
+    def _create_analytics_node(self):
         node_name = data_utils.rand_name('analytics-node')
         post_data = {
-            'fq_name': [global_system_config, node_name],
+            'fq_name': ['default-global-system-config', node_name],
             'parent_type': 'global-system-config'
         }
         new_node = self.analytics_node_client.create_analytics_nodes(
@@ -73,9 +58,7 @@
     @decorators.idempotent_id('b51043fd-77ba-4312-b96f-569ed5153338')
     def test_show_analytics_node(self):
         """test method for show analytics nodes"""
-        # create global system config
-        global_system_config = self._create_global_system_config()['name']
-        new_node = self._create_analytics_node(global_system_config)
+        new_node = self._create_analytics_node()
         with self.rbac_utils.override_role(self):
             self.analytics_node_client.show_analytics_node(new_node['uuid'])
 
@@ -84,19 +67,15 @@
     @decorators.idempotent_id('c57482c9-fcb4-4f41-95b0-7f0ffeee3dc3')
     def test_create_analytics_nodes(self):
         """test method for create analytics nodes"""
-        # create global system config
-        global_system_config = self._create_global_system_config()['name']
         with self.rbac_utils.override_role(self):
-            self._create_analytics_node(global_system_config)
+            self._create_analytics_node()
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["update_analytics_node"])
     @decorators.idempotent_id('ff50a2df-6283-409e-ab03-c13b63acc8a0')
     def test_update_analytics_node(self):
         """test method for update analytics nodes"""
-        # create global system config
-        global_system_config = self._create_global_system_config()['name']
-        new_node = self._create_analytics_node(global_system_config)
+        new_node = self._create_analytics_node()
         update_name = data_utils.rand_name('updated_node')
         with self.rbac_utils.override_role(self):
             self.analytics_node_client.update_analytics_node(
@@ -107,8 +86,6 @@
     @decorators.idempotent_id('972f997a-c89f-4227-8ae9-5a2335ec0b0a')
     def test_delete_analytics_node(self):
         """test method for delete analytics nodes"""
-        # create global system config
-        global_system_config = self._create_global_system_config()['name']
-        new_node = self._create_analytics_node(global_system_config)
+        new_node = self._create_analytics_node()
         with self.rbac_utils.override_role(self):
             self.analytics_node_client.delete_analytics_node(new_node['uuid'])
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_config_client.py b/tungsten_tempest_plugin/tests/api/contrail/test_config_client.py
index 98ee4e9..213bd47 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_config_client.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_config_client.py
@@ -17,7 +17,9 @@
 Tempest test-case to test config objects using RBAC roles
 """
 
+import json
 import random
+import testtools
 
 from oslo_log import log as logging
 from patrole_tempest_plugin import rbac_rule_validation
@@ -43,7 +45,10 @@
     def _create_config_node(self):
         config_node_ip_address = self._random_ip_generator()
         display_name = data_utils.rand_name('config_node')
-        fq_name = [display_name]
+        if float(CONF.sdn.contrail_version) < 5:
+            fq_name = [display_name]
+        else:
+            fq_name = ['default-global-system-config', display_name]
         config_node = self.config_client.create_config_nodes(
             config_node_ip_address=config_node_ip_address,
             display_name=display_name, fq_name=fq_name)
@@ -195,10 +200,12 @@
         with self.rbac_utils.override_role(self):
             self.config_client.list_global_system_configs()
 
+    @testtools.skipUnless(float(CONF.sdn.contrail_version) < 5,
+                          'Not supported in OpenContrail versions >= 5')
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["create_global_system_configs"])
     @decorators.idempotent_id('e0ba6a20-3e28-47ac-bf95-9a848fcee49a')
-    def test_create_global_sys_configs(self):
+    def test_create_global_system_configs(self):
         """test method for create global system config service objects"""
         with self.rbac_utils.override_role(self):
             self._create_global_system_config()
@@ -207,16 +214,34 @@
                                  rules=["show_global_system_config"])
     @decorators.idempotent_id('4b9f9131-cb34-4b7d-9d06-c6aca85cce3a')
     def test_show_global_system_config(self):
-        """test method for show global system config service objects"""
-        new_config = self._create_global_system_config()
-        with self.rbac_utils.override_role(self):
-            self.config_client.show_global_system_config(
-                new_config['uuid'])
+        if float(CONF.sdn.contrail_version) < 5:
+            new_config = self._create_global_system_config()
+            with self.rbac_utils.override_role(self):
+                self.config_client.show_global_system_config(
+                    new_config['uuid'])
+        else:
+            resp, resp_body = self.config_client.list_global_system_configs()
+            # There must exist just one global system config in Contrail
+            # verion > 4.x. There may be more than one in other versions
+            # which is bug fixed in later releases.
+            body = json.loads(resp_body)['global-system-configs']
+            self.assertGreater(len(body), 0,
+                               msg="No global system config exists. "
+                                   "There must exists "
+                                   "default-global-sytem-config "
+                                   "at least by default")
+            for gsc in body:
+                if gsc['fq_name'][0] == 'default-global-system-config':
+                    with self.rbac_utils.override_role(self):
+                        self.config_client.show_global_system_config(
+                            gsc['uuid'])
 
+    @testtools.skipUnless(float(CONF.sdn.contrail_version) < 5,
+                          'Not supported in OpenContrail versions >= 5')
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["update_global_system_config"])
     @decorators.idempotent_id('4f90dc83-da59-45a4-8ab6-b387bd6c2df4')
-    def test_update_global_sys_config(self):
+    def test_update_global_system_config(self):
         """test method for update global system config service objects"""
         new_config = self._create_global_system_config()
         update_name = data_utils.rand_name('test')
@@ -225,12 +250,13 @@
                 new_config['uuid'],
                 display_name=update_name)
 
+    @testtools.skipUnless(float(CONF.sdn.contrail_version) < 5,
+                          'Not supported in OpenContrail versions >= 5')
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["delete_global_system_config"])
     @decorators.idempotent_id('fce1653c-e657-4a1e-8ced-7e02d297d6c9')
-    def test_delete_global_sys_config(self):
+    def test_delete_global_system_config(self):
         """test method for delete global system config service objects"""
         new_config = self._create_global_system_config()
         with self.rbac_utils.override_role(self):
-            self.config_client.delete_global_system_config(
-                new_config['uuid'])
+            self.config_client.delete_global_system_config(new_config['uuid'])
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_database.py b/tungsten_tempest_plugin/tests/api/contrail/test_database.py
index d6c7d96..7caa76e 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_database.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_database.py
@@ -32,27 +32,12 @@
 class ContrailDatabaseTest(rbac_base.BaseContrailTest):
     """Test class to test database objects using RBAC roles"""
 
-    def _create_global_system_config(self):
-        config_name = data_utils.rand_name('test-config')
-        parent_type = 'config-root'
-        config_fq_name = [config_name]
-        new_config = \
-            self.config_client.create_global_system_configs(
-                parent_type=parent_type,
-                display_name=config_name,
-                fq_name=config_fq_name)['global-system-config']
-        self.addCleanup(self._try_delete_resource,
-                        (self.config_client.
-                         delete_global_system_config),
-                        new_config['uuid'])
-        return new_config
-
     def _delete_database_node(self, db_node_id):
         return self.db_client.delete_database_node(db_node_id)
 
-    def _create_database_node(self, global_system_config):
+    def _create_database_node(self):
         name = data_utils.rand_name('database')
-        fq_name = [global_system_config, name]
+        fq_name = ['default-global-system-config', name]
         database_node_ip_address = '1.1.1.1'
         parent_type = 'global-system-config'
         db_node = self.db_client.create_databse_nodes(
@@ -71,9 +56,7 @@
     @decorators.idempotent_id('5ae6f965-6161-443f-b19e-dfa7b364c533')
     def test_list_database_nodes(self):
         """test method for list database objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        self._create_database_node(global_system_config)
+        self._create_database_node()
         with self.rbac_utils.override_role(self):
             self.db_client.list_database_nodes()
 
@@ -82,31 +65,24 @@
     @decorators.idempotent_id('4a07d9a8-7b99-43bd-b628-06c023993aab')
     def test_show_database_node(self):
         """test method for show database objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        db_node = self._create_database_node(global_system_config)
-        db_node_id = db_node['uuid']
+        db_node = self._create_database_node()
         with self.rbac_utils.override_role(self):
-            self.db_client.show_database_node(db_node_id)
+            self.db_client.show_database_node(db_node['uuid'])
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["create_database_nodes"])
     @decorators.idempotent_id('b9aa9c6b-9381-44f0-94fb-e4523bf2a87e')
     def test_create_database_nodes(self):
         """test method for update database objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
         with self.rbac_utils.override_role(self):
-            self._create_database_node(global_system_config)
+            self._create_database_node()
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["update_database_node"])
     @decorators.idempotent_id('6e59f393-0e55-4327-871e-7f0ad53f2e17')
     def test_update_database_node(self):
         """test method for update database objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        db_node = self._create_database_node(global_system_config)
+        db_node = self._create_database_node()
         db_node_id = db_node['uuid']
         display_name = data_utils.rand_name('DatabaseNew')
         with self.rbac_utils.override_role(self):
@@ -119,9 +95,7 @@
     @decorators.idempotent_id('0cbc5a52-d7e7-4a1c-a85d-6bf44012d99b')
     def test_delete_database_node(self):
         """test method for delete database objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        db_node = self._create_database_node(global_system_config)
+        db_node = self._create_database_node()
         db_node_id = db_node['uuid']
         with self.rbac_utils.override_role(self):
             self._delete_database_node(db_node_id)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_forwarding_class.py b/tungsten_tempest_plugin/tests/api/contrail/test_forwarding_class.py
index c79d630..edf8733 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_forwarding_class.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_forwarding_class.py
@@ -32,25 +32,10 @@
 class ContrailForwardingClassTest(rbac_base.BaseContrailTest):
     """Test class to test Forwarding class objects using RBAC roles"""
 
-    def _create_global_system_config(self):
-        config_name = data_utils.rand_name('test-config')
-        parent_type = 'config-root'
-        config_fq_name = [config_name]
-        new_config = \
-            self.config_client.create_global_system_configs(
-                parent_type=parent_type,
-                display_name=config_name,
-                fq_name=config_fq_name)['global-system-config']
-        self.addCleanup(self._try_delete_resource,
-                        (self.config_client.
-                         delete_global_system_config),
-                        new_config['uuid'])
-        return new_config
-
-    def _create_qos_global_configs(self, global_system_config):
+    def _create_qos_global_configs(self):
         name = data_utils.rand_name('test-rbac-qos-global-config')
         parent_type = 'global-system-config'
-        fq_name = [global_system_config, name]
+        fq_name = ['default-global-system-config', name]
         qos_global_config = self.qos_client.create_global_qos_configs(
             fq_name=fq_name,
             parent_type=parent_type)['global-qos-config']
@@ -61,11 +46,10 @@
         return qos_global_config
 
     def _create_forwarding_class(self,
-                                 global_system_config,
                                  global_qos_config):
         display_name = data_utils.rand_name('forwarding-class')
         parent_type = 'global-qos-config'
-        fq_name = [global_system_config, global_qos_config, "1"]
+        fq_name = ['default-global-system-config', global_qos_config, "1"]
         forwarding_class_id = data_utils.rand_int_id(1, 200)
         post_data = {
             'fq_name': fq_name,
@@ -93,13 +77,10 @@
     @decorators.idempotent_id('8ef21f71-72a4-4de9-af93-6e759aa463c0')
     def test_show_forwarding_class(self):
         """test method for show forwarding classes objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
         # Create a global qos config
-        global_qos_config = \
-            self._create_qos_global_configs(global_system_config)['name']
-        new_fclass = self._create_forwarding_class(global_system_config,
-                                                   global_qos_config)
+        self.global_qos_config = \
+            self._create_qos_global_configs()['name']
+        new_fclass = self._create_forwarding_class(self.global_qos_config)
         with self.rbac_utils.override_role(self):
             self.forwarding_class_client.show_forwarding_class(
                 new_fclass['uuid'])
@@ -107,29 +88,23 @@
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["create_forwarding_classs"])
     @decorators.idempotent_id('d098859c-ad36-4385-8fb0-c00934a99b6f')
-    def test_create_forwarding_classs(self):
+    def test_create_forwarding_class(self):
         """test method for create forwarding classes objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
         # Create a global qos config
-        global_qos_config = \
-            self._create_qos_global_configs(global_system_config)['name']
+        self.global_qos_config = \
+            self._create_qos_global_configs()['name']
         with self.rbac_utils.override_role(self):
-            self._create_forwarding_class(global_system_config,
-                                          global_qos_config)
+            self._create_forwarding_class(self.global_qos_config)
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["update_forwarding_class"])
     @decorators.idempotent_id('589dc03d-a25d-48be-9d9c-d3f92ff2cfc6')
     def test_update_forwarding_class(self):
         """test method for update forwarding classes objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
         # Create a global qos config
-        global_qos_config = \
-            self._create_qos_global_configs(global_system_config)['name']
-        new_fclass = self._create_forwarding_class(global_system_config,
-                                                   global_qos_config)
+        self.global_qos_config = \
+            self._create_qos_global_configs()['name']
+        new_fclass = self._create_forwarding_class(self.global_qos_config)
         update_name = data_utils.rand_name('updated_fclass')
         with self.rbac_utils.override_role(self):
             self.forwarding_class_client.update_forwarding_class(
@@ -140,13 +115,10 @@
     @decorators.idempotent_id('a0348ffc-68c5-4d94-ba03-d08483503ced')
     def test_delete_forwarding_class(self):
         """test method for delete forwarding classes objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
         # Create a global qos config
-        global_qos_config = \
-            self._create_qos_global_configs(global_system_config)['name']
-        new_fclass = self._create_forwarding_class(global_system_config,
-                                                   global_qos_config)
+        self.global_qos_config = \
+            self._create_qos_global_configs()['name']
+        new_fclass = self._create_forwarding_class(self.global_qos_config)
         with self.rbac_utils.override_role(self):
             self.forwarding_class_client.delete_forwarding_class(
                 new_fclass['uuid'])
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_interfaces.py b/tungsten_tempest_plugin/tests/api/contrail/test_interfaces.py
index 697a210..450c158 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_interfaces.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_interfaces.py
@@ -36,26 +36,10 @@
     physical_if_name = data_utils.rand_name('rbac-physical-interface')
     logical_if_name = data_utils.rand_name('rbac-logical-interface')
 
-    def _create_global_system_config(self):
-        config_name = data_utils.rand_name('test-config')
-        parent_type = 'config-root'
-        config_fq_name = [config_name]
-        new_config = \
-            self.config_client.create_global_system_configs(
-                parent_type=parent_type,
-                display_name=config_name,
-                fq_name=config_fq_name)['global-system-config']
-        self.addCleanup(self._try_delete_resource,
-                        (self.config_client.
-                         delete_global_system_config),
-                        new_config['uuid'])
-        return new_config
-
     def _create_physical_router(self):
-        self.global_system_config = self._create_global_system_config()['name']
-
-        fq_name = [self.global_system_config, self.router_name]
-        post_body = {'parent_type': 'global-system-config', 'fq_name': fq_name}
+        fq_name = ['default-global-system-config', self.router_name]
+        post_body = {'parent_type': 'global-system-config'}
+        post_body['fq_name'] = fq_name
 
         router = self.router_client.create_physical_routers(
             **post_body)['physical-router']
@@ -65,9 +49,10 @@
         return router
 
     def _create_physical_interface(self):
-        fq_name = [self.global_system_config, self.router_name,
+        fq_name = ['default-global-system-config', self.router_name,
                    self.physical_if_name]
-        post_body = {'parent_type': 'physical-router', 'fq_name': fq_name}
+        post_body = {'parent_type': 'physical-router'}
+        post_body['fq_name'] = fq_name
 
         physical_if = self.interface_client.create_physical_interfaces(
             **post_body)['physical-interface']
@@ -77,9 +62,10 @@
         return physical_if
 
     def _create_logical_interface(self):
-        fq_name = [self.global_system_config, self.router_name,
+        fq_name = ['default-global-system-config', self.router_name,
                    self.physical_if_name, self.logical_if_name]
-        post_body = {'parent_type': 'physical-interface', 'fq_name': fq_name}
+        post_body = {'parent_type': 'physical-interface'}
+        post_body['fq_name'] = fq_name
 
         logical_if = self.interface_client.create_logical_interfaces(
             **post_body)['logical-interface']
@@ -101,7 +87,6 @@
     @decorators.idempotent_id('066f53d8-3d2a-4ad6-983f-243de7c12962')
     def test_create_physical_interfaces(self):
         """test method for create physical interfaces objects"""
-
         self._create_physical_router()
         with self.rbac_utils.override_role(self):
             self._create_physical_interface()
@@ -131,7 +116,6 @@
         """test method for delete physical interfaces objects"""
         self._create_physical_router()
         uuid = self._create_physical_interface()['uuid']
-
         with self.rbac_utils.override_role(self):
             self.interface_client.delete_physical_interface(uuid)
 
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_load_balancer.py b/tungsten_tempest_plugin/tests/api/contrail/test_load_balancer.py
index c8f136d..d7e25c4 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_load_balancer.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_load_balancer.py
@@ -22,6 +22,7 @@
 from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
+from tempest import test
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
@@ -32,6 +33,13 @@
 class BaseLoadBalancerTest(rbac_base.BaseContrailTest):
     """Base class to test load balancer objects using RBAC roles"""
 
+    @classmethod
+    def skip_checks(cls):
+        super(BaseLoadBalancerTest, cls).skip_checks()
+        if not test.is_extension_enabled('lbaas', 'network'):
+            raise cls.skipException(
+                '%s skipped - lbaas extension not enabled' % cls.__name__)
+
     def _create_load_balancer(self):
         fq_name = data_utils.rand_name('load-balancer')
         post_body = {
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_qos_global_config.py b/tungsten_tempest_plugin/tests/api/contrail/test_qos_global_config.py
index 6b5a3ec..77a4a28 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_qos_global_config.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_qos_global_config.py
@@ -36,28 +36,13 @@
     def resource_setup(cls):
         super(QosContrailTest, cls).resource_setup()
 
-    def _create_global_system_config(self):
-        config_name = data_utils.rand_name('test-config')
-        parent_type = 'config-root'
-        config_fq_name = [config_name]
-        new_config = \
-            self.config_client.create_global_system_configs(
-                parent_type=parent_type,
-                display_name=config_name,
-                fq_name=config_fq_name)['global-system-config']
-        self.addCleanup(self._try_delete_resource,
-                        (self.config_client.
-                         delete_global_system_config),
-                        new_config['uuid'])
-        return new_config
-
     def _delete_qos_global_config(self, instance_id):
         return self.qos_client.delete_global_qos_config(instance_id)
 
-    def _create_qos_global_configs(self, global_system_config):
+    def _create_qos_global_configs(self):
         name = data_utils.rand_name('test-rbac-qos-global-config')
         parent_type = 'global-system-config'
-        fq_name = [global_system_config, name]
+        fq_name = ['default-global-system-config', name]
         qos_global_config = self.qos_client.create_global_qos_configs(
             fq_name=fq_name,
             parent_type=parent_type)['global-qos-config']
@@ -72,9 +57,7 @@
     @decorators.idempotent_id('74e5a7b7-f538-4be3-90a5-6862b07fb118')
     def test_list_global_qos_configs(self):
         """test method for list global QoS objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        self._create_qos_global_configs(global_system_config)
+        self._create_qos_global_configs()
         with self.rbac_utils.override_role(self):
             self.qos_client.list_global_qos_configs()
 
@@ -83,19 +66,15 @@
     @decorators.idempotent_id('d7da1ca0-7bf7-4d1b-982c-820cd37fe9fa')
     def test_create_global_qos_configs(self):
         """test method for create global QoS objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
         with self.rbac_utils.override_role(self):
-            self._create_qos_global_configs(global_system_config)
+            self._create_qos_global_configs()
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["show_global_qos_config"])
     @decorators.idempotent_id('e3bd44e0-19a9-46e7-83d3-268dcc537ad9')
     def test_show_global_qos_config(self):
         """test method for show global QoS objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        test = self._create_qos_global_configs(global_system_config)
+        test = self._create_qos_global_configs()
         with self.rbac_utils.override_role(self):
             self.qos_client.show_global_qos_config(instance_id=test['uuid'])
 
@@ -104,9 +83,7 @@
     @decorators.idempotent_id('f834c4d7-bc81-4c59-bada-c4d752219a6e')
     def test_update_global_qos_config(self):
         """test method for update global QoS objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        qos = self._create_qos_global_configs(global_system_config)
+        qos = self._create_qos_global_configs()
         display_name = data_utils.rand_name('qos_globale_config')
         with self.rbac_utils.override_role(self):
             self.qos_client.update_global_qos_config(
@@ -118,9 +95,6 @@
     @decorators.idempotent_id('78b9a3da-4eb1-4f4b-8a23-a8a2e733b515')
     def test_delete_global_qos_config(self):
         """test method for delete global QoS objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        qos_global_config = self._create_qos_global_configs(
-            global_system_config)
+        qos_global_config = self._create_qos_global_configs()
         with self.rbac_utils.override_role(self):
             self.qos_client.delete_global_qos_config(qos_global_config['uuid'])
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_qos_queue.py b/tungsten_tempest_plugin/tests/api/contrail/test_qos_queue.py
index b223ea9..8d6f77c 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_qos_queue.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_qos_queue.py
@@ -37,7 +37,11 @@
 
     def _create_qos_queues(self):
         name = data_utils.rand_name('test-rbac-qos-queue')
-        fq_name = [name]
+        if float(CONF.sdn.contrail_version) < 5:
+            fq_name = [name]
+        else:
+            fq_name = ['default-global-system-config',
+                       "default-global-qos-config", name]
         qos_queue = self.qos_client.create_qos_queues(
             fq_name=fq_name)['qos-queue']
         self.addCleanup(self._try_delete_resource,
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_routers.py b/tungsten_tempest_plugin/tests/api/contrail/test_routers.py
index 6f829c5..8a0cdfc 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_routers.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_routers.py
@@ -47,26 +47,11 @@
                                  cls.network['uuid'])
         super(BaseRouterTest, cls).resource_cleanup()
 
-    def _create_global_system_config(self):
-        config_name = data_utils.rand_name('test-config')
-        parent_type = 'config-root'
-        config_fq_name = [config_name]
-        new_config = \
-            self.config_client.create_global_system_configs(
-                parent_type=parent_type,
-                display_name=config_name,
-                fq_name=config_fq_name)['global-system-config']
-        self.addCleanup(self._try_delete_resource,
-                        (self.config_client.
-                         delete_global_system_config),
-                        new_config['uuid'])
-        return new_config
-
-    def _create_physical_router(self, global_system_config):
+    def _create_physical_router(self):
         fq_name = data_utils.rand_name('physical-router-template')
         post_body = {
             'parent_type': 'global-system-config',
-            'fq_name': [global_system_config, fq_name]}
+            'fq_name': ['default-global-system-config', fq_name]}
         router = self.router_client.create_physical_routers(
             **post_body)['physical-router']
         self.addCleanup(self._try_delete_resource,
@@ -100,11 +85,11 @@
                         router['uuid'])
         return router
 
-    def _create_global_vrouter_config(self, global_system_config):
+    def _create_global_vrouter_config(self):
         fq_name = data_utils.rand_name('global-vrouter-config-template')
         post_body = {
             'parent_type': 'global-system-config',
-            'fq_name': [global_system_config, fq_name]}
+            'fq_name': ['default-global-system-config', fq_name]}
         router = self.router_client.create_global_vrouter_configs(
             **post_body)['global-vrouter-config']
         self.addCleanup(self._try_delete_resource,
@@ -124,11 +109,11 @@
                         router['uuid'])
         return router
 
-    def _create_virtual_router(self, global_system_config):
+    def _create_virtual_router(self):
         fq_name = data_utils.rand_name('virtual-router-template')
         post_body = {
             'parent_type': 'global-system-config',
-            'fq_name': [global_system_config, fq_name]}
+            'fq_name': ['default-global-system-config', fq_name]}
         router = self.router_client.create_virtual_routers(
             **post_body)['virtual-router']
         self.addCleanup(self._try_delete_resource,
@@ -149,20 +134,15 @@
     @decorators.idempotent_id('d0b7449e-9037-4f9f-8c7e-9f364c95f18a')
     def test_create_physical_routers(self):
         """test method for create physical router objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
         with self.rbac_utils.override_role(self):
-            self._create_physical_router(global_system_config)
+            self._create_physical_router()
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["show_physical_router"])
     @decorators.idempotent_id('6dfc53f4-a884-46d5-b303-22ba59c116f4')
     def test_show_physical_router(self):
         """test method for show physical router objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        physical_router_uuid = self._create_physical_router(
-            global_system_config)['uuid']
+        physical_router_uuid = self._create_physical_router()['uuid']
         with self.rbac_utils.override_role(self):
             self.router_client.show_physical_router(physical_router_uuid)
 
@@ -171,11 +151,8 @@
     @decorators.idempotent_id('c270f369-8cd7-4ee3-8ab1-4580c3138a5c')
     def test_update_physical_router(self):
         """test method for update physical router objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
         updated_fq_name = data_utils.rand_name('rbac-physical-router-new-name')
-        physical_router_uuid = self._create_physical_router(
-            global_system_config)['uuid']
+        physical_router_uuid = self._create_physical_router()['uuid']
         with self.rbac_utils.override_role(self):
             self.router_client.update_physical_router(
                 physical_router_uuid,
@@ -186,10 +163,7 @@
     @decorators.idempotent_id('eeded742-6a8d-4e88-bfa8-fe32db463c53')
     def test_delete_physical_router(self):
         """test method for delete physical router objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        physical_router_uuid = self._create_physical_router(
-            global_system_config)['uuid']
+        physical_router_uuid = self._create_physical_router()['uuid']
         with self.rbac_utils.override_role(self):
             self.router_client.delete_physical_router(physical_router_uuid)
 
@@ -250,59 +224,84 @@
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["list_global_vrouter_configs"])
     @decorators.idempotent_id('4af768d1-3cbe-4aff-bcbc-0e045cac3277')
-    def test_list_global_vrouter(self):
+    def test_list_global_vrouter_configs(self):
         """test method for list global vrouter config objects"""
         with self.rbac_utils.override_role(self):
             self.router_client.list_global_vrouter_configs()
 
+    @decorators.skip_because(bug="1792446")
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["create_global_vrouter_configs"])
     @decorators.idempotent_id('e13d800f-9304-4a06-9bf1-ad08345a13a8')
-    def test_create_global_vrouter(self):
+    def test_create_global_vrouter_configs(self):
         """test method for create global vrouter config objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
+        # This test may make your environment unstable
+        # Juniper JTAC 2018-0912-0503
+        #
+        # Creating a global-vrouter-config object with parent as
+        # default-gloabl-system-config in a deployed environment makes vrouter
+        # linklocal metadata to go missing.
+        # vrouter-agent will stuck in Init state with "No configuration for
+        # self" error.
         with self.rbac_utils.override_role(self):
-            self._create_global_vrouter_config(global_system_config)
+            self._create_global_vrouter_config()
 
+    @decorators.skip_because(bug="1792446")
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["show_global_vrouter_config"])
     @decorators.idempotent_id('3bb6f4e1-fd3f-4338-8392-f7f80974a80e')
     def test_show_global_vrouter_config(self):
         """test method for show global vrouter config objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        global_vrouter_config_uuid = self._create_global_vrouter_config(
-            global_system_config)['uuid']
+        # This test may make your environment unstable
+        # Juniper JTAC 2018-0912-0503
+        #
+        # Creating a global-vrouter-config object with parent as
+        # default-gloabl-system-config in a deployed environment makes vrouter
+        # linklocal metadata to go missing.
+        # vrouter-agent will stuck in Init state with "No configuration for
+        # self" error.
+        global_vrouter_config_uuid = \
+            self._create_global_vrouter_config()['uuid']
         with self.rbac_utils.override_role(self):
             self.router_client.show_global_vrouter_config(
                 global_vrouter_config_uuid)
 
+    @decorators.skip_because(bug="1792446")
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["update_global_vrouter_config"])
     @decorators.idempotent_id('36fcdd51-c42b-4e67-8c26-73d4cde47507')
-    def test_update_global_vrouter(self):
+    def test_update_global_vrouter_config(self):
         """test method for update global vrouter config objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
+        # This test may make your environment unstable
+        # Juniper JTAC 2018-0912-0503
+        #
+        # Creating a global-vrouter-config object with parent as
+        # default-gloabl-system-config in a deployed environment makes vrouter
+        # linklocal metadata to go missing.
+        # vrouter-agent will stuck in Init state with "No configuration for
+        # self" error.
         updated_fq_name = data_utils.rand_name(
             'rbac-global-vrouter-config-new-name')
-        global_vrouter_config_uuid = self._create_global_vrouter_config(
-            global_system_config)['uuid']
+        global_vrouter_config_uuid = \
+            self._create_global_vrouter_config()['uuid']
         with self.rbac_utils.override_role(self):
             self.router_client.update_global_vrouter_config(
                 global_vrouter_config_uuid,
                 display_name=updated_fq_name)
 
+    @decorators.skip_because(bug="1792446")
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["delete_global_vrouter_config"])
     @decorators.idempotent_id('4f3d59e8-3dac-4346-9d13-5ebe5ad8f6cf')
-    def test_delete_global_vrouter(self):
+    def test_delete_global_vrouter_config(self):
         """test method for delete global vrouter config objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        global_vrouter_config_uuid = self._create_global_vrouter_config(
-            global_system_config)['uuid']
+        if CONF.sdn.test_vrouter_global_config:
+            raise self.skipException('Vrouter global config tests are '
+                                     'disabled. Enabling may make your '
+                                     'environment unstable.')
+
+        global_vrouter_config_uuid = \
+            self._create_global_vrouter_config()['uuid']
         with self.rbac_utils.override_role(self):
             self.router_client.delete_global_vrouter_config(
                 global_vrouter_config_uuid)
@@ -366,20 +365,15 @@
     @decorators.idempotent_id('114beb14-45c0-4714-a407-d160bb102022')
     def test_create_virtual_routers(self):
         """test method for create virtual router objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
         with self.rbac_utils.override_role(self):
-            self._create_virtual_router(global_system_config)
+            self._create_virtual_router()
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["show_virtual_router"])
     @decorators.idempotent_id('258fe4e0-3e39-460f-aafa-e3b53c96e534')
     def test_show_virtual_router(self):
         """test method for show virtual router objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        virtual_router_uuid = self._create_virtual_router(
-            global_system_config)['uuid']
+        virtual_router_uuid = self._create_virtual_router()['uuid']
         with self.rbac_utils.override_role(self):
             self.router_client.show_virtual_router(virtual_router_uuid)
 
@@ -388,11 +382,8 @@
     @decorators.idempotent_id('d1c72191-2068-4552-a78f-038cdd4c9c1d')
     def test_update_virtual_router(self):
         """test method for update virtual router objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
         updated_fq_name = data_utils.rand_name('rbac-virtual-router-new-name')
-        virtual_router_uuid = self._create_virtual_router(
-            global_system_config)['uuid']
+        virtual_router_uuid = self._create_virtual_router()['uuid']
         with self.rbac_utils.override_role(self):
             self.router_client.update_virtual_router(
                 virtual_router_uuid,
@@ -403,9 +394,6 @@
     @decorators.idempotent_id('efbe25d6-8763-42d4-baf6-9f342e710144')
     def test_delete_virtual_router(self):
         """test method for delete virtual router objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        virtual_router_uuid = self._create_virtual_router(
-            global_system_config)['uuid']
+        virtual_router_uuid = self._create_virtual_router()['uuid']
         with self.rbac_utils.override_role(self):
             self.router_client.delete_virtual_router(virtual_router_uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_service_appliances.py b/tungsten_tempest_plugin/tests/api/contrail/test_service_appliances.py
index 258d4ea..e16eab4 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_service_appliances.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_service_appliances.py
@@ -30,24 +30,9 @@
 class ServiceAppliancesTest(rbac_base.BaseContrailTest):
     """Test class to test service appliances objects using RBAC roles"""
 
-    def _create_global_system_config(self):
-        config_name = data_utils.rand_name('test-config')
-        parent_type = 'config-root'
-        config_fq_name = [config_name]
-        new_config = \
-            self.config_client.create_global_system_configs(
-                parent_type=parent_type,
-                display_name=config_name,
-                fq_name=config_fq_name)['global-system-config']
-        self.addCleanup(self._try_delete_resource,
-                        (self.config_client.
-                         delete_global_system_config),
-                        new_config['uuid'])
-        return new_config
-
-    def _create_service_appliance_sets(self, global_system_config):
+    def _create_service_appliance_sets(self):
         set_name = data_utils.rand_name('test-set')
-        set_fq_name = [global_system_config, set_name]
+        set_fq_name = ['default-global-system-config', set_name]
         new_set = self.service_appliances_client.create_service_appliance_sets(
             parent_type='global-system-config',
             fq_name=set_fq_name)['service-appliance-set']
@@ -84,10 +69,7 @@
     @decorators.idempotent_id('0563c0c8-b986-466e-8540-aa8ad7a10367')
     def test_create_service_appliances(self):
         """test method for create service appliance objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        new_set = \
-            self._create_service_appliance_sets(global_system_config)
+        new_set = self._create_service_appliance_sets()
         with self.rbac_utils.override_role(self):
             self._create_service_appliances(new_set)
 
@@ -96,11 +78,7 @@
     @decorators.idempotent_id('ea30dcfe-8657-4a7d-9cf1-3176d334bf27')
     def test_show_service_appliance(self):
         """test method for show service appliance objects"""
-        # Create global system config
-        global_system_config = \
-            self._create_global_system_config()['name']
-        new_set = \
-            self._create_service_appliance_sets(global_system_config)
+        new_set = self._create_service_appliance_sets()
         new_appliance = self._create_service_appliances(new_set)
         with self.rbac_utils.override_role(self):
             self.service_appliances_client.show_service_appliance(
@@ -111,10 +89,7 @@
     @decorators.idempotent_id('a54ca33a-8590-4844-96d7-b96882b59e86')
     def test_update_service_appliance(self):
         """test method for update service appliance objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        new_set = \
-            self._create_service_appliance_sets(global_system_config)
+        new_set = self._create_service_appliance_sets()
         new_appliance = self._create_service_appliances(new_set)
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
@@ -127,10 +102,7 @@
     @decorators.idempotent_id('362deff5-7b72-4929-ba81-972cfcfa1309')
     def test_delete_service_appliance(self):
         """test method for delete service appliance objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        new_set = \
-            self._create_service_appliance_sets(global_system_config)
+        new_set = self._create_service_appliance_sets()
         new_appliance = self._create_service_appliances(new_set)
         with self.rbac_utils.override_role(self):
             self.service_appliances_client.delete_service_appliance(
@@ -149,20 +121,15 @@
     @decorators.idempotent_id('eb00d6cf-590f-41bf-8ee4-5be625d9cb93')
     def test_create_service_appl_sets(self):
         """test method for create service appliance sets objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
         with self.rbac_utils.override_role(self):
-            self._create_service_appliance_sets(global_system_config)
+            self._create_service_appliance_sets()
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["show_service_appliance_set"])
     @decorators.idempotent_id('dd35dd04-e7d9-46bb-8f36-26835f122572')
     def test_show_service_appl_set(self):
         """test method for show service appliance sets objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        new_set = self._create_service_appliance_sets(
-            global_system_config)
+        new_set = self._create_service_appliance_sets()
         with self.rbac_utils.override_role(self):
             self.service_appliances_client.show_service_appliance_set(
                 new_set['uuid'])
@@ -172,10 +139,7 @@
     @decorators.idempotent_id('952f063b-bc71-4f62-83b1-719bce5ad4ed')
     def test_update_service_appl_set(self):
         """test method for update service appliance sets objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        new_set = self._create_service_appliance_sets(
-            global_system_config)
+        new_set = self._create_service_appliance_sets()
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
             self.service_appliances_client.update_service_appliance_set(
@@ -187,10 +151,7 @@
     @decorators.idempotent_id('7b56ce24-da1d-4565-bd22-c58dc57d7045')
     def test_delete_service_appl_set(self):
         """test method for delete service appliance sets objects"""
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
-        new_set = self._create_service_appliance_sets(
-            global_system_config)
+        new_set = self._create_service_appliance_sets()
         with self.rbac_utils.override_role(self):
             self.service_appliances_client.delete_service_appliance_set(
                 new_set['uuid'])
