diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..dd2946a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,64 @@
+*.py[cod]
+
+# C extensions
+*.so
+
+# Packages
+*.egg*
+*.egg-info
+dist
+build
+eggs
+parts
+bin
+var
+sdist
+develop-eggs
+.installed.cfg
+lib
+lib64
+
+# Installer logs
+pip-log.txt
+
+# Unit test / coverage reports
+cover/
+.coverage*
+!.coveragerc
+.tox
+nosetests.xml
+.testrepository
+.venv
+
+# Translations
+*.mo
+
+# Mr Developer
+.mr.developer.cfg
+.project
+.pydevproject
+
+# Complexity
+output/*.html
+output/*/index.html
+
+# Sphinx
+doc/build
+doc/source/_static/patrole.conf.sample
+
+# pbr generates these
+AUTHORS
+ChangeLog
+
+# Editors
+*~
+.*.swp
+.*sw?
+*.idea
+
+# Files created by releasenotes build
+releasenotes/build
+
+# Misc
+.stestr
+
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..2bf473a
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,18 @@
+language: python
+
+install:
+  - pip install tox
+
+script:
+  - tox
+
+jobs:
+  include:
+    - stage: style
+      python: "3.5"
+      env: TOXENV=pep8
+    - stage: unit tests
+      python: "2.7"
+      env: TOXENV=py27
+    - python: "3.5"
+      env: TOXENV=py35
diff --git a/README.md b/README.md
index c0e0c8f..c3775b1 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
+[![Travis-CI](https://travis-ci.com/tungstenfabric/tungsten-tempest.svg?branch=master)](https://travis-ci.com/tungstenfabric/tungsten-tempest)
+
 Tempest Integration of Tungsten Fabric (Contrail)
 =================================================
 
diff --git a/pylintrc b/pylintrc
deleted file mode 100644
index e33289b..0000000
--- a/pylintrc
+++ /dev/null
@@ -1,380 +0,0 @@
-[MASTER]
-
-# Specify a configuration file.
-#rcfile=
-
-# Python code to execute, usually for sys.path manipulation such as
-# pygtk.require().
-#init-hook=
-
-# Add files or directories to the blacklist. They should be base names, not
-# paths.
-ignore=CVS
-
-# Pickle collected data for later comparisons.
-persistent=yes
-
-# List of plugins (as comma separated values of python modules names) to load,
-# usually to register additional checkers.
-load-plugins=
-
-# Use multiple processes to speed up Pylint.
-jobs=1
-
-# Allow loading of arbitrary C extensions. Extensions are imported into the
-# active Python interpreter and may run arbitrary code.
-unsafe-load-any-extension=no
-
-# A comma-separated list of package or module names from where C extensions may
-# be loaded. Extensions are loading into the active Python interpreter and may
-# run arbitrary code
-extension-pkg-whitelist=
-
-
-[MESSAGES CONTROL]
-
-# Only show warnings with the listed confidence levels. Leave empty to show
-# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED
-confidence=
-
-# Enable the message, report, category or checker with the given id(s). You can
-# either give multiple identifier separated by comma (,) or put this option
-# multiple time. See also the "--disable" option for examples.
-#enable=
-
-# Disable the message, report, category or checker with the given id(s). You
-# can either give multiple identifiers separated by comma (,) or put this
-# option multiple times (only on the command line, not in the configuration
-# file where it should appear only once).You can also use "--disable=all" to
-# disable everything first and then reenable specific checks. For example, if
-# you want to run only the similarities checker, you can use "--disable=all
-# --enable=similarities". If you want to run only the classes checker, but have
-# no Warning level messages displayed, use"--disable=all --enable=classes
-# --disable=W"
-
-disable=protected-access,fixme,too-many-branches,
-        attribute-defined-outside-init,too-many-locals,
-        too-many-arguments,too-many-statements,
-        too-many-return-statements,too-few-public-methods,
-        import-error,too-many-lines,too-many-instance-attributes,
-        too-many-public-methods,duplicate-code,broad-except,
-        redefined-builtin,missing-docstring,no-member,bad-continuation,
-        bad-indentation,superfluous-parens,literal-comparison,unused-import,
-        no-self-use,unused-variable,anomalous-backslash-in-string,
-        line-too-long,len-as-condition,unnecessary-pass,
-        # Crashes, see #743.
-        redefined-variable-type,
-        # bug in 1.7.2 https://github.com/PyCQA/pylint/issues/1493
-        not-callable
-
-
-[REPORTS]
-
-# Set the output format. Available formats are text, parseable, colorized, msvs
-# (visual studio) and html. You can also give a reporter class, eg
-# mypackage.mymodule.MyReporterClass.
-output-format=parseable
-
-# Put messages in a separate file for each module / package specified on the
-# command line instead of printing them on stdout. Reports (if any) will be
-# written in a file name "pylint_global.[txt|html]".
-files-output=no
-
-# Tells whether to display a full report or only the messages
-reports=no
-
-# Python expression which should return a note less than 10 (10 is the highest
-# note). You have access to the variables errors warning, statement which
-# respectively contain the number of errors / warnings messages and the total
-# number of statements analyzed. This is used by the global evaluation report
-# (RP0004).
-evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
-
-# Template used to display messages. This is a python new-style format string
-# used to format the message information. See doc for all details
-#msg-template=
-
-
-[LOGGING]
-
-# Logging modules to check that the string format arguments are in logging
-# function parameter format
-logging-modules=logging
-
-
-[MISCELLANEOUS]
-
-# List of note tags to take in consideration, separated by a comma.
-notes=FIXME,XXX,TODO
-
-
-[SIMILARITIES]
-
-# Minimum lines number of a similarity.
-min-similarity-lines=4
-
-# Ignore comments when computing similarities.
-ignore-comments=yes
-
-# Ignore docstrings when computing similarities.
-ignore-docstrings=yes
-
-# Ignore imports when computing similarities.
-ignore-imports=no
-
-
-[VARIABLES]
-
-# Tells whether we should check for unused import in __init__ files.
-init-import=no
-
-# A regular expression matching the name of dummy variables (i.e. expectedly
-# not used).
-dummy-variables-rgx=_$|dummy
-
-# List of additional names supposed to be defined in builtins. Remember that
-# you should avoid to define new builtins when possible.
-additional-builtins=
-
-# List of strings which can identify a callback function by name. A callback
-# name must start or end with one of those strings.
-callbacks=cb_,_cb
-
-
-[FORMAT]
-
-# Maximum number of characters on a single line.
-max-line-length=100
-
-# Regexp for a line that is allowed to be longer than the limit.
-ignore-long-lines=^\s*(# )?<?https?://\S+>?$
-
-# Allow the body of an if to be on the same line as the test if there is no
-# else.
-single-line-if-stmt=no
-
-# List of optional constructs for which whitespace checking is disabled
-no-space-check=trailing-comma,dict-separator
-
-# Maximum number of lines in a module
-max-module-lines=1000
-
-# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
-# tab).
-indent-string='    '
-
-# Number of spaces of indent required inside a hanging or continued line.
-indent-after-paren=4
-
-# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.
-expected-line-ending-format=
-
-
-[BASIC]
-
-# List of builtins function names that should not be used, separated by a comma
-bad-functions=map,filter,input
-
-# Good variable names which should always be accepted, separated by a comma
-good-names=i,j,k,ex,Run,_
-
-# Bad variable names which should always be refused, separated by a comma
-bad-names=foo,bar,baz,toto,tutu,tata
-
-# Colon-delimited sets of names that determine each other's naming style when
-# the name regexes allow several styles.
-name-group=
-
-# Include a hint for the correct naming format with invalid-name
-include-naming-hint=no
-
-# Regular expression matching correct function names
-function-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Naming hint for function names
-function-name-hint=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression matching correct variable names
-variable-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Naming hint for variable names
-variable-name-hint=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression matching correct constant names
-const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$
-
-# Naming hint for constant names
-const-name-hint=(([A-Z_][A-Z0-9_]*)|(__.*__))$
-
-# Regular expression matching correct attribute names
-attr-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Naming hint for attribute names
-attr-name-hint=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression matching correct argument names
-argument-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Naming hint for argument names
-argument-name-hint=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression matching correct class attribute names
-class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$
-
-# Naming hint for class attribute names
-class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$
-
-# Regular expression matching correct inline iteration names
-inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
-
-# Naming hint for inline iteration names
-inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$
-
-# Regular expression matching correct class names
-class-rgx=[A-Z_][a-zA-Z0-9]+$
-
-# Naming hint for class names
-class-name-hint=[A-Z_][a-zA-Z0-9]+$
-
-# Regular expression matching correct module names
-module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
-
-# Naming hint for module names
-module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
-
-# Regular expression matching correct method names
-method-rgx=[a-z_][a-z0-9_]{2,75}$
-
-# Naming hint for method names
-method-name-hint=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression which should only match function or class names that do
-# not require a docstring.
-no-docstring-rgx=__.*__
-
-# Minimum line length for functions/classes that require docstrings, shorter
-# ones are exempt.
-docstring-min-length=-1
-
-# List of decorators that define properties, such as abc.abstractproperty.
-property-classes=abc.abstractproperty
-
-
-[TYPECHECK]
-
-# Tells whether missing members accessed in mixin class should be ignored. A
-# mixin class is detected if its name ends with "mixin" (case insensitive).
-ignore-mixin-members=yes
-
-# List of module names for which member attributes should not be checked
-# (useful for modules/projects where namespaces are manipulated during runtime
-# and thus existing member attributes cannot be deduced by static analysis
-ignored-modules=
-
-# List of classes names for which member attributes should not be checked
-# (useful for classes with attributes dynamically set).
-ignored-classes=SQLObject, optparse.Values, thread._local, _thread._local
-
-# List of members which are set dynamically and missed by pylint inference
-# system, and so shouldn't trigger E1101 when accessed. Python regular
-# expressions are accepted.
-generated-members=REQUEST,acl_users,aq_parent
-
-# List of decorators that create context managers from functions, such as
-# contextlib.contextmanager.
-contextmanager-decorators=contextlib.contextmanager
-
-
-[SPELLING]
-
-# Spelling dictionary name. Available dictionaries: none. To make it working
-# install python-enchant package.
-spelling-dict=
-
-# List of comma separated words that should not be checked.
-spelling-ignore-words=
-
-# A path to a file that contains private dictionary; one word per line.
-spelling-private-dict-file=
-
-# Tells whether to store unknown words to indicated private dictionary in
-# --spelling-private-dict-file option instead of raising a message.
-spelling-store-unknown-words=no
-
-
-[DESIGN]
-
-# Maximum number of arguments for function / method
-max-args=5
-
-# Argument names that match this expression will be ignored. Default to name
-# with leading underscore
-ignored-argument-names=_.*
-
-# Maximum number of locals for function / method body
-max-locals=15
-
-# Maximum number of return / yield for function / method body
-max-returns=6
-
-# Maximum number of branch for function / method body
-max-branches=12
-
-# Maximum number of statements in function / method body
-max-statements=50
-
-# Maximum number of parents for a class (see R0901).
-max-parents=7
-
-# Maximum number of attributes for a class (see R0902).
-max-attributes=7
-
-# Minimum number of public methods for a class (see R0903).
-min-public-methods=2
-
-# Maximum number of public methods for a class (see R0904).
-max-public-methods=20
-
-
-[CLASSES]
-
-# List of method names used to declare (i.e. assign) instance attributes.
-defining-attr-methods=__init__,__new__,setUp
-
-# List of valid names for the first argument in a class method.
-valid-classmethod-first-arg=cls
-
-# List of valid names for the first argument in a metaclass class method.
-valid-metaclass-classmethod-first-arg=mcs
-
-# List of member names, which should be excluded from the protected access
-# warning.
-exclude-protected=_asdict,_fields,_replace,_source,_make
-
-
-[IMPORTS]
-
-# Deprecated modules which should not be used, separated by a comma
-deprecated-modules=regsub,TERMIOS,Bastion,rexec
-
-# Create a graph of every (i.e. internal and external) dependencies in the
-# given file (report RP0402 must not be disabled)
-import-graph=
-
-# Create a graph of external dependencies in the given file (report RP0402 must
-# not be disabled)
-ext-import-graph=
-
-# Create a graph of internal dependencies in the given file (report RP0402 must
-# not be disabled)
-int-import-graph=
-
-
-[EXCEPTIONS]
-
-# Exceptions that will emit a warning when being caught. Defaults to
-# "Exception"
-overgeneral-exceptions=Exception
-
-
-
diff --git a/requirements.txt b/requirements.txt
index 84d7047..f45ae7a 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,6 +2,4 @@
 # of appearance. Changing the order has an impact on the overall integration
 # process, which may cause wedges in the gate later.
 
-Patrole>=0.2.0
-pylint
-
+Patrole
diff --git a/setup.cfg b/setup.cfg
index 5ee9609..6836aa1 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -4,7 +4,7 @@
 description-file =
     README.rst
 author = OpenStack
-author-email = openstack-dev@lists.openstack.org
+author-email = openstack-discuss@lists.openstack.org
 home-page = https://docs.openstack.org/tungsten-tempest/latest/
 classifier =
     Environment :: OpenStack
diff --git a/test-requirements.txt b/test-requirements.txt
index 2757893..45d7ddf 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -1,8 +1,6 @@
 # The order of packages is significant, because pip processes them in the order
 # of appearance. Changing the order has an impact on the overall integration
 # process, which may cause wedges in the gate later.
-hacking>=0.12.0,<0.13 # Apache-2.0
 
-sphinx>=1.6.2 # BSD
-openstackdocstheme>=1.17.0 # Apache-2.0
-
+hacking>=1.1.0,<1.2.0 # Apache-2.0
+pylint
diff --git a/tox.ini b/tox.ini
index 17529a8..e3d3ee0 100644
--- a/tox.ini
+++ b/tox.ini
@@ -18,12 +18,14 @@
        -r{toxinidir}/test-requirements.txt
 commands =
     find . -type f -name "*.pyc" -delete
-    stestr --test-path ./tungsten_tempest_plugin/tests/unit run {posargs}
 
 [testenv:pep8]
 basepython = python3
-commands = flake8 {posargs}
-           check-uuid --package tungsten_tempest_plugin.tests.api
+deps =
+    -r{toxinidir}/test-requirements.txt
+commands =
+    flake8
+    check-uuid --package tungsten_tempest_plugin.tests.api
 
 [testenv:uuidgen]
 basepython = python3
@@ -86,16 +88,15 @@
 # [H205] Use assert(Greater|Less)(Equal) for comparison.
 # [H210] Require 'autospec', 'spec', or 'spec_set' in mock.patch/mock.patch.object calls
 # [H904] Delay string interpolations at logging calls.
-enable-extensions = H106,H203,H204,H205,H210,H904
+enable-extensions = H106,H203,H204,H205,H210,H904,H306
 show-source = True
 # E123, E125 skipped as they are invalid PEP-8.
 #
 # H405 is another one that is good as a guideline, but sometimes
 # multiline doc strings just don't have a natural summary
 # line. Rejecting code for this reason is wrong.
-ignore = E123,E125,H405
 builtins = _
-exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build
+exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,tungsten_tempest_plugin/services/contrail/json/
 
 [hacking]
 local-check-factory = tungsten_tempest_plugin.hacking.checks.factory
diff --git a/tungsten_tempest_plugin/config.py b/tungsten_tempest_plugin/config.py
index d1982ad..620c36a 100644
--- a/tungsten_tempest_plugin/config.py
+++ b/tungsten_tempest_plugin/config.py
@@ -38,6 +38,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/hacking/__init__.py b/tungsten_tempest_plugin/hacking/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tungsten_tempest_plugin/hacking/__init__.py
diff --git a/tungsten_tempest_plugin/hacking/checks.py b/tungsten_tempest_plugin/hacking/checks.py
new file mode 100644
index 0000000..3b05010
--- /dev/null
+++ b/tungsten_tempest_plugin/hacking/checks.py
@@ -0,0 +1,224 @@
+# Copyright 2013 IBM Corp.
+# Copyright 2017 AT&T Corporation.
+# All Rights Reserved.
+#
+#   Licensed under the Apache License, Version 2.0 (the "License"); you may
+#   not use this file except in compliance with the License. You may obtain
+#   a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#   License for the specific language governing permissions and limitations
+#   under the License.
+
+import os
+import re
+
+import pycodestyle
+
+
+PYTHON_CLIENTS = ['contrail']
+
+PYTHON_CLIENT_RE = re.compile('import (%s)client' % '|'.join(PYTHON_CLIENTS))
+TEST_DEFINITION = re.compile(r'^\s*def test.*')
+SETUP_TEARDOWN_CLASS_DEFINITION = re.compile(r'^\s+def (setUp|tearDown)Class')
+SCENARIO_DECORATOR = re.compile(r'\s*@.*services\((.*)\)')
+VI_HEADER_RE = re.compile(r"^#\s+vim?:.+")
+RAND_NAME_HYPHEN_RE = re.compile(r".*rand_name\(.+[\-\_][\"\']\)")
+MUTABLE_DEFAULT_ARGS = re.compile(r"^\s*def .+\((.+=\{\}|.+=\[\])")
+TESTTOOLS_SKIP_DECORATOR = re.compile(r'\s*@testtools\.skip\((.*)\)')
+CLASS = re.compile(r"^class .+")
+RBAC_CLASS_NAME_RE = re.compile(r'class .+RbacTest')
+RULE_VALIDATION_DECORATOR = re.compile(
+    r'\s*@rbac_rule_validation.action\(.*')
+IDEMPOTENT_ID_DECORATOR = re.compile(r'\s*@idempotent_id\((.*)\)')
+
+have_rbac_decorator = False
+
+
+def import_no_clients_in_api_tests(physical_line, filename):
+    """Check for client imports from tungsten_tempest_plugin/tests/api
+
+    T102: Cannot import python clients
+    """
+    if "tugnsten_tempest_plugin/tests/api" in filename:
+        res = PYTHON_CLIENT_RE.match(physical_line)
+        if res:
+            return (physical_line.find(res.group(1)),
+                    ("T102: python clients import not allowed "
+                     "in tungsten_tempest_plugin/tests/api/* or "
+                     "tugnsten_tempest_plugin/tests/scenario/* tests"))
+
+
+def no_setup_teardown_class_for_tests(physical_line, filename):
+    """Check that tests do not use setUpClass/tearDownClass
+
+    T105: Tests cannot use setUpClass/tearDownClass
+    """
+    if pycodestyle.noqa(physical_line):
+        return
+
+    if SETUP_TEARDOWN_CLASS_DEFINITION.match(physical_line):
+        return (physical_line.find('def'),
+                "T105: (setUp|tearDown)Class can not be used in tests")
+
+
+def no_vi_headers(physical_line, line_number, lines):
+    """Check for vi editor configuration in source files.
+
+    By default vi modelines can only appear in the first or
+    last 5 lines of a source file.
+
+    T106
+    """
+    # NOTE(gilliard): line_number is 1-indexed
+    if line_number <= 5 or line_number > len(lines) - 5:
+        if VI_HEADER_RE.match(physical_line):
+            return 0, "T106: Don't put vi configuration in source files"
+
+
+def service_tags_not_in_module_path(physical_line, filename):
+    """Check that a service tag isn't in the module path
+
+    A service tag should only be added if the service name isn't already in
+    the module path.
+
+    T107
+    """
+    matches = SCENARIO_DECORATOR.match(physical_line)
+    if matches:
+        services = matches.group(1).split(',')
+        for service in services:
+            service_name = service.strip().strip("'")
+            modulepath = os.path.split(filename)[0]
+            if service_name in modulepath:
+                return (physical_line.find(service_name),
+                        "T107: service tag should not be in path")
+
+
+def no_hyphen_at_end_of_rand_name(logical_line, filename):
+    """Check no hyphen at the end of rand_name() argument
+
+    T108
+    """
+    msg = "T108: hyphen should not be specified at the end of rand_name()"
+    if RAND_NAME_HYPHEN_RE.match(logical_line):
+        return 0, msg
+
+
+def no_mutable_default_args(logical_line):
+    """Check that mutable object isn't used as default argument
+
+    N322: Method's default argument shouldn't be mutable
+    """
+    msg = "N322: Method's default argument shouldn't be mutable!"
+    if MUTABLE_DEFAULT_ARGS.match(logical_line):
+        yield (0, msg)
+
+
+def no_testtools_skip_decorator(logical_line):
+    """Check that methods do not have the testtools.skip decorator
+
+    T109
+    """
+    if TESTTOOLS_SKIP_DECORATOR.match(logical_line):
+        yield (0, "T109: Cannot use testtools.skip decorator; instead use "
+               "decorators.skip_because from tempest.lib")
+
+
+def use_rand_uuid_instead_of_uuid4(logical_line, filename):
+    """Check that tests use data_utils.rand_uuid() instead of uuid.uuid4()
+
+    T113
+    """
+    if 'uuid.uuid4()' not in logical_line:
+        return
+
+    msg = ("T113: Tests should use data_utils.rand_uuid()/rand_uuid_hex() "
+           "instead of uuid.uuid4()/uuid.uuid4().hex")
+    yield (0, msg)
+
+
+def no_rbac_rule_validation_decorator(physical_line, filename):
+    """Check that each test has the ``rbac_rule_validation.action`` decorator.
+
+    Checks whether the test function has "@rbac_rule_validation.action"
+    above it; otherwise checks that it has "@decorators.idempotent_id" above
+    it and "@rbac_rule_validation.action" above that.
+
+    Assumes that ``rbac_rule_validation.action`` decorator is either the first
+    or second decorator above the test function; otherwise this check fails.
+
+    P100
+    """
+    global have_rbac_decorator
+
+    if ("tungsten_tempest_plugin/tests/api" in filename or
+            "tungsten_tempest_plugin/tests/scenario" in filename):
+
+        if RULE_VALIDATION_DECORATOR.match(physical_line):
+            have_rbac_decorator = True
+            return
+
+        if TEST_DEFINITION.match(physical_line):
+            if not have_rbac_decorator:
+                return (0, "Must use rbac_rule_validation.action "
+                           "decorator for API and scenario tests")
+
+            have_rbac_decorator = False
+
+
+def no_rbac_suffix_in_test_filename(filename):
+    """Check that RBAC filenames end with "_rbac" suffix.
+
+    P101
+    """
+    if "tungsten_tempest_plugin/tests/api" in filename:
+
+        if filename.endswith('rbac_base.py'):
+            return
+
+        if not filename.endswith('_rbac.py'):
+            return 0, "RBAC test filenames must end in _rbac suffix"
+
+
+def no_rbac_test_suffix_in_test_class_name(physical_line, filename):
+    """Check that RBAC class names end with "RbacTest"
+
+    P102
+    """
+    if "tunsgten_tempest_plugin/tests/api" in filename:
+
+        if filename.endswith('rbac_base.py'):
+            return
+
+        if CLASS.match(physical_line):
+            if not RBAC_CLASS_NAME_RE.match(physical_line):
+                return 0, "RBAC test class names must end in 'RbacTest'"
+
+
+def no_client_alias_in_test_cases(logical_line, filename):
+    """Check that test cases don't use "self.client" to define a client.
+
+    P103
+    """
+    if "tungsten_tempest_plugin/tests/api" in filename:
+        if "self.client" in logical_line or "cls.client" in logical_line:
+            return 0, "Do not use 'self.client' as a service client alias"
+
+
+def factory(register):
+    register(import_no_clients_in_api_tests)
+    register(no_setup_teardown_class_for_tests)
+    register(no_vi_headers)
+    register(no_hyphen_at_end_of_rand_name)
+    register(no_mutable_default_args)
+    register(no_testtools_skip_decorator)
+    register(use_rand_uuid_instead_of_uuid4)
+    register(service_tags_not_in_module_path)
+    register(no_rbac_rule_validation_decorator)
+    register(no_rbac_suffix_in_test_filename)
+    register(no_rbac_test_suffix_in_test_class_name)
diff --git a/tungsten_tempest_plugin/services/contrail/json/contrail_client.py b/tungsten_tempest_plugin/services/contrail/json/contrail_client.py
new file mode 100644
index 0000000..949df68
--- /dev/null
+++ b/tungsten_tempest_plugin/services/contrail/json/contrail_client.py
@@ -0,0 +1,128 @@
+# Copyright 2018 AT&T Corp
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from oslo_serialization import jsonutils as json
+
+from six.moves import urllib
+from tempest.lib.common import rest_client as service_client
+
+from tungsten_tempest_plugin.services.contrail.json import base
+
+
+class ContrailClient(base.BaseContrailClient):
+    """Generic client for Contrail API
+
+    Client implements all basic CRUD functions for Contrail API.
+    http://www.opencontrail.org/documentation/api/r5.0/contrail_openapi.html
+    """
+
+    def _pluralize(self, resource_name):
+        """Contrail API ignores common rules for pluralization. For example:
+
+        .. Fetch a specific firewall-policy
+        .. GET /firewall-policy/{id}
+        and
+        .. List collection of firewall-policy
+        .. GET /firewall-policys
+
+        This method is created so if it will be ever changed we can update it
+        in one place.
+        """
+        return resource_name + 's'
+
+    def _underscore_to_dash(self, name):
+        return name.replace("_", "-")
+
+    def _build_uri(self, name, **kwargs):
+        uri = "/%s" % self._underscore_to_dash(name)
+        if kwargs:
+            uri += '?' + urllib.parse.urlencode(kwargs, doseq=1)
+        return uri
+
+    def _lister(self, plural_name):
+        def _list(**filters):
+            uri = self._build_uri(plural_name, **filters)
+            resp, body = self.get(uri)
+            result = {plural_name: json.loads(body)}
+            self.expected_success(200, resp.status)
+            return service_client.ResponseBody(resp, result)
+
+        return _list
+
+    def _deleter(self, resource_name):
+        def _delete(resource_id):
+            uri = '%s/%s' % (resource_name, resource_id)
+            uri = self._build_uri(uri)
+            resp, body = self.delete(uri)
+            self.expected_success(200, resp.status)
+            return service_client.ResponseBody(resp, body)
+
+        return _delete
+
+    def _shower(self, resource_name):
+        def _show(resource_id, **fields):
+            uri = '%s/%s' % (resource_name, resource_id)
+            uri = self._build_uri(uri)
+
+            if fields:
+                uri += '?' + urllib.parse.urlencode(fields, doseq=1)
+            resp, body = self.get(uri)
+            body = json.loads(body)
+            self.expected_success(200, resp.status)
+            return service_client.ResponseBody(resp, body)
+
+        return _show
+
+    def _creater(self, resource_name):
+        def _create(**kwargs):
+            uri = self._build_uri(self._pluralize(resource_name))
+            post_data = json.dumps({
+                self._underscore_to_dash(resource_name): kwargs})
+            resp, body = self.post(uri, post_data)
+            body = json.loads(body)
+            self.expected_success(200, resp.status)
+            return service_client.ResponseBody(resp, body)
+
+        return _create
+
+    def _updater(self, resource_name):
+        def _update(res_id, **kwargs):
+            uri = '%s/%s' % (resource_name, res_id)
+            uri = self._build_uri(uri)
+            put_data = json.dumps({
+                self._underscore_to_dash(resource_name): kwargs})
+            resp, body = self.put(uri, put_data)
+            body = json.loads(body) if body else {}
+            self.expected_success(200, resp.status)
+            return service_client.ResponseBody(resp, body)
+
+        return _update
+
+    def __getattr__(self, name):
+        """Client entry point
+
+        Once user will call CRUD method it will be managed here.
+        """
+        method_prefixes = ["list_", "delete_", "show_", "create_", "update_"]
+        method_functors = [self._lister,
+                           self._deleter,
+                           self._shower,
+                           self._creater,
+                           self._updater]
+        for index, prefix in enumerate(method_prefixes):
+            prefix_len = len(prefix)
+            if name[:prefix_len] == prefix:
+                return method_functors[index](name[prefix_len:])
+        raise AttributeError(name)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/rbac_base.py b/tungsten_tempest_plugin/tests/api/contrail/rbac_base.py
index 6a1b6c8..5a1fbd8 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/rbac_base.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/rbac_base.py
@@ -18,6 +18,10 @@
 """
 
 from oslo_log import log as logging
+from patrole_tempest_plugin import rbac_utils
+from tempest import config
+from tempest.lib import exceptions
+from tempest import test
 
 from tungsten_tempest_plugin.services.contrail.json.access_control_client \
     import AccessControlClient
@@ -33,6 +37,8 @@
     import BGPAsAServiceClient
 from tungsten_tempest_plugin.services.contrail.json.config_client import \
     ConfigClient
+from tungsten_tempest_plugin.services.contrail.json.contrail_client import \
+    ContrailClient
 from tungsten_tempest_plugin.services.contrail.json.database_client import \
     ContrailDatabaseClient
 from tungsten_tempest_plugin.services.contrail.json.\
@@ -90,21 +96,26 @@
 from tungsten_tempest_plugin.services.contrail.json.vm_contrail_client import \
     VmContrailClient
 
-from patrole_tempest_plugin import rbac_utils
-
-from tempest import config
-from tempest import test
-
-from tempest.lib import exceptions
-
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
-class BaseContrailTest(test.BaseTestCase):
+def get_contail_version():
+    return float(CONF.sdn.contrail_version)
+
+
+class BaseContrailTest(rbac_utils.RbacUtilsMixin, test.BaseTestCase):
     """Base class for Contrail tests."""
     credentials = ['primary', 'admin']
 
+    required_contrail_version = None
+
+    @classmethod
+    def skip_if_contrail_version_less(cls, version):
+        if get_contail_version() < version:
+            msg = "The tests require Contrail >= %s" % version
+            raise cls.skipException(msg)
+
     @classmethod
     def skip_checks(cls):
         super(BaseContrailTest, cls).skip_checks()
@@ -113,10 +124,8 @@
         if "admin" not in CONF.auth.tempest_roles:
             raise cls.skipException(
                 "%s skipped because tempest roles is not admin" % cls.__name__)
-
-    @classmethod
-    def setup_credentials(cls):
-        super(BaseContrailTest, cls).setup_credentials()
+        if cls.required_contrail_version:
+            cls.skip_if_contrail_version_less(cls.required_contrail_version)
 
     @classmethod
     def get_auth_providers(cls):
@@ -130,7 +139,8 @@
         cls.admin_client = cls.os_admin.networks_client
         dscv = CONF.identity.disable_ssl_certificate_validation
         ca_certs = CONF.identity.ca_certificates_file
-        cls.rbac_utils = rbac_utils.RbacUtils(cls)
+        cls.setup_rbac_utils()
+
         cls.access_control_client = AccessControlClient(
             cls.auth_provider,
             CONF.sdn.catalog_type,
@@ -376,28 +386,17 @@
             CONF.sdn.endpoint_type,
             disable_ssl_certificate_validation=dscv,
             ca_certs=ca_certs)
+        cls.contrail_client = ContrailClient(
+            cls.auth_provider,
+            CONF.sdn.catalog_type,
+            CONF.identity.region,
+            CONF.sdn.endpoint_type,
+            disable_ssl_certificate_validation=dscv,
+            ca_certs=ca_certs)
 
     @classmethod
     def resource_setup(cls):
         cls.tenant_name = cls.os_primary.credentials.tenant_name
-        if CONF.auth.use_dynamic_credentials:
-            # Create a contrail project for tests
-            post_body = {
-                'parent_type': 'domain',
-                'fq_name': ['default-domain', cls.tenant_name]
-            }
-            try:
-                resp_body = cls.project_client.create_projects(**post_body)
-                cls.project_uuid = resp_body['project']['uuid']
-            except exceptions.Conflict:
-                resp_body = cls.project_client.list_projects()
-                for project in resp_body['projects']:
-                    if cls.tenant_name in project['fq_name']:
-                        cls.project_uuid = project['uuid']
-
-    @classmethod
-    def resource_cleanup(cls):
-        super(BaseContrailTest, cls).resource_cleanup()
 
     @classmethod
     def _try_delete_resource(cls, delete_callable, *args, **kwargs):
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_access_control.py b/tungsten_tempest_plugin/tests/api/contrail/test_access_control.py
index 36d8713..c95c349 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_access_control.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_access_control.py
@@ -17,22 +17,18 @@
 Tempest test-case to test Access Control using RBAC roles
 """
 
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 
 
 class AccessControlTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test Access Control objects using RBAC roles
-    """
+    """Test class to test Access Control objects using RBAC roles"""
 
     def _create_api_access_lists(self):
         api_list_name = data_utils.rand_name('test-api-list')
@@ -78,44 +74,36 @@
         return new_ctrl_list
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_api_access_lists")
-    @idempotent_id('2bfde8fd-36fe-4e69-ba59-6f2db8941e7d')
+                                 rules=["list_api_access_lists"])
+    @decorators.idempotent_id('2bfde8fd-36fe-4e69-ba59-6f2db8941e7d')
     def test_list_api_access_lists(self):
-        """
-        test method for list api access list
-        """
+        """test method for list api access list"""
         with self.rbac_utils.override_role(self):
             self.access_control_client.list_api_access_lists()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_api_access_lists")
-    @idempotent_id('b2b5f50c-07d8-4d79-b9a4-78187ad97353')
+                                 rules=["create_api_access_lists"])
+    @decorators.idempotent_id('b2b5f50c-07d8-4d79-b9a4-78187ad97353')
     def test_create_api_access_lists(self):
-        """
-        test method for create api access list
-        """
+        """test method for create api access list"""
         with self.rbac_utils.override_role(self):
             self._create_api_access_lists()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_api_access_list")
-    @idempotent_id('b82e8e6b-83b5-424d-9652-ef6a34067f4f')
+                                 rules=["show_api_access_list"])
+    @decorators.idempotent_id('b82e8e6b-83b5-424d-9652-ef6a34067f4f')
     def test_show_api_access_list(self):
-        """
-        test method for show api access list
-        """
+        """test method for show api access list"""
         new_api_list = self._create_api_access_lists()
         with self.rbac_utils.override_role(self):
             self.access_control_client.show_api_access_list(
                 new_api_list['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_api_access_list")
-    @idempotent_id('edc88825-1e2e-47ff-b7b4-f68d6310fbad')
+                                 rules=["update_api_access_list"])
+    @decorators.idempotent_id('edc88825-1e2e-47ff-b7b4-f68d6310fbad')
     def test_update_api_access_list(self):
-        """
-        test method for update api access list
-        """
+        """test method for update api access list"""
         new_api_list = self._create_api_access_lists()
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
@@ -124,46 +112,38 @@
                 display_name=update_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_api_access_list")
-    @idempotent_id('f27d9044-95f2-4733-81ed-df9340dbd421')
+                                 rules=["delete_api_access_list"])
+    @decorators.idempotent_id('f27d9044-95f2-4733-81ed-df9340dbd421')
     def test_delete_api_access_list(self):
-        """
-        test method for delete api access list
-        """
+        """test method for delete api access list"""
         new_api_list = self._create_api_access_lists()
         with self.rbac_utils.override_role(self):
             self.access_control_client.delete_api_access_list(
                 new_api_list['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_access_control_lists")
-    @idempotent_id('c56a1338-a9d1-4286-8aeb-3a0d60d93037')
+                                 rules=["list_access_control_lists"])
+    @decorators.idempotent_id('c56a1338-a9d1-4286-8aeb-3a0d60d93037')
     def test_list_access_control_lists(self):
-        """
-        test method for list access control list
-        """
+        """test method for list access control list"""
         with self.rbac_utils.override_role(self):
             self.access_control_client.list_access_control_lists()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_access_control_lists")
-    @idempotent_id('9f225d2b-5376-42f5-97aa-cf63be47fa19')
+                                 rules=["create_access_control_lists"])
+    @decorators.idempotent_id('9f225d2b-5376-42f5-97aa-cf63be47fa19')
     def test_create_access_control(self):
-        """
-        test method for create access control list
-        """
+        """test method for create access control list"""
         # Create Security Group
         sec_group = self._create_security_groups()
         with self.rbac_utils.override_role(self):
             self._create_access_control_lists(sec_group['name'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_access_control_list")
-    @idempotent_id('f0ed882b-f3de-48b7-884a-637ee0b7d6b6')
+                                 rules=["show_access_control_list"])
+    @decorators.idempotent_id('f0ed882b-f3de-48b7-884a-637ee0b7d6b6')
     def test_show_access_control_list(self):
-        """
-        test method for show access control list
-        """
+        """test method for show access control list"""
         # Create Security Group
         sec_group = self._create_security_groups()
         new_ctrl_list = self._create_access_control_lists(
@@ -173,12 +153,10 @@
                 new_ctrl_list['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_access_control_list")
-    @idempotent_id('9a4b3133-dd07-4a1a-b282-f7770c372fb8')
+                                 rules=["update_access_control_list"])
+    @decorators.idempotent_id('9a4b3133-dd07-4a1a-b282-f7770c372fb8')
     def test_update_access_control_list(self):
-        """
-        test method for update access control list
-        """
+        """test method for update access control list"""
         sec_group = self._create_security_groups()
         new_ctrl_list = self._create_access_control_lists(
             sec_group['name'])
@@ -189,12 +167,10 @@
                 display_name=update_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_access_control_list")
-    @idempotent_id('36a8ace1-71ca-4c7c-8667-d8387d6f964a')
+                                 rules=["delete_access_control_list"])
+    @decorators.idempotent_id('36a8ace1-71ca-4c7c-8667-d8387d6f964a')
     def test_delete_access_control_list(self):
-        """
-        test method for delete access control list
-        """
+        """test method for delete access control list"""
         # Create Security Group
         sec_group = self._create_security_groups()
         new_ctrl_list = self._create_access_control_lists(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_alarm.py b/tungsten_tempest_plugin/tests/api/contrail/test_alarm.py
index a191f45..b1cff9a 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_alarm.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_alarm.py
@@ -18,62 +18,43 @@
 """
 
 from oslo_log import log as logging
+from patrole_tempest_plugin import rbac_rule_validation
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
-from patrole_tempest_plugin import rbac_rule_validation
-
-from tempest import config
-
-from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
-
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class AlarmContrailTest(rbac_base.BaseContrailTest):
+    """Test class to test Alarm objects using RBAC roles"""
 
-    """
-    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']
@@ -89,62 +70,45 @@
         self.alarm_client.update_alarm(alarm_uuid, **put_body)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_alarms")
-    @idempotent_id('dc7d19dd-dd5e-4ec8-bf0c-c6d9d83a60a8')
+                                 rules=["list_alarms"])
+    @decorators.idempotent_id('dc7d19dd-dd5e-4ec8-bf0c-c6d9d83a60a8')
     def test_list_alarms(self):
-        """
-        test method for list alarms
-        """
+        """test method for list alarms"""
         with self.rbac_utils.override_role(self):
             self.alarm_client.list_alarms()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_alarms")
-    @idempotent_id('7fe55d0c-e54a-4bb7-95a6-9c53f9e9c4bf')
+                                 rules=["create_alarms"])
+    @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']
+        """test method for create alarms"""
         with self.rbac_utils.override_role(self):
-            self._create_alarm(global_system_config)
+            self._create_alarm()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_alarm")
-    @idempotent_id('ab0ccbe4-7bfe-4176-890a-d438ee04290d')
+                                 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)
+        """test method for show alarms"""
+        alarm_uuid = self._create_alarm()
         with self.rbac_utils.override_role(self):
             self.alarm_client.show_alarm(alarm_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_alarm")
-    @idempotent_id('ab331cca-ee53-4106-9b30-7319bfb1bea7')
+                                 rules=["update_alarm"])
+    @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)
+        """test method for update alarms"""
+        alarm_uuid = self._create_alarm()
         with self.rbac_utils.override_role(self):
             self._update_alarm(alarm_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_alarm")
-    @idempotent_id('84fadb14-77c0-4f21-b5b2-1da7a2fd27e6')
+                                 rules=["delete_alarm"])
+    @decorators.idempotent_id('84fadb14-77c0-4f21-b5b2-1da7a2fd27e6')
     def test_delete_alarm(self):
-        """
-        test method for delete alarms
-        """
+        """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_alias_ip.py b/tungsten_tempest_plugin/tests/api/contrail/test_alias_ip.py
index 69da2d3..a6cdcdb 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_alias_ip.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_alias_ip.py
@@ -17,21 +17,18 @@
 Tempest test-case to test Alias IP and IP pools objects using RBAC roles
 """
 
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 
 
 class AliasIPsTest(rbac_base.BaseContrailTest):
-    """
-    Test class to test Alias IP and IP pools objects using RBAC roles
-    """
+    """Test class to test Alias IP and IP pools objects using RBAC roles"""
 
     @classmethod
     def resource_setup(cls):
@@ -115,33 +112,27 @@
         return new_alias_ip
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_alias_ips")
-    @idempotent_id('899d6824-0755-41ef-adef-03eb1858bcb0')
+                                 rules=["list_alias_ips"])
+    @decorators.idempotent_id('899d6824-0755-41ef-adef-03eb1858bcb0')
     def test_list_alias_ips(self):
-        """
-        test method for list alias IP
-        """
+        """test method for list alias IP"""
         with self.rbac_utils.override_role(self):
             self.alias_ip_client.list_alias_ips()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_alias_ips")
-    @idempotent_id('bc9aae29-22a8-4eed-a31f-c0ded300e3a3')
+                                 rules=["create_alias_ips"])
+    @decorators.idempotent_id('bc9aae29-22a8-4eed-a31f-c0ded300e3a3')
     def test_create_alias_ips(self):
-        """
-        test method for create alias IP
-        """
+        """test method for create alias IP"""
         new_alias_ip_pool = self._create_alias_ip_pools()
         with self.rbac_utils.override_role(self):
             self._create_alias_ips(new_alias_ip_pool, '2.2.3.1')
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_alias_ip")
-    @idempotent_id('d20318b1-c204-44e7-a44c-66f6a1fbe7a0')
+                                 rules=["show_alias_ip"])
+    @decorators.idempotent_id('d20318b1-c204-44e7-a44c-66f6a1fbe7a0')
     def test_show_alias_ip(self):
-        """
-        test method for show alias IP
-        """
+        """test method for show alias IP"""
         new_alias_ip_pool = self._create_alias_ip_pools()
         new_alias_ip = self._create_alias_ips(new_alias_ip_pool, '2.2.3.2')
         with self.rbac_utils.override_role(self):
@@ -149,12 +140,10 @@
                 new_alias_ip['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_alias_ip")
-    @idempotent_id('c237b18f-d899-4b80-8e9b-068244a24612')
+                                 rules=["update_alias_ip"])
+    @decorators.idempotent_id('c237b18f-d899-4b80-8e9b-068244a24612')
     def test_update_alias_ip(self):
-        """
-        test method for update alias IP
-        """
+        """test method for update alias IP"""
         new_alias_ip_pool = self._create_alias_ip_pools()
         new_alias_ip = self._create_alias_ips(new_alias_ip_pool, '2.2.3.3')
         update_name = data_utils.rand_name('test')
@@ -164,12 +153,10 @@
                 display_name=update_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_alias_ip")
-    @idempotent_id('456c641c-9066-4125-8dec-d1529ad8f1ba')
+                                 rules=["delete_alias_ip"])
+    @decorators.idempotent_id('456c641c-9066-4125-8dec-d1529ad8f1ba')
     def test_delete_alias_ip(self):
-        """
-        test method for delete alias IP
-        """
+        """test method for delete alias IP"""
         new_alias_ip_pool = self._create_alias_ip_pools()
         new_alias_ip = self._create_alias_ips(new_alias_ip_pool, '2.2.3.4')
         with self.rbac_utils.override_role(self):
@@ -177,44 +164,36 @@
                 new_alias_ip['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_alias_ip_pools")
-    @idempotent_id('ffe85f35-589a-4b90-a1d3-6aed92a85954')
+                                 rules=["list_alias_ip_pools"])
+    @decorators.idempotent_id('ffe85f35-589a-4b90-a1d3-6aed92a85954')
     def test_list_alias_ip_pools(self):
-        """
-        est method for list alias IP pools
-        """
+        """est method for list alias IP pools"""
         with self.rbac_utils.override_role(self):
             self.alias_ip_client.list_alias_ip_pools()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_alias_ip_pools")
-    @idempotent_id('83abd2c0-d46a-4337-87d0-31cdb86e4226')
+                                 rules=["create_alias_ip_pools"])
+    @decorators.idempotent_id('83abd2c0-d46a-4337-87d0-31cdb86e4226')
     def test_create_alias_ip_pools(self):
-        """
-        test method for create alias IP pool
-        """
+        """test method for create alias IP pool"""
         with self.rbac_utils.override_role(self):
             self._create_alias_ip_pools()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_alias_ip_pool")
-    @idempotent_id('a1cbe111-ccba-4fa4-ba59-7d1ee08a15db')
+                                 rules=["show_alias_ip_pool"])
+    @decorators.idempotent_id('a1cbe111-ccba-4fa4-ba59-7d1ee08a15db')
     def test_show_alias_ip_pool(self):
-        """
-        test method for show alias IP pool
-        """
+        """test method for show alias IP pool"""
         new_alias_ip_pool = self._create_alias_ip_pools()
         with self.rbac_utils.override_role(self):
             self.alias_ip_client.show_alias_ip_pool(
                 new_alias_ip_pool['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_alias_ip_pool")
-    @idempotent_id('7f3448d7-22f1-4808-b3eb-15eeb3f079aa')
+                                 rules=["update_alias_ip_pool"])
+    @decorators.idempotent_id('7f3448d7-22f1-4808-b3eb-15eeb3f079aa')
     def test_update_alias_ip_pool(self):
-        """
-        test method for update alias IP pool
-        """
+        """test method for update alias IP pool"""
         new_alias_ip_pool = self._create_alias_ip_pools()
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
@@ -223,12 +202,10 @@
                 display_name=update_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_alias_ip_pool")
-    @idempotent_id('f59ea4fb-d10f-40c8-a8fa-dcd948ca89c8')
+                                 rules=["delete_alias_ip_pool"])
+    @decorators.idempotent_id('f59ea4fb-d10f-40c8-a8fa-dcd948ca89c8')
     def test_delete_alias_ip_pool(self):
-        """
-        test method for delete alias IP pool
-        """
+        """test method for delete alias IP pool"""
         new_alias_ip_pool = self._create_alias_ip_pools()
         with self.rbac_utils.override_role(self):
             self.alias_ip_client.delete_alias_ip_pool(
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 9d94dba..36996c4 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_analytics_node.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_analytics_node.py
@@ -18,44 +18,24 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ContrailAnalyticsNodeTest(rbac_base.BaseContrailTest):
+    """Test class to test analytics node objects using RBAC roles"""
 
-    """
-    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(
@@ -66,64 +46,46 @@
         return new_node
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_analytics_nodes")
-    @idempotent_id('d3002e37-4b42-446d-b144-1b53f0dadfd3')
+                                 rules=["list_analytics_nodes"])
+    @decorators.idempotent_id('d3002e37-4b42-446d-b144-1b53f0dadfd3')
     def test_list_analytics_nodes(self):
-        """
-        test method for list analytics nodes
-        """
+        """test method for list analytics nodes"""
         with self.rbac_utils.override_role(self):
             self.analytics_node_client.list_analytics_nodes()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_analytics_node")
-    @idempotent_id('b51043fd-77ba-4312-b96f-569ed5153338')
+                                 rules=["show_analytics_node"])
+    @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)
+        """test method for show analytics nodes"""
+        new_node = self._create_analytics_node()
         with self.rbac_utils.override_role(self):
             self.analytics_node_client.show_analytics_node(new_node['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_analytics_nodes")
-    @idempotent_id('c57482c9-fcb4-4f41-95b0-7f0ffeee3dc3')
+                                 rules=["create_analytics_nodes"])
+    @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']
+        """test method for create analytics nodes"""
         with self.rbac_utils.override_role(self):
-            self._create_analytics_node(global_system_config)
+            self._create_analytics_node()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_analytics_node")
-    @idempotent_id('ff50a2df-6283-409e-ab03-c13b63acc8a0')
+                                 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)
+        """test method for update analytics nodes"""
+        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(
                 new_node['uuid'], display_name=update_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_analytics_node")
-    @idempotent_id('972f997a-c89f-4227-8ae9-5a2335ec0b0a')
+                                 rules=["delete_analytics_node"])
+    @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)
+        """test method for delete analytics nodes"""
+        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_attachments_client.py b/tungsten_tempest_plugin/tests/api/contrail/test_attachments_client.py
index 950af4c..0281352 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_attachments_client.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_attachments_client.py
@@ -17,23 +17,18 @@
 Tempest test-case to test attachment clients objects using RBAC roles
 """
 
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 
 
 class AttachmentsClientTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test attachment client objects using RBAC roles
-    """
+    """Test class to test attachment client objects using RBAC roles"""
 
     def _create_provider_attachments(self):
         provider_name = data_utils.rand_name('test-provider-attachment')
@@ -62,44 +57,36 @@
         return new_customer
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_provider_attachments")
-    @idempotent_id('961dbf54-ae4f-42e8-9d27-69fa7df39013')
+                                 rules=["list_provider_attachments"])
+    @decorators.idempotent_id('961dbf54-ae4f-42e8-9d27-69fa7df39013')
     def test_list_provider_attachments(self):
-        """
-        test method for list provider attachment objects
-        """
+        """test method for list provider attachment objects"""
         with self.rbac_utils.override_role(self):
             self.attachments_client.list_provider_attachments()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_provider_attachments")
-    @idempotent_id('73ad032e-3e81-4dcc-be55-1987484207cd')
+                                 rules=["create_provider_attachments"])
+    @decorators.idempotent_id('73ad032e-3e81-4dcc-be55-1987484207cd')
     def test_create_providerattach(self):
-        """
-        test method for create provider attachment objects
-        """
+        """test method for create provider attachment objects"""
         with self.rbac_utils.override_role(self):
             self._create_provider_attachments()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_provider_attachment")
-    @idempotent_id('7b5278bc-dd79-495a-9f74-448c04f52bd2')
+                                 rules=["show_provider_attachment"])
+    @decorators.idempotent_id('7b5278bc-dd79-495a-9f74-448c04f52bd2')
     def test_show_provider_attachment(self):
-        """
-        test method for delete provider attachment objects
-        """
+        """test method for delete provider attachment objects"""
         new_provider = self._create_provider_attachments()
         with self.rbac_utils.override_role(self):
             self.attachments_client.show_provider_attachment(
                 new_provider['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_provider_attachment")
-    @idempotent_id('3516ff99-eddf-4932-afa4-433a43a0e5ac')
+                                 rules=["update_provider_attachment"])
+    @decorators.idempotent_id('3516ff99-eddf-4932-afa4-433a43a0e5ac')
     def test_update_provider_attachment(self):
-        """
-        test method for update provider attachment objects
-        """
+        """test method for update provider attachment objects"""
         new_provider = self._create_provider_attachments()
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
@@ -108,56 +95,46 @@
                 display_name=update_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_provider_attachment")
-    @idempotent_id('234d5505-2abf-418b-b43b-ea6f5a724fd3')
+                                 rules=["delete_provider_attachment"])
+    @decorators.idempotent_id('234d5505-2abf-418b-b43b-ea6f5a724fd3')
     def test_delete_provider_attachment(self):
-        """
-        test method for delete provider attachment objects
-        """
+        """test method for delete provider attachment objects"""
         new_provider = self._create_provider_attachments()
         with self.rbac_utils.override_role(self):
             self.attachments_client.delete_provider_attachment(
                 new_provider['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_customer_attachments")
-    @idempotent_id('3eca8fd8-ec3c-4a0e-8f62-b15d28796b7f')
+                                 rules=["list_customer_attachments"])
+    @decorators.idempotent_id('3eca8fd8-ec3c-4a0e-8f62-b15d28796b7f')
     def test_list_customer_attachments(self):
-        """
-        test method for list customer attachment objects
-        """
+        """test method for list customer attachment objects"""
         with self.rbac_utils.override_role(self):
             self.attachments_client.list_customer_attachments()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_customer_attachments")
-    @idempotent_id('53f93053-554c-4202-b763-0230d9a0553a')
+                                 rules=["create_customer_attachments"])
+    @decorators.idempotent_id('53f93053-554c-4202-b763-0230d9a0553a')
     def test_create_customerattachments(self):
-        """
-        test method for create customer attachment objects
-        """
+        """test method for create customer attachment objects"""
         with self.rbac_utils.override_role(self):
             self._create_customer_attachments()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_customer_attachment")
-    @idempotent_id('c6671540-695c-4cba-bcee-4a5d1cddd412')
+                                 rules=["show_customer_attachment"])
+    @decorators.idempotent_id('c6671540-695c-4cba-bcee-4a5d1cddd412')
     def test_show_customer_attachment(self):
-        """
-        test method for show customer attachment objects
-        """
+        """test method for show customer attachment objects"""
         new_customer = self._create_customer_attachments()
         with self.rbac_utils.override_role(self):
             self.attachments_client.show_customer_attachment(
                 new_customer['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_customer_attachment")
-    @idempotent_id('50419cca-dd03-4d02-9c06-88446647fcba')
+                                 rules=["update_customer_attachment"])
+    @decorators.idempotent_id('50419cca-dd03-4d02-9c06-88446647fcba')
     def test_update_customer_attachment(self):
-        """
-        test method for update customer attachment objects
-        """
+        """test method for update customer attachment objects"""
         new_customer = self._create_customer_attachments()
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
@@ -166,12 +143,10 @@
                 display_name=update_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_customer_attachment")
-    @idempotent_id('5385c275-8e86-4739-9cb6-d1e0ed522807')
+                                 rules=["delete_customer_attachment"])
+    @decorators.idempotent_id('5385c275-8e86-4739-9cb6-d1e0ed522807')
     def test_delete_customer_attachment(self):
-        """
-        test method for delete customer attachment objects
-        """
+        """test method for delete customer attachment objects"""
         new_customer = self._create_customer_attachments()
         with self.rbac_utils.override_role(self):
             self.attachments_client.delete_customer_attachment(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_bgp_as_a_service.py b/tungsten_tempest_plugin/tests/api/contrail/test_bgp_as_a_service.py
index 900d563..f9345b8 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_bgp_as_a_service.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_bgp_as_a_service.py
@@ -17,22 +17,18 @@
 Tempest test-case to test BGP as a Service objects using RBAC roles
 """
 
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 
 
 class BGPAsAServicesTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test BGP as a Service objects using RBAC roles
-    """
+    """Test class to test BGP as a Service objects using RBAC roles"""
 
     def _create_bgp_as_a_services(self):
         bgp_name = data_utils.rand_name('test-bgp')
@@ -46,56 +42,46 @@
         return new_bgp
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_bgp_as_a_services")
-    @idempotent_id('d3153cd0-379e-4e62-9780-ef237e567fc5')
+                                 rules=["list_bgp_as_a_services"])
+    @decorators.idempotent_id('d3153cd0-379e-4e62-9780-ef237e567fc5')
     def test_list_bgp_as_a_services(self):
-        """
-        test method for list bgp as a service objects
-        """
+        """test method for list bgp as a service objects"""
         with self.rbac_utils.override_role(self):
             self.bgp_as_a_service_client.list_bgp_as_a_services()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_bgp_as_a_services")
-    @idempotent_id('a039f0c4-b53a-492b-a5c5-fbdf046afcf4')
+                                 rules=["create_bgp_as_a_services"])
+    @decorators.idempotent_id('a039f0c4-b53a-492b-a5c5-fbdf046afcf4')
     def test_create_bgp_as_a_services(self):
-        """
-        test method for create bgp as a service objects
-        """
+        """test method for create bgp as a service objects"""
         with self.rbac_utils.override_role(self):
             self._create_bgp_as_a_services()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_bgp_as_a_service")
-    @idempotent_id('c2fae8b4-929c-4d2f-914d-76a7414a56dc')
+                                 rules=["show_bgp_as_a_service"])
+    @decorators.idempotent_id('c2fae8b4-929c-4d2f-914d-76a7414a56dc')
     def test_show_bgp_as_a_service(self):
-        """
-        test method for show bgp as a service objects
-        """
+        """test method for show bgp as a service objects"""
         new_bgp = self._create_bgp_as_a_services()
         with self.rbac_utils.override_role(self):
             self.bgp_as_a_service_client.show_bgp_as_a_service(
                 new_bgp['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_bgp_as_a_service")
-    @idempotent_id('78c8389a-7bb5-4027-bae1-923af3d6e77c')
+                                 rules=["delete_bgp_as_a_service"])
+    @decorators.idempotent_id('78c8389a-7bb5-4027-bae1-923af3d6e77c')
     def test_delete_bgp_as_a_service(self):
-        """
-        test method for delete bgp as a service objects
-        """
+        """test method for delete bgp as a service objects"""
         new_bgp = self._create_bgp_as_a_services()
         with self.rbac_utils.override_role(self):
             self.bgp_as_a_service_client.delete_bgp_as_a_service(
                 new_bgp['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_bgp_as_a_service")
-    @idempotent_id('38ba2ecb-71e2-4a2f-be43-e82491dffa05')
+                                 rules=["update_bgp_as_a_service"])
+    @decorators.idempotent_id('38ba2ecb-71e2-4a2f-be43-e82491dffa05')
     def test_update_bgp_as_a_service(self):
-        """
-        test method for update bgp as a service objects
-        """
+        """test method for update bgp as a service objects"""
         new_bgp = self._create_bgp_as_a_services()
         with self.rbac_utils.override_role(self):
             self.bgp_as_a_service_client.update_bgp_as_a_service(
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 051138b..26aea25 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_config_client.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_config_client.py
@@ -17,27 +17,24 @@
 Tempest test-case to test config objects using RBAC roles
 """
 
+import json
 import random
+import testtools
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ConfigNodeTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test config node objects using RBAC roles
-    """
+    """Test class to test config node objects using RBAC roles"""
 
     @staticmethod
     def _random_ip_generator():
@@ -48,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 = ["default-global-system-config", display_name]
+        if rbac_base.get_contail_version() < 3.2:
+            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)
@@ -60,32 +60,26 @@
         return config_node
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_config_nodes")
-    @idempotent_id('b560e060-e4f0-45b0-93e2-55f0cb201e06')
+                                 rules=["list_config_nodes"])
+    @decorators.idempotent_id('b560e060-e4f0-45b0-93e2-55f0cb201e06')
     def test_list_config_nodes(self):
-        """
-        test method for list config node objects
-        """
+        """test method for list config node objects"""
         with self.rbac_utils.override_role(self):
             self.config_client.list_config_nodes()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_config_nodes")
-    @idempotent_id('a8d20d0d-dc5a-4cae-87c5-7f6914c3701e')
+                                 rules=["create_config_nodes"])
+    @decorators.idempotent_id('a8d20d0d-dc5a-4cae-87c5-7f6914c3701e')
     def test_create_config_nodes(self):
-        """
-        test method for create config node objects
-        """
+        """test method for create config node objects"""
         with self.rbac_utils.override_role(self):
             self._create_config_node()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_config_node")
-    @idempotent_id('16573a85-57ab-418c-bb23-5dd936e7be90')
+                                 rules=["delete_config_node"])
+    @decorators.idempotent_id('16573a85-57ab-418c-bb23-5dd936e7be90')
     def test_delete_config_node(self):
-        """
-        test method for delete config node objects
-        """
+        """test method for delete config node objects"""
         config_node = self._create_config_node()
         config_node_uuid = config_node['config-node']['uuid']
         with self.rbac_utils.override_role(self):
@@ -93,24 +87,20 @@
                 config_node_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_config_node")
-    @idempotent_id('a5b17108-4fa3-4d09-b861-e2857aab8f80')
+                                 rules=["show_config_node"])
+    @decorators.idempotent_id('a5b17108-4fa3-4d09-b861-e2857aab8f80')
     def test_show_config_node(self):
-        """
-        test method for show config node objects
-        """
+        """test method for show config node objects"""
         config_node = self._create_config_node()
         config_node_uuid = config_node['config-node']['uuid']
         with self.rbac_utils.override_role(self):
             self.config_client.show_config_node(config_node_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_config_node")
-    @idempotent_id('8f70d2c0-594b-4a94-ab15-88bd8a2e62e5')
+                                 rules=["update_config_node"])
+    @decorators.idempotent_id('8f70d2c0-594b-4a94-ab15-88bd8a2e62e5')
     def test_update_config_node(self):
-        """
-        test method for update config node objects
-        """
+        """test method for update config node objects"""
         config_node = self._create_config_node()
         config_node_uuid = config_node['config-node']['uuid']
         updated_name = data_utils.rand_name('new_config_node')
@@ -120,10 +110,7 @@
 
 
 class ConfigRootTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test config root objects using RBAC roles
-    """
+    """Test class to test config root objects using RBAC roles"""
 
     def _create_config_root(self):
         display_name = data_utils.rand_name('config_root')
@@ -138,22 +125,18 @@
         return config_root
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_config_roots")
-    @idempotent_id('291b28ea-d0d8-47cd-ac76-1f980047cb76')
+                                 rules=["create_config_roots"])
+    @decorators.idempotent_id('291b28ea-d0d8-47cd-ac76-1f980047cb76')
     def test_create_config_roots(self):
-        """
-        test method for create config root service objects
-        """
+        """test method for create config root service objects"""
         with self.rbac_utils.override_role(self):
             self._create_config_root()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_config_root")
-    @idempotent_id('bd04c0fb-3deb-4904-ad2c-1a10933c30dd')
+                                 rules=["delete_config_root"])
+    @decorators.idempotent_id('bd04c0fb-3deb-4904-ad2c-1a10933c30dd')
     def test_delete_config_root(self):
-        """
-        test method for delete config root service objects
-        """
+        """test method for delete config root service objects"""
         config_root = self._create_config_root()
         config_root_uuid = config_root['config-root']['uuid']
         with self.rbac_utils.override_role(self):
@@ -161,24 +144,20 @@
                 config_root_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_config_root")
-    @idempotent_id('fba2c419-9a83-4d88-9a26-84770544bb3f')
+                                 rules=["show_config_root"])
+    @decorators.idempotent_id('fba2c419-9a83-4d88-9a26-84770544bb3f')
     def test_show_config_root(self):
-        """
-        test method for show config root service objects
-        """
+        """test method for show config root service objects"""
         config_root = self._create_config_root()
         config_root_uuid = config_root['config-root']['uuid']
         with self.rbac_utils.override_role(self):
             self.config_client.show_config_root(config_root_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_config_root")
-    @idempotent_id('bfcc074f-5e1c-4b45-8a2a-857239f8acb0')
+                                 rules=["update_config_root"])
+    @decorators.idempotent_id('bfcc074f-5e1c-4b45-8a2a-857239f8acb0')
     def test_update_config_root(self):
-        """
-        test method for update config root service objects
-        """
+        """test method for update config root service objects"""
         config_root = self._create_config_root()
         config_root_uuid = config_root['config-root']['uuid']
         updated_name = data_utils.rand_name('new_config_root')
@@ -187,21 +166,16 @@
                 config_root_uuid, display_name=updated_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_config_roots")
-    @idempotent_id('316e7425-8fb0-41b4-9080-a76697abbafa')
+                                 rules=["list_config_roots"])
+    @decorators.idempotent_id('316e7425-8fb0-41b4-9080-a76697abbafa')
     def test_list_config_roots(self):
-        """
-        test method for list config root service objects
-        """
+        """test method for list config root service objects"""
         with self.rbac_utils.override_role(self):
             self.config_client.list_config_roots()
 
 
 class GlobalSystemConfigTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test config node objects using RBAC roles
-    """
+    """Test class to test config node objects using RBAC roles"""
 
     def _create_global_system_config(self):
         config_name = data_utils.rand_name('test-config')
@@ -219,44 +193,56 @@
         return new_config
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_global_system_configs")
-    @idempotent_id('d1d189a7-14c1-49c5-b180-cd42ed2ca123')
+                                 rules=["list_global_system_configs"])
+    @decorators.idempotent_id('d1d189a7-14c1-49c5-b180-cd42ed2ca123')
     def test_list_global_system_configs(self):
-        """
-        test method for list global system config service objects
-        """
+        """test method for list global system config service objects"""
         with self.rbac_utils.override_role(self):
             self.config_client.list_global_system_configs()
 
+    @testtools.skipUnless(rbac_base.get_contail_version() < 5,
+                          'Not supported in OpenContrail versions >= 5')
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_global_system_configs")
-    @idempotent_id('e0ba6a20-3e28-47ac-bf95-9a848fcee49a')
-    def test_create_global_sys_configs(self):
-        """
-        test method for create global system config service objects
-        """
+                                 rules=["create_global_system_configs"])
+    @decorators.idempotent_id('e0ba6a20-3e28-47ac-bf95-9a848fcee49a')
+    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()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_global_system_config")
-    @idempotent_id('4b9f9131-cb34-4b7d-9d06-c6aca85cce3a')
+                                 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 rbac_base.get_contail_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(rbac_base.get_contail_version() < 5,
+                          'Not supported in OpenContrail versions >= 5')
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_global_system_config")
-    @idempotent_id('4f90dc83-da59-45a4-8ab6-b387bd6c2df4')
-    def test_update_global_sys_config(self):
-        """
-        test method for update global system config service objects
-        """
+                                 rules=["update_global_system_config"])
+    @decorators.idempotent_id('4f90dc83-da59-45a4-8ab6-b387bd6c2df4')
+    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')
         with self.rbac_utils.override_role(self):
@@ -264,14 +250,13 @@
                 new_config['uuid'],
                 display_name=update_name)
 
+    @testtools.skipUnless(rbac_base.get_contail_version() < 5,
+                          'Not supported in OpenContrail versions >= 5')
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_global_system_config")
-    @idempotent_id('fce1653c-e657-4a1e-8ced-7e02d297d6c9')
-    def test_delete_global_sys_config(self):
-        """
-        test method for delete global system config service objects
-        """
+                                 rules=["delete_global_system_config"])
+    @decorators.idempotent_id('fce1653c-e657-4a1e-8ced-7e02d297d6c9')
+    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 97cadc7..020d595 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_database.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_database.py
@@ -18,46 +18,26 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 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
+    """Test class to test database objects using RBAC roles"""
 
     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(
@@ -72,54 +52,37 @@
         return db_node
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_database_nodes")
-    @idempotent_id('5ae6f965-6161-443f-b19e-dfa7b364c533')
+                                 rules=["list_database_nodes"])
+    @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)
+        """test method for list database objects"""
+        self._create_database_node()
         with self.rbac_utils.override_role(self):
             self.db_client.list_database_nodes()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_database_node")
-    @idempotent_id('4a07d9a8-7b99-43bd-b628-06c023993aab')
+                                 rules=["show_database_node"])
+    @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']
+        """test method for show database objects"""
+        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=CONF.sdn.service_name,
-                                 rule="create_database_nodes")
-    @idempotent_id('b9aa9c6b-9381-44f0-94fb-e4523bf2a87e')
+                                 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']
+        """test method for update database objects"""
         with self.rbac_utils.override_role(self):
-            self._create_database_node(global_system_config)
+            self._create_database_node()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_database_node")
-    @idempotent_id('6e59f393-0e55-4327-871e-7f0ad53f2e17')
+                                 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)
+        """test method for update database objects"""
+        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):
@@ -128,15 +91,11 @@
                 display_name=display_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_database_node")
-    @idempotent_id('0cbc5a52-d7e7-4a1c-a85d-6bf44012d99b')
+                                 rules=["delete_database_node"])
+    @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)
+        """test method for delete database objects"""
+        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_discovery_service_assignment.py b/tungsten_tempest_plugin/tests/api/contrail/test_discovery_service_assignment.py
index f8209e0..0731440 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_discovery_service_assignment.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_discovery_service_assignment.py
@@ -17,22 +17,20 @@
 Tempest test-case to test discovery service assignment objects using RBAC roles
 """
 
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 
 
 class DiscoveryServiceAssignmentTest(rbac_base.BaseContrailTest):
+    """Test class to test discovery service assignment objects using RBAC roles
 
     """
-    Test class to test discovery service assignment objects using RBAC roles
-    """
 
     def _create_discovery_service_assignments(self):
         dsa_name = [data_utils.rand_name('test-dsa')]
@@ -45,43 +43,36 @@
         return new_dsa
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_discovery_service_assignments")
-    @idempotent_id('9ac1e4ca-8983-403f-b644-7758935f2f36')
+                                 rules=["list_discovery_service_assignments"])
+    @decorators.idempotent_id('9ac1e4ca-8983-403f-b644-7758935f2f36')
     def test_list_discovery_service(self):
-        """
-        test method for list discovery service assignment objects
-        """
+        """test method for list discovery service assignment objects"""
         with self.rbac_utils.override_role(self):
             self.dsa_client.list_ds_assignments()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_discovery_service_assignments")
-    @idempotent_id('40ad1208-a039-4809-8516-41b4dfcbd00c')
+                                 rules=["create_discovery_service_assignments"]
+                                 )
+    @decorators.idempotent_id('40ad1208-a039-4809-8516-41b4dfcbd00c')
     def test_create_discovery_service(self):
-        """
-        test method for create discovery service assignment objects
-        """
+        """test method for create discovery service assignment objects"""
         with self.rbac_utils.override_role(self):
             self._create_discovery_service_assignments()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_discovery_service_assignment")
-    @idempotent_id('63660fe9-22b8-456c-a757-a7da1abfbce8')
+                                 rules=["show_discovery_service_assignment"])
+    @decorators.idempotent_id('63660fe9-22b8-456c-a757-a7da1abfbce8')
     def test_show_discovery_service(self):
-        """
-        test method for show discovery service assignment objects
-        """
+        """test method for show discovery service assignment objects"""
         new_dsa = self._create_discovery_service_assignments()
         with self.rbac_utils.override_role(self):
             self.dsa_client.show_ds_assignment(new_dsa['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_discovery_service_assignment")
-    @idempotent_id('71ce1404-965b-4670-abb7-5b6fea3b24b7')
+                                 rules=["update_discovery_service_assignment"])
+    @decorators.idempotent_id('71ce1404-965b-4670-abb7-5b6fea3b24b7')
     def test_update_discovery_service(self):
-        """
-        test method for update discovery service assignment objects
-        """
+        """test method for update discovery service assignment objects"""
         new_dsa = self._create_discovery_service_assignments()
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
@@ -91,12 +82,10 @@
                 display_name=update_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_discovery_service_assignment")
-    @idempotent_id('e7ff845d-2140-4eb0-9720-26370459723b')
+                                 rules=["delete_discovery_service_assignment"])
+    @decorators.idempotent_id('e7ff845d-2140-4eb0-9720-26370459723b')
     def test_delete_discovery_service(self):
-        """
-        test method for delete discovery service assignment objects
-        """
+        """test method for delete discovery service assignment objects"""
         new_dsa = self._create_discovery_service_assignments()
         with self.rbac_utils.override_role(self):
             self.dsa_client.delete_ds_assignment(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_domain.py b/tungsten_tempest_plugin/tests/api/contrail/test_domain.py
index 8e74adf..baa50fb 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_domain.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_domain.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class DomainContrailTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test domain objects using RBAC roles
-    """
+    """Test class to test domain objects using RBAC roles"""
 
     def _create_domains(self):
         fq_name = data_utils.rand_name('domain')
@@ -57,54 +52,44 @@
         self.domain_client.update_domain(domain_uuid, **put_body)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_domains")
-    @idempotent_id('fa02e27b-f661-4186-a522-69e8fcb6abf9')
+                                 rules=["list_domains"])
+    @decorators.idempotent_id('fa02e27b-f661-4186-a522-69e8fcb6abf9')
     def test_list_domains(self):
-        """
-        test method for list domain objects
-        """
+        """test method for list domain objects"""
         with self.rbac_utils.override_role(self):
             self.domain_client.list_domains()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_domains")
-    @idempotent_id('3f18be91-c37b-4e17-bf5e-b704d993f738')
+                                 rules=["create_domains"])
+    @decorators.idempotent_id('3f18be91-c37b-4e17-bf5e-b704d993f738')
     def test_create_domains(self):
-        """
-        test method for create domain objects
-        """
+        """test method for create domain objects"""
         with self.rbac_utils.override_role(self):
             self._create_domains()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_domain")
-    @idempotent_id('e79f8581-ba9f-420a-aa26-f1cb51cf4bbf')
+                                 rules=["show_domain"])
+    @decorators.idempotent_id('e79f8581-ba9f-420a-aa26-f1cb51cf4bbf')
     def test_show_domain(self):
-        """
-        test method for show domain objects
-        """
+        """test method for show domain objects"""
         domain_uuid = self._create_domains()
         with self.rbac_utils.override_role(self):
             self.domain_client.show_domain(domain_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_domain")
-    @idempotent_id('fdf72539-20b5-4bdb-b22b-70c86fbb52a4')
+                                 rules=["update_domain"])
+    @decorators.idempotent_id('fdf72539-20b5-4bdb-b22b-70c86fbb52a4')
     def test_update_domain(self):
-        """
-        test method for update domain objects
-        """
+        """test method for update domain objects"""
         domain_uuid = self._create_domains()
         with self.rbac_utils.override_role(self):
             self._update_domain(domain_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_domain")
-    @idempotent_id('abaad2b0-6bde-40b8-b257-20ca805c1dca')
+                                 rules=["delete_domain"])
+    @decorators.idempotent_id('abaad2b0-6bde-40b8-b257-20ca805c1dca')
     def test_delete_domain(self):
-        """
-        test method for delete domain objects
-        """
+        """test method for delete domain objects"""
         domain_uuid = self._create_domains()
         with self.rbac_utils.override_role(self):
             self.domain_client.delete_domain(domain_uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_dsa_rule.py b/tungsten_tempest_plugin/tests/api/contrail/test_dsa_rule.py
index 95ed9a9..5d537f2 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_dsa_rule.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_dsa_rule.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ContrailDSARuleTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test DSA rule objects using RBAC roles
-    """
+    """Test class to test DSA rule objects using RBAC roles"""
 
     def _create_discovery_service_assignments(self):
         dsa_name = [data_utils.rand_name('test-dsa')]
@@ -61,22 +56,18 @@
         return new_rule
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_dsa_rules")
-    @idempotent_id('3227673b-96fc-4d26-ab0b-109347e9e9c2')
+                                 rules=["list_dsa_rules"])
+    @decorators.idempotent_id('3227673b-96fc-4d26-ab0b-109347e9e9c2')
     def test_list_dsa_rules(self):
-        """
-        test method for list dsa rules objects
-        """
+        """test method for list dsa rules objects"""
         with self.rbac_utils.override_role(self):
             self.dsa_rule_client.list_dsa_rules()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_dsa_rule")
-    @idempotent_id('0f90ea4f-c050-4c31-93a7-1e0c58df914e')
+                                 rules=["show_dsa_rule"])
+    @decorators.idempotent_id('0f90ea4f-c050-4c31-93a7-1e0c58df914e')
     def test_show_dsa_rule(self):
-        """
-        test method for show dsa rules objects
-        """
+        """test method for show dsa rules objects"""
         # create discover service assignment
         discovery_service_assignment = \
             self._create_discovery_service_assignments()['name']
@@ -85,12 +76,10 @@
             self.dsa_rule_client.show_dsa_rule(new_rule['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_dsa_rules")
-    @idempotent_id('c3774ca3-45d0-4ca8-a6b3-f895441b1d0e')
+                                 rules=["create_dsa_rules"])
+    @decorators.idempotent_id('c3774ca3-45d0-4ca8-a6b3-f895441b1d0e')
     def test_create_dsa_rules(self):
-        """
-        test method for create dsa rules objects
-        """
+        """test method for create dsa rules objects"""
         # create discover service assignment
         discovery_service_assignment = \
             self._create_discovery_service_assignments()['name']
@@ -98,12 +87,10 @@
             self._create_dsa_rules(discovery_service_assignment)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_dsa_rule")
-    @idempotent_id('5cfe7e8e-d91c-4183-8e6c-733e826707be')
+                                 rules=["update_dsa_rule"])
+    @decorators.idempotent_id('5cfe7e8e-d91c-4183-8e6c-733e826707be')
     def test_update_dsa_rule(self):
-        """
-        test method for update dsa rules objects
-        """
+        """test method for update dsa rules objects"""
         # create discover service assignment
         discovery_service_assignment = \
             self._create_discovery_service_assignments()['name']
@@ -114,12 +101,10 @@
                 new_rule['uuid'], display_name=update_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_dsa_rule")
-    @idempotent_id('d3b869db-fa49-48f0-861a-08efd9879b15')
+                                 rules=["delete_dsa_rule"])
+    @decorators.idempotent_id('d3b869db-fa49-48f0-861a-08efd9879b15')
     def test_delete_dsa_rule(self):
-        """
-        test method for delete dsa rules objects
-        """
+        """test method for delete dsa rules objects"""
         # create discover service assignment
         discovery_service_assignment = \
             self._create_discovery_service_assignments()['name']
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_fabric.py b/tungsten_tempest_plugin/tests/api/contrail/test_fabric.py
new file mode 100644
index 0000000..1c9e380
--- /dev/null
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_fabric.py
@@ -0,0 +1,101 @@
+# Copyright 2018 AT&T Corp
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from patrole_tempest_plugin import rbac_rule_validation
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
+
+CONF = config.CONF
+
+
+class FabricContrailTest(rbac_base.BaseContrailTest):
+
+    required_contrail_version = 5
+
+    @classmethod
+    def resource_setup(cls):
+        super(FabricContrailTest, cls).resource_setup()
+        cls.fabric_uuid = cls._create_fabric()
+
+    @classmethod
+    def _create_fabric(cls):
+        fabric = cls.contrail_client.create_fabric(
+            fq_name=["default-global-system-config",
+                     data_utils.rand_name('fabric')],
+            parent_type="global-system-config")
+        cls.addClassResourceCleanup(cls._try_delete_resource,
+                                    cls.contrail_client.delete_fabric,
+                                    fabric["fabric"]["uuid"])
+        return fabric["fabric"]["uuid"]
+
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rules=["list_fabrics"])
+    @decorators.idempotent_id('9005d1d6-3bd2-4378-b145-0fda130ce1d1')
+    def test_list_fabric_s(self):
+        """List fabrics
+
+        RBAC test for the Contrail list_fabrics policy
+        """
+        with self.rbac_utils.override_role(self):
+            self.contrail_client.list_fabrics()
+
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rules=["create_fabric"])
+    @decorators.idempotent_id('9b216ca5-b332-41ca-9072-6c3ee325ea91')
+    def test_create_fabric(self):
+        """Create fabric
+
+        RBAC test for the Contrail create_fabric policy
+        """
+        with self.rbac_utils.override_role(self):
+            self._create_fabric()
+
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rules=["show_fabric"])
+    @decorators.idempotent_id('244c3530-70e0-4efe-98be-4c2d1ffa0376')
+    def test_show_fabric(self):
+        """Show fabric
+
+        RBAC test for the Contrail show_fabric policy
+        """
+        with self.rbac_utils.override_role(self):
+            self.contrail_client.show_fabric(self.fabric_uuid)
+
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rules=["delete_fabric"])
+    @decorators.idempotent_id('75edc6b9-c66a-46fc-a271-4c54e4cc77b1')
+    def test_delete_fabric(self):
+        """Delete fabric
+
+        RBAC test for the Contrail delete_fabric policy
+        """
+        fab_uuid = self._create_fabric()
+        with self.rbac_utils.override_role(self):
+            self.contrail_client.delete_fabric(fab_uuid)
+
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rules=["update_fabric"])
+    @decorators.idempotent_id('f22c4c26-3843-4fc6-a8ff-7890d5ad1c39')
+    def test_update_fabric(self):
+        """Update fabric
+
+        RBAC test for the Contrail update_fabric policy
+        """
+        with self.rbac_utils.override_role(self):
+            put_body = {'display_name': data_utils.rand_name('update_fab')}
+            self.contrail_client.update_fabric(self.fabric_uuid, **put_body)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_fabric_namespaces.py b/tungsten_tempest_plugin/tests/api/contrail/test_fabric_namespaces.py
new file mode 100644
index 0000000..fe1ef6b
--- /dev/null
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_fabric_namespaces.py
@@ -0,0 +1,125 @@
+# Copyright 2018 AT&T Corp
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from patrole_tempest_plugin import rbac_rule_validation
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
+
+CONF = config.CONF
+
+
+class FabricNamespacesContrailTest(rbac_base.BaseContrailTest):
+
+    required_contrail_version = 5
+
+    @classmethod
+    def resource_setup(cls):
+        super(FabricNamespacesContrailTest, cls).resource_setup()
+        cls.fabric_namespace_uuid = cls._create_fabric_namespace()
+
+    @classmethod
+    def _create_fabric(cls):
+        # Fabric object is required as parent for fabric-namespace
+        fabric = cls.contrail_client.create_fabric(
+            fq_name=["default-global-system-config",
+                     data_utils.rand_name('fabric')],
+            parent_type="global-system-config")
+        cls.addClassResourceCleanup(cls._try_delete_resource,
+                                    cls.contrail_client.delete_fabric,
+                                    fabric["fabric"]["uuid"])
+        return fabric["fabric"]
+
+    @classmethod
+    def _create_fabric_namespace(cls):
+        fabric = cls._create_fabric()
+
+        parent_type = 'fabric'
+        name = data_utils.rand_name('fabric_namespace')
+        fq_name = fabric["fq_name"] + [name]
+
+        post_body = {
+            'fq_name': fq_name,
+            'parent_type': parent_type
+        }
+
+        resp_body = cls.contrail_client.create_fabric_namespace(**post_body)
+        cls.addClassResourceCleanup(
+            cls._try_delete_resource,
+            cls.contrail_client.delete_fabric_namespace,
+            resp_body['fabric-namespace']['uuid'])
+
+        return resp_body['fabric-namespace']['uuid']
+
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rules=["list_fabric_namespaces"])
+    @decorators.idempotent_id('f9935e2a-c4b6-4694-8698-6148faf93e1a')
+    def test_list_fabric_namespaces(self):
+        """List fabric namespaces
+
+        RBAC test for the Contrail list_fabric_namespaces policy
+        """
+        with self.rbac_utils.override_role(self):
+            self.contrail_client.list_fabric_namespaces()
+
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rules=["create_fabric_namespace"])
+    @decorators.idempotent_id('5bb85072-130d-4f36-a787-12b65bdd4c03')
+    def test_create_fabric_namespace(self):
+        """Create fabric namespace
+
+        RBAC test for the Contrail create_fabric_namespace policy
+        """
+        with self.rbac_utils.override_role(self):
+            self._create_fabric_namespace()
+
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rules=["show_fabric_namespace"])
+    @decorators.idempotent_id('5ab5bc8f-7209-427a-9868-4fbc7a7e0d85')
+    def test_show_fabric_namespace(self):
+        """Show fabric namespace
+
+        RBAC test for the Contrail show_fabric_namespace policy
+        """
+        with self.rbac_utils.override_role(self):
+            self.contrail_client.show_fabric_namespace(
+                self.fabric_namespace_uuid)
+
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rules=["delete_fabric_namespace"])
+    @decorators.idempotent_id('ff20e4bb-6110-476e-80b4-d6114981e8bf')
+    def test_delete_fabric_namespace(self):
+        """Delete fabric namespace
+
+        RBAC test for the Contrail delete_fabric_namespace policy
+        """
+        ns_uuid = self._create_fabric_namespace()
+        with self.rbac_utils.override_role(self):
+            self.contrail_client.delete_fabric_namespace(ns_uuid)
+
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rules=["update_fabric_namespace"])
+    @decorators.idempotent_id('78514d86-fcdc-4bc6-99b9-11b5e91b5296')
+    def test_update_fabric_namespace(self):
+        """Update fabric namespace
+
+        RBAC test for the Contrail update_fabric_namespace policy
+        """
+        with self.rbac_utils.override_role(self):
+            put_body = {'display_name': data_utils.rand_name('update_fns')}
+            self.contrail_client.update_fabric_namespace(
+                self.fabric_namespace_uuid, **put_body)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_floating_ip.py b/tungsten_tempest_plugin/tests/api/contrail/test_floating_ip.py
index ee325bc..e20b601 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_floating_ip.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_floating_ip.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class BaseFloatingIpTest(rbac_base.BaseContrailTest):
-
-    """
-    Base class to test floating IP objects using RBAC roles
-    """
+    """Base class to test floating IP objects using RBAC roles"""
 
     @classmethod
     def resource_setup(cls):
@@ -70,13 +65,13 @@
                              'uuid': cls.ipam['uuid'],
                              'attr': {
                                  'ipam_subnets': [{'subnet': subnet_ip_prefix}]
-                                 }
                              }
-                         ],
+                         }
+                     ],
                      'virtual_network_properties': {
                          'forwarding_mode': 'l3'
-                         }
-                    }
+                     }
+                     }
         body = cls.vn_client.create_virtual_networks(**post_body)
         cls.network = body['virtual-network']
 
@@ -90,10 +85,7 @@
 
 
 class FloatingIpPoolTest(BaseFloatingIpTest):
-
-    """
-    Test class to test Floating IP pool objects using RBAC roles
-    """
+    """Test class to test Floating IP pool objects using RBAC roles"""
 
     def _create_floating_ip_pool(self):
         pool_name = data_utils.rand_name('rbac-fip-pool')
@@ -114,44 +106,36 @@
         return fip_pool
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_floating_ip_pools")
-    @idempotent_id('a83ca5e8-be4b-4161-869c-f981a724cf82')
+                                 rules=["create_floating_ip_pools"])
+    @decorators.idempotent_id('a83ca5e8-be4b-4161-869c-f981a724cf82')
     def test_create_floating_ip_pools(self):
-        """
-        test method for create floating IP pool objects
-        """
+        """test method for create floating IP pool objects"""
         with self.rbac_utils.override_role(self):
             self._create_floating_ip_pool()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_floating_ip_pools")
-    @idempotent_id('9d20e78d-0463-4a0e-b30c-40770bee35bc')
+                                 rules=["list_floating_ip_pools"])
+    @decorators.idempotent_id('9d20e78d-0463-4a0e-b30c-40770bee35bc')
     def test_list_floating_ip_pools(self):
-        """
-        test method for list floating IP pool objects
-        """
+        """test method for list floating IP pool objects"""
         self._create_floating_ip_pool()
         with self.rbac_utils.override_role(self):
             self.fip_client.list_floating_ip_pools()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_floating_ip_pool")
-    @idempotent_id('1ec3124c-c15c-4ee6-b2de-2feed9599e38')
+                                 rules=["show_floating_ip_pool"])
+    @decorators.idempotent_id('1ec3124c-c15c-4ee6-b2de-2feed9599e38')
     def test_show_floating_ip_pool(self):
-        """
-        test method for show floating IP pool objects
-        """
+        """test method for show floating IP pool objects"""
         uuid = self._create_floating_ip_pool()['uuid']
         with self.rbac_utils.override_role(self):
             self.fip_client.show_floating_ip_pool(uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_floating_ip_pool")
-    @idempotent_id('6563f2e7-ae6b-483b-8c07-0111efc86817')
+                                 rules=["update_floating_ip_pool"])
+    @decorators.idempotent_id('6563f2e7-ae6b-483b-8c07-0111efc86817')
     def test_update_floating_ip_pool(self):
-        """
-        test method for update floating IP pool objects
-        """
+        """test method for update floating IP pool objects"""
         uuid = self._create_floating_ip_pool()['uuid']
         with self.rbac_utils.override_role(self):
             self.fip_client.update_floating_ip_pool(
@@ -159,22 +143,17 @@
                 display_name='rbac-fip-pool-new-name')
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_floating_ip_pool")
-    @idempotent_id('c4b449ae-2f12-49cf-9dec-2b21c143aff6')
+                                 rules=["delete_floating_ip_pool"])
+    @decorators.idempotent_id('c4b449ae-2f12-49cf-9dec-2b21c143aff6')
     def test_delete_floating_ip_pool(self):
-        """
-        test method for delete floating IP pool objects
-        """
+        """test method for delete floating IP pool objects"""
         uuid = self._create_floating_ip_pool()['uuid']
         with self.rbac_utils.override_role(self):
             self.fip_client.delete_floating_ip_pool(uuid)
 
 
 class FloatingIpTest(BaseFloatingIpTest):
-
-    """
-    Test class to test floating IP objects using RBAC roles
-    """
+    """Test class to test floating IP objects using RBAC roles"""
 
     @classmethod
     def resource_setup(cls):
@@ -210,44 +189,36 @@
         return fip
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_floating_ips")
-    @idempotent_id('ff05f70f-9db9-43cb-a5ce-38cbbef2c430')
+                                 rules=["create_floating_ips"])
+    @decorators.idempotent_id('ff05f70f-9db9-43cb-a5ce-38cbbef2c430')
     def test_create_floating_ips(self):
-        """
-        test method for create floating IP objects
-        """
+        """test method for create floating IP objects"""
         with self.rbac_utils.override_role(self):
             self._create_floating_ip()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_floating_ips")
-    @idempotent_id('e56046f9-32f9-41ce-9c1b-b982997ac347')
+                                 rules=["list_floating_ips"])
+    @decorators.idempotent_id('e56046f9-32f9-41ce-9c1b-b982997ac347')
     def test_list_floating_ips(self):
-        """
-        test method for list floating IP objects
-        """
+        """test method for list floating IP objects"""
         self._create_floating_ip()
         with self.rbac_utils.override_role(self):
             self.fip_client.list_floating_ips()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_floating_ip")
-    @idempotent_id('293f2c26-4101-4a2f-86d4-feb2878bd511')
+                                 rules=["show_floating_ip"])
+    @decorators.idempotent_id('293f2c26-4101-4a2f-86d4-feb2878bd511')
     def test_show_floating_ip(self):
-        """
-        test method for show floating IP objects
-        """
+        """test method for show floating IP objects"""
         uuid = self._create_floating_ip()['uuid']
         with self.rbac_utils.override_role(self):
             self.fip_client.show_floating_ip(uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_floating_ip")
-    @idempotent_id('a09283c9-73d3-42f7-876d-f33040686d6d')
+                                 rules=["update_floating_ip"])
+    @decorators.idempotent_id('a09283c9-73d3-42f7-876d-f33040686d6d')
     def test_update_floating_ip(self):
-        """
-        test method for update floating IP objects
-        """
+        """test method for update floating IP objects"""
         uuid = self._create_floating_ip()['uuid']
         with self.rbac_utils.override_role(self):
             self.fip_client.update_floating_ip(
@@ -255,12 +226,10 @@
                 display_name='rbac-fip-new-name')
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_floating_ip")
-    @idempotent_id('a26f162f-da56-4153-aed6-bffccba92bc7')
+                                 rules=["delete_floating_ip"])
+    @decorators.idempotent_id('a26f162f-da56-4153-aed6-bffccba92bc7')
     def test_delete_floating_ip(self):
-        """
-        test method for delete floating IP objects
-        """
+        """test method for delete floating IP objects"""
         uuid = self._create_floating_ip()['uuid']
         with self.rbac_utils.override_role(self):
             self.fip_client.delete_floating_ip(uuid)
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 6f642f9..d2b8979 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_forwarding_class.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_forwarding_class.py
@@ -18,44 +18,24 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ContrailForwardingClassTest(rbac_base.BaseContrailTest):
+    """Test class to test Forwarding class objects using RBAC roles"""
 
-    """
-    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']
@@ -66,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,
@@ -86,82 +65,60 @@
         return new_fclass
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_forwarding_classs")
-    @idempotent_id('807a66fd-d4a4-472c-a13d-7ba590509e6e')
+                                 rules=["list_forwarding_classs"])
+    @decorators.idempotent_id('807a66fd-d4a4-472c-a13d-7ba590509e6e')
     def test_list_forwarding_classs(self):
-        """
-        test method for list forwarding classes objects
-        """
+        """test method for list forwarding classes objects"""
         with self.rbac_utils.override_role(self):
             self.forwarding_class_client.list_forwarding_classs()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_forwarding_class")
-    @idempotent_id('8ef21f71-72a4-4de9-af93-6e759aa463c0')
+                                 rules=["show_forwarding_class"])
+    @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']
+        """test method for show forwarding classes objects"""
         # 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'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_forwarding_classs")
-    @idempotent_id('d098859c-ad36-4385-8fb0-c00934a99b6f')
-    def test_create_forwarding_classs(self):
-        """
-        test method for create forwarding classes objects
-        """
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
+                                 rules=["create_forwarding_classs"])
+    @decorators.idempotent_id('d098859c-ad36-4385-8fb0-c00934a99b6f')
+    def test_create_forwarding_class(self):
+        """test method for create forwarding classes objects"""
         # 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=CONF.sdn.service_name,
-                                 rule="update_forwarding_class")
-    @idempotent_id('589dc03d-a25d-48be-9d9c-d3f92ff2cfc6')
+                                 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']
+        """test method for update forwarding classes objects"""
         # 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(
                 new_fclass['uuid'], display_name=update_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_forwarding_class")
-    @idempotent_id('a0348ffc-68c5-4d94-ba03-d08483503ced')
+                                 rules=["delete_forwarding_class"])
+    @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']
+        """test method for delete forwarding classes objects"""
         # 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_fqname_id.py b/tungsten_tempest_plugin/tests/api/contrail/test_fqname_id.py
index e8c8a3c..a798ed8 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_fqname_id.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_fqname_id.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class FqnameIdTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test Fqname ID objects using RBAC roles
-    """
+    """Test class to test Fqname ID objects using RBAC roles"""
 
     @classmethod
     def resource_setup(cls):
@@ -55,22 +50,18 @@
         super(FqnameIdTest, cls).resource_cleanup()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="fqname_to_id")
-    @idempotent_id('1fc1350b-3146-49bc-9af5-a61a98b55541')
+                                 rules=["fqname_to_id"])
+    @decorators.idempotent_id('1fc1350b-3146-49bc-9af5-a61a98b55541')
     def test_fqname_to_id(self):
-        """
-        test method for fqname to id rules objects
-        """
+        """test method for fqname to id rules objects"""
         with self.rbac_utils.override_role(self):
             self.fq_client.fqname_to_id(fq_name=self.network['fq_name'],
                                         type=self.type)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="id_to_fqname")
-    @idempotent_id('ecdd77d7-8508-4639-86cd-b97907b363ff')
+                                 rules=["id_to_fqname"])
+    @decorators.idempotent_id('ecdd77d7-8508-4639-86cd-b97907b363ff')
     def test_id_to_fqname(self):
-        """
-        test method for id to fqname rules objects
-        """
+        """test method for id to fqname rules objects"""
         with self.rbac_utils.override_role(self):
             self.fq_client.id_to_fqname(uuid=self.network['uuid'])
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_instance_ip.py b/tungsten_tempest_plugin/tests/api/contrail/test_instance_ip.py
index d242ffd..92ff740 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_instance_ip.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_instance_ip.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class InstanceIPTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test instance IP objects using RBAC roles
-    """
+    """Test class to test instance IP objects using RBAC roles"""
 
     @classmethod
     def resource_setup(cls):
@@ -65,13 +60,13 @@
                              'uuid': cls.ipam['uuid'],
                              'attr': {
                                  'ipam_subnets': [{'subnet': subnet_ip_prefix}]
-                                 }
                              }
-                         ],
+                         }
+                     ],
                      'virtual_network_properties': {
                          'forwarding_mode': 'l3'
-                         }
-                    }
+                     }
+                     }
         body = cls.vn_client.create_virtual_networks(**post_body)
         cls.network = body['virtual-network']
 
@@ -106,44 +101,36 @@
         return iip
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_instance_ips")
-    @idempotent_id('31db3b3f-c40b-4f7f-bb8b-0a110f099553')
+                                 rules=["list_instance_ips"])
+    @decorators.idempotent_id('31db3b3f-c40b-4f7f-bb8b-0a110f099553')
     def test_list_instance_ips(self):
-        """
-        test method for list instance IP objects
-        """
+        """test method for list instance IP objects"""
         self._create_instance_ip()
         with self.rbac_utils.override_role(self):
             self.iip_client.list_instance_ips()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_instance_ips")
-    @idempotent_id('78f5cd4d-345d-4d87-8b8b-4d5d3fec4a12')
+                                 rules=["create_instance_ips"])
+    @decorators.idempotent_id('78f5cd4d-345d-4d87-8b8b-4d5d3fec4a12')
     def test_create_instance_ips(self):
-        """
-        test method for create instance IP objects
-        """
+        """test method for create instance IP objects"""
         with self.rbac_utils.override_role(self):
             self._create_instance_ip()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_instance_ip")
-    @idempotent_id('276f3838-d9cb-4432-bbb4-db31c4c1db5c')
+                                 rules=["show_instance_ip"])
+    @decorators.idempotent_id('276f3838-d9cb-4432-bbb4-db31c4c1db5c')
     def test_show_instance_ip(self):
-        """
-        test method for update instance IP objects
-        """
+        """test method for update instance IP objects"""
         uuid = self._create_instance_ip()['uuid']
         with self.rbac_utils.override_role(self):
             self.iip_client.show_instance_ip(uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_instance_ip")
-    @idempotent_id('b85975a5-176f-44b1-a615-b6f0a39a7708')
+                                 rules=["update_instance_ip"])
+    @decorators.idempotent_id('b85975a5-176f-44b1-a615-b6f0a39a7708')
     def test_update_instance_ip(self):
-        """
-        test method for update instance IP objects
-        """
+        """test method for update instance IP objects"""
         uuid = self._create_instance_ip()['uuid']
         with self.rbac_utils.override_role(self):
             self.iip_client.update_instance_ip(
@@ -151,12 +138,10 @@
                 display_name='rbac-iip-new-name')
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_instance_ip")
-    @idempotent_id('d9c1d400-1dfb-4adb-8d97-0e8b498226b7')
+                                 rules=["delete_instance_ip"])
+    @decorators.idempotent_id('d9c1d400-1dfb-4adb-8d97-0e8b498226b7')
     def test_delete_instance_ip(self):
-        """
-        test method for delete instance IP objects
-        """
+        """test method for delete instance IP objects"""
         uuid = self._create_instance_ip()['uuid']
         with self.rbac_utils.override_role(self):
             self.iip_client.delete_instance_ip(uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_interfaces.py b/tungsten_tempest_plugin/tests/api/contrail/test_interfaces.py
index 9115fc2..b313d1d 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_interfaces.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_interfaces.py
@@ -18,49 +18,28 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class InterfacesTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test interfaces objects using RBAC roles
-    """
+    """Test class to test interfaces objects using RBAC roles"""
 
     router_name = data_utils.rand_name('rbac-physical-router')
     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']
@@ -70,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']
@@ -82,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']
@@ -94,34 +75,27 @@
         return logical_if
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_physical_interfaces")
-    @idempotent_id('c496a2b4-51b2-4674-a60e-483a315baccb')
+                                 rules=["list_physical_interfaces"])
+    @decorators.idempotent_id('c496a2b4-51b2-4674-a60e-483a315baccb')
     def test_list_physical_interfaces(self):
-        """
-        test method for list physical interfaces objects
-        """
+        """test method for list physical interfaces objects"""
         with self.rbac_utils.override_role(self):
             self.interface_client.list_physical_interfaces()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_physical_interfaces")
-    @idempotent_id('066f53d8-3d2a-4ad6-983f-243de7c12962')
+                                 rules=["create_physical_interfaces"])
+    @decorators.idempotent_id('066f53d8-3d2a-4ad6-983f-243de7c12962')
     def test_create_physical_interfaces(self):
-        """
-        test method for create physical interfaces objects
-        """
-
+        """test method for create physical interfaces objects"""
         self._create_physical_router()
         with self.rbac_utils.override_role(self):
             self._create_physical_interface()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_physical_interface")
-    @idempotent_id('91c4fc90-ed0f-42ec-87c6-ff6c2a9ab8de')
+                                 rules=["update_physical_interface"])
+    @decorators.idempotent_id('91c4fc90-ed0f-42ec-87c6-ff6c2a9ab8de')
     def test_update_physical_interface(self):
-        """
-        test method for update physical interfaces objects
-        """
+        """test method for update physical interfaces objects"""
         self._create_physical_router()
         uuid = self._create_physical_interface()['uuid']
         # Required for Contrail 3.0.3 but not for 3.1.1
@@ -136,59 +110,48 @@
                 uuid, **body)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_physical_interface")
-    @idempotent_id('5d77ea76-be8c-49cc-8f08-72fbdaf9028f')
+                                 rules=["delete_physical_interface"])
+    @decorators.idempotent_id('5d77ea76-be8c-49cc-8f08-72fbdaf9028f')
     def test_delete_physical_interface(self):
-        """
-        test method for delete physical interfaces objects
-        """
+        """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)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_physical_interface")
-    @idempotent_id('2c75c7e7-ef34-4e24-9c2f-5a2182db33a6')
+                                 rules=["show_physical_interface"])
+    @decorators.idempotent_id('2c75c7e7-ef34-4e24-9c2f-5a2182db33a6')
     def test_show_physical_interface(self):
-        """
-        test method for show physical interfaces objects
-        """
+        """test method for show physical interfaces objects"""
         self._create_physical_router()
         uuid = self._create_physical_interface()['uuid']
         with self.rbac_utils.override_role(self):
             self.interface_client.show_physical_interface(uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_logical_interfaces")
-    @idempotent_id('43ac3727-4a43-42d7-b52f-df75018915b9')
+                                 rules=["list_logical_interfaces"])
+    @decorators.idempotent_id('43ac3727-4a43-42d7-b52f-df75018915b9')
     def test_list_logical_interfaces(self):
-        """
-        test method for list physical interfaces objects
-        """
+        """test method for list physical interfaces objects"""
         with self.rbac_utils.override_role(self):
             self.interface_client.list_logical_interfaces()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_logical_interfaces")
-    @idempotent_id('503facf2-0752-47e4-a0a4-7a3103133a61')
+                                 rules=["create_logical_interfaces"])
+    @decorators.idempotent_id('503facf2-0752-47e4-a0a4-7a3103133a61')
     def test_create_logical_interfaces(self):
-        """
-        test method for create logical interfaces objects
-        """
+        """test method for create logical interfaces objects"""
         self._create_physical_router()
         self._create_physical_interface()
         with self.rbac_utils.override_role(self):
             self._create_logical_interface()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_logical_interface")
-    @idempotent_id('63c991f4-6aba-454c-9c49-522dc77b3f5c')
+                                 rules=["update_logical_interface"])
+    @decorators.idempotent_id('63c991f4-6aba-454c-9c49-522dc77b3f5c')
     def test_update_logical_interface(self):
-        """
-        test method for update logical interfaces objects
-        """
+        """test method for update logical interfaces objects"""
         self._create_physical_router()
         self._create_physical_interface()
         uuid = self._create_logical_interface()['uuid']
@@ -204,12 +167,10 @@
                 uuid, **body)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_logical_interface")
-    @idempotent_id('a36743d1-3ea1-4cf5-89d8-9c0b885fa625')
+                                 rules=["delete_logical_interface"])
+    @decorators.idempotent_id('a36743d1-3ea1-4cf5-89d8-9c0b885fa625')
     def test_delete_logical_interface(self):
-        """
-        test method for update logical interfaces objects
-        """
+        """test method for update logical interfaces objects"""
         self._create_physical_router()
         self._create_physical_interface()
         uuid = self._create_logical_interface()['uuid']
@@ -217,12 +178,10 @@
             self.interface_client.delete_logical_interface(uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_logical_interface")
-    @idempotent_id('f0f7fab7-eeb9-4d29-8415-31a50180fb44')
+                                 rules=["show_logical_interface"])
+    @decorators.idempotent_id('f0f7fab7-eeb9-4d29-8415-31a50180fb44')
     def test_show_logical_interface(self):
-        """
-        test method for show logical interfaces objects
-        """
+        """test method for show logical interfaces objects"""
         self._create_physical_router()
         self._create_physical_interface()
         uuid = self._create_logical_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 647f053..4c220ce 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_load_balancer.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_load_balancer.py
@@ -18,24 +18,28 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+from tempest import test
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class BaseLoadBalancerTest(rbac_base.BaseContrailTest):
+    """Base class to test load balancer objects using RBAC roles"""
 
-    """
-    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') and \
+                not test.is_extension_enabled('lbaasv2', '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')
@@ -167,121 +171,98 @@
 
 
 class LoadBalancerContrailTest(BaseLoadBalancerTest):
-
-    """
-    Test class to test load balancer objects using RBAC roles
-    """
+    """Test class to test load balancer objects using RBAC roles"""
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_load_balancers")
-    @idempotent_id('5d840b6b-3974-4945-916f-dd53ba27e42f')
+                                 rules=["list_load_balancers"])
+    @decorators.idempotent_id('5d840b6b-3974-4945-916f-dd53ba27e42f')
     def test_list_load_balancers(self):
-        """
-        test method for list load balancer objects
-        """
+        """test method for list load balancer objects"""
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.list_load_balancers()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_load_balancers")
-    @idempotent_id('6a18d506-0794-4eb9-a945-165bf146005d')
+                                 rules=["create_load_balancers"])
+    @decorators.idempotent_id('6a18d506-0794-4eb9-a945-165bf146005d')
     def test_create_load_balancers(self):
-        """
-        test method for create load balancer objects
-        """
+        """test method for create load balancer objects"""
         with self.rbac_utils.override_role(self):
             self._create_load_balancer()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_load_balancer")
-    @idempotent_id('428012aa-cd0e-4702-89d2-459046d4bd5f')
+                                 rules=["show_load_balancer"])
+    @decorators.idempotent_id('428012aa-cd0e-4702-89d2-459046d4bd5f')
     def test_show_load_balancer(self):
-        """
-        test method for show load balancer objects
-        """
+        """test method for show load balancer objects"""
         lb_uuid = self._create_load_balancer()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.show_load_balancer(lb_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_load_balancer")
-    @idempotent_id('7cd3d7b2-b149-40c1-a801-a6a8a660bd24')
+                                 rules=["update_load_balancer"])
+    @decorators.idempotent_id('7cd3d7b2-b149-40c1-a801-a6a8a660bd24')
     def test_update_load_balancer(self):
-        """
-        test method for update load balancer objects
-        """
+        """test method for update load balancer objects"""
         lb_uuid = self._create_load_balancer()
         with self.rbac_utils.override_role(self):
             self._update_load_balancer(lb_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_load_balancer")
-    @idempotent_id('b28c6b11-d1b0-45d0-8942-638b6b590702')
+                                 rules=["delete_load_balancer"])
+    @decorators.idempotent_id('b28c6b11-d1b0-45d0-8942-638b6b590702')
     def test_delete_load_balancer(self):
-        """
-        test method for delete load balancer objects
-        """
+        """test method for delete load balancer objects"""
         lb_uuid = self._create_load_balancer()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.delete_load_balancer(lb_uuid)
 
 
 class LoadBalancerHealthMonitorContrailTest(BaseLoadBalancerTest):
+    """Test class to test load balancer Health Monitor objects using RBAC roles
 
     """
-    Test class to test load balancer Health Monitor objects using RBAC roles
-    """
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_load_balancer_health_monitors")
-    @idempotent_id('3e3d8bdc-3621-4c5e-8130-1187f445a4e6')
+                                 rules=["list_load_balancer_health_monitors"])
+    @decorators.idempotent_id('3e3d8bdc-3621-4c5e-8130-1187f445a4e6')
     def test_list_lb_health_monitors(self):
-        """
-        test method for list load balancer health monitor objects
-        """
+        """test method for list load balancer health monitor objects"""
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.list_lb_healthmonitors()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_load_balancer_health_monitors")
-    @idempotent_id('bddb93ad-d331-4bbc-bac6-2763cae4eb2c')
+                                 rules=["create_load_balancer_health_monitors"]
+                                 )
+    @decorators.idempotent_id('bddb93ad-d331-4bbc-bac6-2763cae4eb2c')
     def test_create_lb_health_monitors(self):
-        """
-        test method for create load balancer health monitor objects
-        """
+        """test method for create load balancer health monitor objects"""
         with self.rbac_utils.override_role(self):
             self._create_load_balancer_health_monitor()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_load_balancer_health_monitor")
-    @idempotent_id('30d23994-1e3a-4a76-8f18-e00d0854412a')
+                                 rules=["show_load_balancer_health_monitor"])
+    @decorators.idempotent_id('30d23994-1e3a-4a76-8f18-e00d0854412a')
     def test_show_lb_health_monitor(self):
-        """
-        test method for show load balancer health monitor objects
-        """
+        """test method for show load balancer health monitor objects"""
         lb_hm_uuid = self._create_load_balancer_health_monitor()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.show_lb_healthmonitor(
                 lb_hm_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_load_balancer_health_monitor")
-    @idempotent_id('c32ba92c-3a69-4255-867a-1423c93faa6f')
+                                 rules=["update_load_balancer_health_monitor"])
+    @decorators.idempotent_id('c32ba92c-3a69-4255-867a-1423c93faa6f')
     def test_update_lb_health_monitor(self):
-        """
-        test method for update load balancer health monitor objects
-        """
+        """test method for update load balancer health monitor objects"""
         lb_hm_uuid = self._create_load_balancer_health_monitor()
         with self.rbac_utils.override_role(self):
             self._update_load_balancer_health_monitor(lb_hm_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_load_balancer_health_monitor")
-    @idempotent_id('b4d7ea9d-fd8c-433b-96fc-c24866b3f6a7')
+                                 rules=["delete_load_balancer_health_monitor"])
+    @decorators.idempotent_id('b4d7ea9d-fd8c-433b-96fc-c24866b3f6a7')
     def test_delete_lb_health_monitor(self):
-        """
-        test method for delete load balancer health monitor objects
-        """
+        """test method for delete load balancer health monitor objects"""
         lb_hm_uuid = self._create_load_balancer_health_monitor()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.delete_lb_healthmonitor(
@@ -289,61 +270,48 @@
 
 
 class LoadBalancerListenerContrailTest(BaseLoadBalancerTest):
-
-    """
-    Base class to test load balancer Listener objects using RBAC roles
-    """
+    """Base class to test load balancer Listener objects using RBAC roles"""
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_load_balancer_listeners")
-    @idempotent_id('7e02882f-0eab-41c2-b48a-bf71e083b912')
+                                 rules=["list_load_balancer_listeners"])
+    @decorators.idempotent_id('7e02882f-0eab-41c2-b48a-bf71e083b912')
     def test_list_lb_listeners(self):
-        """
-        test method for list load balancer listener objects
-        """
+        """test method for list load balancer listener objects"""
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.list_load_balancer_listeners()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_load_balancer_listeners")
-    @idempotent_id('0551de87-fa4c-463f-8968-ec6f2a6098d0')
+                                 rules=["create_load_balancer_listeners"])
+    @decorators.idempotent_id('0551de87-fa4c-463f-8968-ec6f2a6098d0')
     def test_create_lb_listeners(self):
-        """
-        test method for create load balancer listener objects
-        """
+        """test method for create load balancer listener objects"""
         with self.rbac_utils.override_role(self):
             self._create_load_balancer_listener()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_load_balancer_listener")
-    @idempotent_id('ade38959-9506-4262-8d3c-5ba5eb63d85f')
+                                 rules=["show_load_balancer_listener"])
+    @decorators.idempotent_id('ade38959-9506-4262-8d3c-5ba5eb63d85f')
     def test_show_lb_listener(self):
-        """
-        test method for show load balancer listener objects
-        """
+        """test method for show load balancer listener objects"""
         lb_listener_uuid = self._create_load_balancer_listener()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.show_load_balancer_listener(
                 lb_listener_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_load_balancer_listener")
-    @idempotent_id('e529e538-da31-4159-91c2-6c0a828282a4')
+                                 rules=["update_load_balancer_listener"])
+    @decorators.idempotent_id('e529e538-da31-4159-91c2-6c0a828282a4')
     def test_update_lb_listener(self):
-        """
-        test method for update load balancer listener objects
-        """
+        """test method for update load balancer listener objects"""
         lb_listener_uuid = self._create_load_balancer_listener()
         with self.rbac_utils.override_role(self):
             self._update_load_balancer_listener(lb_listener_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_load_balancer_listener")
-    @idempotent_id('feaf3e9a-ffd1-4327-ad7a-35f9e9e4989b')
+                                 rules=["delete_load_balancer_listener"])
+    @decorators.idempotent_id('feaf3e9a-ffd1-4327-ad7a-35f9e9e4989b')
     def test_delete_lb_listener(self):
-        """
-        test method for delete load balancer listener objects
-        """
+        """test method for delete load balancer listener objects"""
         lb_listener_uuid = self._create_load_balancer_listener()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.delete_load_balancer_listener(
@@ -351,120 +319,94 @@
 
 
 class LoadBalancerPoolContrailTest(BaseLoadBalancerTest):
-
-    """
-    Base class to test load balancer Pool objects using RBAC roles
-    """
+    """Base class to test load balancer Pool objects using RBAC roles"""
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_load_balancer_pools")
-    @idempotent_id('3d177a9e-7067-4e9e-b4e8-0acc5887dff0')
+                                 rules=["list_load_balancer_pools"])
+    @decorators.idempotent_id('3d177a9e-7067-4e9e-b4e8-0acc5887dff0')
     def test_list_load_balancer_pools(self):
-        """
-        test method for list load balancer pool objects
-        """
+        """test method for list load balancer pool objects"""
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.list_load_balancer_pools()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_load_balancer_pools")
-    @idempotent_id('a52c6ec7-a996-4191-9a70-7879a211a711')
+                                 rules=["create_load_balancer_pools"])
+    @decorators.idempotent_id('a52c6ec7-a996-4191-9a70-7879a211a711')
     def test_create_load_balancer_pools(self):
-        """
-        test method for create load balancer pool objects
-        """
+        """test method for create load balancer pool objects"""
         with self.rbac_utils.override_role(self):
             self._create_load_balancer_pool()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_load_balancer_pool")
-    @idempotent_id('7923da4e-53b1-4024-9a40-5bc91cee8e2d')
+                                 rules=["show_load_balancer_pool"])
+    @decorators.idempotent_id('7923da4e-53b1-4024-9a40-5bc91cee8e2d')
     def test_show_load_balancer_pool(self):
-        """
-        test method for show load balancer pool objects
-        """
+        """test method for show load balancer pool objects"""
         lb_pool_uuid = self._create_load_balancer_pool()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.show_load_balancer_pool(lb_pool_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_load_balancer_pool")
-    @idempotent_id('391c0c5e-c218-4c98-9b58-6d2724ec4c20')
+                                 rules=["update_load_balancer_pool"])
+    @decorators.idempotent_id('391c0c5e-c218-4c98-9b58-6d2724ec4c20')
     def test_update_load_balancer_pool(self):
-        """
-        test method for update load balancer pool objects
-        """
+        """test method for update load balancer pool objects"""
         lb_pool_uuid = self._create_load_balancer_pool()
         with self.rbac_utils.override_role(self):
             self._update_load_balancer_pool(lb_pool_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_load_balancer_pool")
-    @idempotent_id('8b3617c0-4064-48f8-96b8-e2f996fce5c3')
+                                 rules=["delete_load_balancer_pool"])
+    @decorators.idempotent_id('8b3617c0-4064-48f8-96b8-e2f996fce5c3')
     def test_delete_load_balancer_pool(self):
-        """
-        test method for delete load balancer pool objects
-        """
+        """test method for delete load balancer pool objects"""
         lb_pool_uuid = self._create_load_balancer_pool()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.delete_load_balancer_pool(lb_pool_uuid)
 
 
 class LoadBalancerMemberContrailTest(BaseLoadBalancerTest):
-
-    """
-    Base class to test load balancer Member using RBAC roles
-    """
+    """Base class to test load balancer Member using RBAC roles"""
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_load_balancer_members")
-    @idempotent_id('b3c51463-8166-486a-a26e-0f7aeaa41e0f')
+                                 rules=["list_load_balancer_members"])
+    @decorators.idempotent_id('b3c51463-8166-486a-a26e-0f7aeaa41e0f')
     def test_list_load_balancer_members(self):
-        """
-        test method for list load balancer member objects
-        """
+        """test method for list load balancer member objects"""
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.list_load_balancer_members()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_load_balancer_members")
-    @idempotent_id('ad60688f-7a20-4dd5-8229-4076d85b9d55')
+                                 rules=["create_load_balancer_members"])
+    @decorators.idempotent_id('ad60688f-7a20-4dd5-8229-4076d85b9d55')
     def test_create_lb_members(self):
-        """
-        test method for create load balancer member objects
-        """
+        """test method for create load balancer member objects"""
         with self.rbac_utils.override_role(self):
             self._create_load_balancer_member()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_load_balancer_member")
-    @idempotent_id('917602ff-24d5-4a07-a6a6-5e5b9539bbf1')
+                                 rules=["show_load_balancer_member"])
+    @decorators.idempotent_id('917602ff-24d5-4a07-a6a6-5e5b9539bbf1')
     def test_show_load_balancer_member(self):
-        """
-        test method for show load balancer member objects
-        """
+        """test method for show load balancer member objects"""
         lb_member_uuid = self._create_load_balancer_member()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.show_load_balancer_member(lb_member_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_load_balancer_member")
-    @idempotent_id('b1611005-5c77-4ac0-8fcc-4a035dfbaa84')
+                                 rules=["update_load_balancer_member"])
+    @decorators.idempotent_id('b1611005-5c77-4ac0-8fcc-4a035dfbaa84')
     def test_update_lb_member(self):
-        """
-        test method for update load balancer member objects
-        """
+        """test method for update load balancer member objects"""
         lb_member_uuid = self._create_load_balancer_member()
         with self.rbac_utils.override_role(self):
             self._update_load_balancer_member(lb_member_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_load_balancer_member")
-    @idempotent_id('dc21883a-a822-4d39-b815-4dfd6b505b0b')
+                                 rules=["delete_load_balancer_member"])
+    @decorators.idempotent_id('dc21883a-a822-4d39-b815-4dfd6b505b0b')
     def test_delete_lb_member(self):
-        """
-        test method for delete load balancer member objects
-        """
+        """test method for delete load balancer member objects"""
         lb_member_uuid = self._create_load_balancer_member()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.delete_load_balancer_member(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_namespace.py b/tungsten_tempest_plugin/tests/api/contrail/test_namespace.py
index a3b18ec..ab1dd9c 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_namespace.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_namespace.py
@@ -17,26 +17,20 @@
 Tempest test-case to test namespace objects using RBAC roles
 """
 
-
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class NamespaceContrailTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test namespace objects using RBAC roles
-    """
+    """Test class to test namespace objects using RBAC roles"""
 
     def _create_namespace(self):
         fq_name = data_utils.rand_name('namespace')
@@ -58,54 +52,44 @@
         self.namespace_client.update_namespace(namespace_uuid, **put_body)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_namespaces")
-    @idempotent_id('e436390d-d669-4047-9838-421ea93e94be')
+                                 rules=["list_namespaces"])
+    @decorators.idempotent_id('e436390d-d669-4047-9838-421ea93e94be')
     def test_list_namespaces(self):
-        """
-        test method for list namespace objects
-        """
+        """test method for list namespace objects"""
         with self.rbac_utils.override_role(self):
             self.namespace_client.list_namespaces()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_namespaces")
-    @idempotent_id('503ae445-7e67-4db6-989a-af0b7f9a7e95')
+                                 rules=["create_namespaces"])
+    @decorators.idempotent_id('503ae445-7e67-4db6-989a-af0b7f9a7e95')
     def test_create_namespaces(self):
-        """
-        test method for create namespace objects
-        """
+        """test method for create namespace objects"""
         with self.rbac_utils.override_role(self):
             self._create_namespace()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_namespace")
-    @idempotent_id('f916971a-7c07-4386-b887-8b78d8a1e528')
+                                 rules=["show_namespace"])
+    @decorators.idempotent_id('f916971a-7c07-4386-b887-8b78d8a1e528')
     def test_show_namespace(self):
-        """
-        test method for show namespace objects
-        """
+        """test method for show namespace objects"""
         namespace_uuid = self._create_namespace()
         with self.rbac_utils.override_role(self):
             self.namespace_client.show_namespace(namespace_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_namespace")
-    @idempotent_id('3649f65a-922a-4b8a-9b8b-520c333e192e')
+                                 rules=["update_namespace"])
+    @decorators.idempotent_id('3649f65a-922a-4b8a-9b8b-520c333e192e')
     def test_update_namespace(self):
-        """
-        test method for update namespace objects
-        """
+        """test method for update namespace objects"""
         namespace_uuid = self._create_namespace()
         with self.rbac_utils.override_role(self):
             self._update_namespace(namespace_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_namespace")
-    @idempotent_id('80e736bf-fc7d-4274-8173-a50c883776a9')
+                                 rules=["delete_namespace"])
+    @decorators.idempotent_id('80e736bf-fc7d-4274-8173-a50c883776a9')
     def test_delete_namespace(self):
-        """
-        test method for delete namespace objects
-        """
+        """test method for delete namespace objects"""
         namespace_uuid = self._create_namespace()
         with self.rbac_utils.override_role(self):
             self.namespace_client.delete_namespace(namespace_uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_network_ipams.py b/tungsten_tempest_plugin/tests/api/contrail/test_network_ipams.py
index d8e72a4..755f7fe 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_network_ipams.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_network_ipams.py
@@ -17,22 +17,18 @@
 Tempest test-case to test network ipam objects using RBAC roles
 """
 
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 
 
 class NetworkIpamsTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test network ipam objects using RBAC roles
-    """
+    """Test class to test network ipam objects using RBAC roles"""
 
     def _create_network_ipams(self):
         ipam_name = data_utils.rand_name('test-ipam')
@@ -46,54 +42,44 @@
         return new_ipam
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_network_ipams")
-    @idempotent_id('9ee2c4d8-3209-4ef8-86e1-0ecea2d4c5f2')
+                                 rules=["list_network_ipams"])
+    @decorators.idempotent_id('9ee2c4d8-3209-4ef8-86e1-0ecea2d4c5f2')
     def test_list_network_ipams(self):
-        """
-        test method for list n/w ipam objects
-        """
+        """test method for list n/w ipam objects"""
         with self.rbac_utils.override_role(self):
             self.network_ipams_client.list_network_ipams()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_network_ipams")
-    @idempotent_id('ef2415ea-0810-413a-85a0-4508c9d7af91')
+                                 rules=["create_network_ipams"])
+    @decorators.idempotent_id('ef2415ea-0810-413a-85a0-4508c9d7af91')
     def test_create_network_ipams(self):
-        """
-        test method for create n/w ipam objects
-        """
+        """test method for create n/w ipam objects"""
         with self.rbac_utils.override_role(self):
             self._create_network_ipams()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_network_ipam")
-    @idempotent_id('527b19e5-068a-44e3-b175-b504eafeec6e')
+                                 rules=["show_network_ipam"])
+    @decorators.idempotent_id('527b19e5-068a-44e3-b175-b504eafeec6e')
     def test_show_network_ipam(self):
-        """
-        test method for show n/w ipam objects
-        """
+        """test method for show n/w ipam objects"""
         new_ipam = self._create_network_ipams()
         with self.rbac_utils.override_role(self):
             self.network_ipams_client.show_network_ipam(new_ipam['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_network_ipam")
-    @idempotent_id('118c1620-efb6-4cc6-8eb5-71bf8631d365')
+                                 rules=["delete_network_ipam"])
+    @decorators.idempotent_id('118c1620-efb6-4cc6-8eb5-71bf8631d365')
     def test_delete_network_ipam(self):
-        """
-        test method for delete n/w ipam objects
-        """
+        """test method for delete n/w ipam objects"""
         new_ipam = self._create_network_ipams()
         with self.rbac_utils.override_role(self):
             self.network_ipams_client.delete_network_ipam(new_ipam['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_network_ipam")
-    @idempotent_id('44cbe2d9-583d-4215-964a-1c321f5e8d92')
+                                 rules=["update_network_ipam"])
+    @decorators.idempotent_id('44cbe2d9-583d-4215-964a-1c321f5e8d92')
     def test_update_network_ipam(self):
-        """
-        test method for update n/w ipam objects
-        """
+        """test method for update n/w ipam objects"""
         new_ipam = self._create_network_ipams()
         with self.rbac_utils.override_role(self):
             self.network_ipams_client.update_network_ipam(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_network_policy.py b/tungsten_tempest_plugin/tests/api/contrail/test_network_policy.py
index 572c145..b3ca053 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_network_policy.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_network_policy.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class NetworkPolicyTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test network policy objects using RBAC roles
-    """
+    """Test class to test network policy objects using RBAC roles"""
 
     def _create_policy(self):
         fq_name = data_utils.rand_name('network-policy')
@@ -59,54 +54,44 @@
                                                          **put_body)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_network_policys")
-    @idempotent_id('fa2a28f3-a8bb-4908-95b9-1e11cf58b16f')
+                                 rules=["list_network_policys"])
+    @decorators.idempotent_id('fa2a28f3-a8bb-4908-95b9-1e11cf58b16f')
     def test_list_policys(self):
-        """
-        test method for list n/w policy objects
-        """
+        """test method for list n/w policy objects"""
         with self.rbac_utils.override_role(self):
             self.network_policy_client.list_network_policys()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_network_policys")
-    @idempotent_id('a30be228-afba-40c9-8678-ae020db68d79')
+                                 rules=["create_network_policys"])
+    @decorators.idempotent_id('a30be228-afba-40c9-8678-ae020db68d79')
     def test_create_network_policys(self):
-        """
-        test method for create n/w policy objects
-        """
+        """test method for create n/w policy objects"""
         with self.rbac_utils.override_role(self):
             self._create_policy()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_network_policy")
-    @idempotent_id('6cefe92e-8936-49a6-bce0-12da3396e7ab')
+                                 rules=["show_network_policy"])
+    @decorators.idempotent_id('6cefe92e-8936-49a6-bce0-12da3396e7ab')
     def test_show_network_policy(self):
-        """
-        test method for show n/w policy objects
-        """
+        """test method for show n/w policy objects"""
         policy_uuid = self._create_policy()
         with self.rbac_utils.override_role(self):
             self.network_policy_client.show_network_policy(policy_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_network_policy")
-    @idempotent_id('1d470505-3ad4-4870-87d7-3f0b0f9fc635')
+                                 rules=["update_network_policy"])
+    @decorators.idempotent_id('1d470505-3ad4-4870-87d7-3f0b0f9fc635')
     def test_update_network_policy(self):
-        """
-        test method for update n/w policy objects
-        """
+        """test method for update n/w policy objects"""
         policy_uuid = self._create_policy()
         with self.rbac_utils.override_role(self):
             self._update_policy(policy_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_network_policy")
-    @idempotent_id('aae9018f-e7a2-4a75-a68e-afd6c380640e')
+                                 rules=["delete_network_policy"])
+    @decorators.idempotent_id('aae9018f-e7a2-4a75-a68e-afd6c380640e')
     def test_delete_network_policy(self):
-        """
-        test method for delete n/w policy objects
-        """
+        """test method for delete n/w policy objects"""
         policy_uuid = self._create_policy()
         with self.rbac_utils.override_role(self):
             self.network_policy_client.delete_network_policy(policy_uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_port_tuple.py b/tungsten_tempest_plugin/tests/api/contrail/test_port_tuple.py
index 82285a1..27fe4e8 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_port_tuple.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_port_tuple.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ContrailPortTupleTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test port tuple objects using RBAC roles
-    """
+    """Test class to test port tuple objects using RBAC roles"""
 
     @classmethod
     def resource_setup(cls):
@@ -75,43 +70,35 @@
         return new_tuple
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_port_tuples")
-    @idempotent_id('3789eef8-0e80-4057-b7b0-926655144beb')
+                                 rules=["list_port_tuples"])
+    @decorators.idempotent_id('3789eef8-0e80-4057-b7b0-926655144beb')
     def test_list_port_tuples(self):
-        """
-        test method for list port tuple objects
-        """
+        """test method for list port tuple objects"""
         with self.rbac_utils.override_role(self):
             self.port_tuple_client.list_port_tuples()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_port_tuple")
-    @idempotent_id('ae5a90ed-5771-4680-be6b-c7626caa3a52')
+                                 rules=["show_port_tuple"])
+    @decorators.idempotent_id('ae5a90ed-5771-4680-be6b-c7626caa3a52')
     def test_show_port_tuple(self):
-        """
-        test method for show port tuple objects
-        """
+        """test method for show port tuple objects"""
         new_tuple = self._create_port_tuple()
         with self.rbac_utils.override_role(self):
             self.port_tuple_client.show_port_tuple(new_tuple['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_port_tuples")
-    @idempotent_id('0e2283da-fe25-4204-b5b3-fef3c200d0c8')
+                                 rules=["create_port_tuples"])
+    @decorators.idempotent_id('0e2283da-fe25-4204-b5b3-fef3c200d0c8')
     def test_create_port_tuples(self):
-        """
-        test method for create port tuple objects
-        """
+        """test method for create port tuple objects"""
         with self.rbac_utils.override_role(self):
             self._create_port_tuple()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_port_tuple")
-    @idempotent_id('b16f19e2-ec8e-4107-961d-561890183dd0')
+                                 rules=["update_port_tuple"])
+    @decorators.idempotent_id('b16f19e2-ec8e-4107-961d-561890183dd0')
     def test_update_port_tuple(self):
-        """
-        test method for update port tuple objects
-        """
+        """test method for update port tuple objects"""
         new_tuple = self._create_port_tuple()
         update_name = data_utils.rand_name('updated_tuple')
         with self.rbac_utils.override_role(self):
@@ -119,12 +106,10 @@
                 new_tuple['uuid'], display_name=update_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_port_tuple")
-    @idempotent_id('3f28e8b8-f9de-437f-a398-0a11c7fcd652')
+                                 rules=["delete_port_tuple"])
+    @decorators.idempotent_id('3f28e8b8-f9de-437f-a398-0a11c7fcd652')
     def test_delete_port_tuple(self):
-        """
-        test method for delete port tuple objects
-        """
+        """test method for delete port tuple objects"""
         new_tuple = self._create_port_tuple()
         with self.rbac_utils.override_role(self):
             self.port_tuple_client.delete_port_tuple(new_tuple['uuid'])
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_project.py b/tungsten_tempest_plugin/tests/api/contrail/test_project.py
index ea6d045..d4faaf6 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_project.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_project.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ProjectContrailTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test project objects using RBAC roles
-    """
+    """Test class to test project objects using RBAC roles"""
 
     def _create_project(self):
         fq_name = data_utils.rand_name('project')
@@ -58,54 +53,44 @@
         self.project_client.update_project(project_uuid, **put_body)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_projects")
-    @idempotent_id('7db819fd-ceee-4a6b-9ad7-2e837c055bdd')
+                                 rules=["list_projects"])
+    @decorators.idempotent_id('7db819fd-ceee-4a6b-9ad7-2e837c055bdd')
     def test_list_projects(self):
-        """
-        test method for list project objects
-        """
+        """test method for list project objects"""
         with self.rbac_utils.override_role(self):
             self.project_client.list_projects()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_projects")
-    @idempotent_id('38b9b7a8-1568-417d-b0a3-e7adee88e4b9')
+                                 rules=["create_projects"])
+    @decorators.idempotent_id('38b9b7a8-1568-417d-b0a3-e7adee88e4b9')
     def test_create_projects(self):
-        """
-        test method for create project objects
-        """
+        """test method for create project objects"""
         with self.rbac_utils.override_role(self):
             self._create_project()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_project")
-    @idempotent_id('c47e57c4-34b0-46c2-a678-83b1fe9afd25')
+                                 rules=["show_project"])
+    @decorators.idempotent_id('c47e57c4-34b0-46c2-a678-83b1fe9afd25')
     def test_show_project(self):
-        """
-        test method for show project objects
-        """
+        """test method for show project objects"""
         project_uuid = self._create_project()
         with self.rbac_utils.override_role(self):
             self.project_client.show_project(project_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_project")
-    @idempotent_id('3d4bd416-16cc-437c-9e95-f9ceda424f8b')
+                                 rules=["update_project"])
+    @decorators.idempotent_id('3d4bd416-16cc-437c-9e95-f9ceda424f8b')
     def test_update_project(self):
-        """
-        test method for update project objects
-        """
+        """test method for update project objects"""
         project_uuid = self._create_project()
         with self.rbac_utils.override_role(self):
             self._update_project(project_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_project")
-    @idempotent_id('787ebe8b-b88d-4488-b157-f70554bdd783')
+                                 rules=["delete_project"])
+    @decorators.idempotent_id('787ebe8b-b88d-4488-b157-f70554bdd783')
     def test_delete_project(self):
-        """
-        test method for delete project objects
-        """
+        """test method for delete project objects"""
         project_uuid = self._create_project()
         with self.rbac_utils.override_role(self):
             self.project_client.delete_project(project_uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_qos_config.py b/tungsten_tempest_plugin/tests/api/contrail/test_qos_config.py
index fb1abde..91b7bbb 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_qos_config.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_qos_config.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 LOG = logging.getLogger(__name__)
 CONF = config.CONF
 
 
 class QosConfigContrailTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test QoS config objects using RBAC roles
-    """
+    """Test class to test QoS config objects using RBAC roles"""
 
     def _delete_qos_config(self, qos_config_id):
         self.qos_client.delete_qos_config(qos_config_id)
@@ -53,55 +48,45 @@
         return qos_config
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_qos_configs")
-    @idempotent_id('6bc44b34-14d4-4e0e-b45d-fe3df047879f')
+                                 rules=["list_qos_configs"])
+    @decorators.idempotent_id('6bc44b34-14d4-4e0e-b45d-fe3df047879f')
     def test_list_qos_configs(self):
-        """
-        test method for list QoS config objects
-        """
+        """test method for list QoS config objects"""
         self._create_qos_configs()
         with self.rbac_utils.override_role(self):
             self.qos_client.list_qos_configs()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_qos_configs")
-    @idempotent_id('031b4a27-22cd-4d93-938d-ba6d0f3163ba')
+                                 rules=["create_qos_configs"])
+    @decorators.idempotent_id('031b4a27-22cd-4d93-938d-ba6d0f3163ba')
     def test_create_qos_configs(self):
-        """
-        test method for create QoS config objects
-        """
+        """test method for create QoS config objects"""
         with self.rbac_utils.override_role(self):
             self._create_qos_configs()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_qos_config")
-    @idempotent_id('a9d82b49-3492-4667-b252-ef30b0ee6eb3')
+                                 rules=["show_qos_config"])
+    @decorators.idempotent_id('a9d82b49-3492-4667-b252-ef30b0ee6eb3')
     def test_show_qos_config(self):
-        """
-        test method for show QoS config objects
-        """
+        """test method for show QoS config objects"""
         qos_config = self._create_qos_configs()
         with self.rbac_utils.override_role(self):
             self.qos_client.show_qos_config(qos_config['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_qos_config")
-    @idempotent_id('d324a5e6-cc86-4444-91a2-74592283a7ec')
+                                 rules=["delete_qos_config"])
+    @decorators.idempotent_id('d324a5e6-cc86-4444-91a2-74592283a7ec')
     def test_delete_qos_config(self):
-        """
-        test method for delete QoS config objects
-        """
+        """test method for delete QoS config objects"""
         qos_config = self._create_qos_configs()
         with self.rbac_utils.override_role(self):
             self.qos_client.delete_qos_config(qos_config['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_qos_config")
-    @idempotent_id('7f1901a5-0cf0-40bd-98a5-f8a930b11cfe')
+                                 rules=["update_qos_config"])
+    @decorators.idempotent_id('7f1901a5-0cf0-40bd-98a5-f8a930b11cfe')
     def test_update_qos_config(self):
-        """
-        test method for update QoS config objects
-        """
+        """test method for update QoS config objects"""
         qos_config = self._create_qos_configs()
         display_name = data_utils.rand_name('qos_config')
         with self.rbac_utils.override_role(self):
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 1325ab9..5389c8d 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
@@ -18,51 +18,31 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 LOG = logging.getLogger(__name__)
 CONF = config.CONF
 
 
 class QosContrailTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test QoS Config objects using RBAC roles
-    """
+    """Test class to test QoS Config objects using RBAC roles"""
 
     @classmethod
     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']
@@ -73,53 +53,37 @@
         return qos_global_config
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_global_qos_configs")
-    @idempotent_id('74e5a7b7-f538-4be3-90a5-6862b07fb118')
+                                 rules=["list_global_qos_configs"])
+    @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)
+        """test method for list global QoS objects"""
+        self._create_qos_global_configs()
         with self.rbac_utils.override_role(self):
             self.qos_client.list_global_qos_configs()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_global_qos_configs")
-    @idempotent_id('d7da1ca0-7bf7-4d1b-982c-820cd37fe9fa')
+                                 rules=["create_global_qos_configs"])
+    @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']
+        """test method for create global QoS objects"""
         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=CONF.sdn.service_name,
-                                 rule="show_global_qos_config")
-    @idempotent_id('e3bd44e0-19a9-46e7-83d3-268dcc537ad9')
+                                 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 method for show global QoS objects"""
+        test = self._create_qos_global_configs()
         with self.rbac_utils.override_role(self):
             self.qos_client.show_global_qos_config(instance_id=test['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_global_qos_config")
-    @idempotent_id('f834c4d7-bc81-4c59-bada-c4d752219a6e')
+                                 rules=["update_global_qos_config"])
+    @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)
+        """test method for update global QoS objects"""
+        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(
@@ -127,15 +91,10 @@
                 display_name=display_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_global_qos_config")
-    @idempotent_id('78b9a3da-4eb1-4f4b-8a23-a8a2e733b515')
+                                 rules=["delete_global_qos_config"])
+    @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)
+        """test method for delete global QoS objects"""
+        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 229811a..49c822e 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_qos_queue.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_qos_queue.py
@@ -18,32 +18,30 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 LOG = logging.getLogger(__name__)
 CONF = config.CONF
 
 
 class QosQueueContrailTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test QoS Queue using RBAC roles
-    """
+    """Test class to test QoS Queue using RBAC roles"""
 
     def _delete_qos_queue(self, qos_queue_id):
         self.qos_client.delete_qos_queue(qos_queue_id)
 
     def _create_qos_queues(self):
         name = data_utils.rand_name('test-rbac-qos-queue')
-        fq_name = ["default-global-system-config", "default-global-qos-config",
-                   name]
+        if rbac_base.get_contail_version() < 3.2:
+            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,
@@ -52,55 +50,45 @@
         return qos_queue
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_qos_queues")
-    @idempotent_id('3d3a4397-2afe-4bbd-be59-56a1bcc2e49d')
+                                 rules=["list_qos_queues"])
+    @decorators.idempotent_id('3d3a4397-2afe-4bbd-be59-56a1bcc2e49d')
     def test_list_qos_queues(self):
-        """
-        test method for listing QoS queues
-        """
+        """test method for listing QoS queues"""
         self._create_qos_queues()
         with self.rbac_utils.override_role(self):
             self.qos_client.list_qos_queues()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_qos_queues")
-    @idempotent_id('d89c45f4-c83c-47b3-8720-7feffab4519c')
+                                 rules=["create_qos_queues"])
+    @decorators.idempotent_id('d89c45f4-c83c-47b3-8720-7feffab4519c')
     def test_create_qos_queues(self):
-        """
-         test method for creating QoS queues
-        """
+        """test method for creating QoS queues"""
         with self.rbac_utils.override_role(self):
             self._create_qos_queues()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_qos_queue")
-    @idempotent_id('d2773d5c-9858-4938-8a77-62cafd5034da')
+                                 rules=["show_qos_queue"])
+    @decorators.idempotent_id('d2773d5c-9858-4938-8a77-62cafd5034da')
     def test_show_qos_queue(self):
-        """
-        test method for showing QoS queues
-        """
+        """test method for showing QoS queues"""
         qos_queue = self._create_qos_queues()
         with self.rbac_utils.override_role(self):
             self.qos_client.show_qos_queue(qos_queue['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_qos_queue")
-    @idempotent_id('64c828d0-6594-472b-a504-40915067c7bd')
+                                 rules=["delete_qos_queue"])
+    @decorators.idempotent_id('64c828d0-6594-472b-a504-40915067c7bd')
     def test_delete_qos_queue(self):
-        """
-        test method for deleting QoS queues
-        """
+        """test method for deleting QoS queues"""
         qos_queue = self._create_qos_queues()
         with self.rbac_utils.override_role(self):
             self.qos_client.delete_qos_queue(qos_queue['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_qos_queue")
-    @idempotent_id('0733ab1a-f5aa-4e70-a011-174aa203dc33')
+                                 rules=["update_qos_queue"])
+    @decorators.idempotent_id('0733ab1a-f5aa-4e70-a011-174aa203dc33')
     def test_update_qos_queue(self):
-        """
-        test method for deleting QoS queues
-        """
+        """test method for deleting QoS queues"""
         qos_queue = self._create_qos_queues()
         display_name = data_utils.rand_name('qos_queue')
         with self.rbac_utils.override_role(self):
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_route.py b/tungsten_tempest_plugin/tests/api/contrail/test_route.py
index 06257c8..70488fa 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_route.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_route.py
@@ -20,24 +20,19 @@
 import random
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ContrailRouteTableTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test route objects using RBAC roles
-    """
+    """Test class to test route objects using RBAC roles"""
 
     def _delete_route_table(self, route_id):
         self.route_client.delete_route_table(route_id)
@@ -55,44 +50,36 @@
         return route_table
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_route_tables")
-    @idempotent_id('ca5a5d42-6e49-40e4-a5ac-de07b397b775')
+                                 rules=["list_route_tables"])
+    @decorators.idempotent_id('ca5a5d42-6e49-40e4-a5ac-de07b397b775')
     def test_list_route_tables(self):
-        """
-        test method for list route table objects
-        """
+        """test method for list route table objects"""
         self._create_route_tables()
         with self.rbac_utils.override_role(self):
             self.route_client.list_route_tables()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_route_table")
-    @idempotent_id('084a2759-991a-4ae2-bde4-8f9915966f6e')
+                                 rules=["show_route_table"])
+    @decorators.idempotent_id('084a2759-991a-4ae2-bde4-8f9915966f6e')
     def test_show_route_table(self):
-        """
-        test method for show route table objects
-        """
+        """test method for show route table objects"""
         route_table = self._create_route_tables()
         with self.rbac_utils.override_role(self):
             self.route_client.show_route_table(route_table['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_route_tables")
-    @idempotent_id('3fab8105-c0be-4c9e-be5f-d2dce4deb921')
+                                 rules=["create_route_tables"])
+    @decorators.idempotent_id('3fab8105-c0be-4c9e-be5f-d2dce4deb921')
     def test_create_route_tables(self):
-        """
-        test method for create route table objects
-        """
+        """test method for create route table objects"""
         with self.rbac_utils.override_role(self):
             self._create_route_tables()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_route_table")
-    @idempotent_id('2acee7ad-843e-40b0-b8f8-a6d90a51c6c8')
+                                 rules=["update_route_table"])
+    @decorators.idempotent_id('2acee7ad-843e-40b0-b8f8-a6d90a51c6c8')
     def test_update_route_table(self):
-        """
-        test method for update route table objects
-        """
+        """test method for update route table objects"""
         route_table = self._create_route_tables()
         display_name = data_utils.rand_name('RouteNew')
         with self.rbac_utils.override_role(self):
@@ -101,22 +88,17 @@
                 display_name=display_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_route_table")
-    @idempotent_id('20a5086c-ec9a-43e0-ae2c-4161c0f4b280')
+                                 rules=["delete_route_table"])
+    @decorators.idempotent_id('20a5086c-ec9a-43e0-ae2c-4161c0f4b280')
     def test_delete_route_table(self):
-        """
-        test method for delete route table objects
-        """
+        """test method for delete route table objects"""
         route_table = self._create_route_tables()
         with self.rbac_utils.override_role(self):
             self._delete_route_table(route_table['uuid'])
 
 
 class ContrailInterfaceRouteTableTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test route interface table using RBAC roles
-    """
+    """Test class to test route interface table using RBAC roles"""
 
     def _delete_interface_route_table(self, route_id):
         self.route_client.delete_interface_route_table(route_id)
@@ -136,45 +118,37 @@
         return interface_route_table
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_interface_route_tables")
-    @idempotent_id('b1f8f0a6-6074-4615-a439-19869a48bc49')
+                                 rules=["list_interface_route_tables"])
+    @decorators.idempotent_id('b1f8f0a6-6074-4615-a439-19869a48bc49')
     def test_list_interface_route(self):
-        """
-        test method for list route interface table objects
-        """
+        """test method for list route interface table objects"""
         self._create_interface_route_tables()
         with self.rbac_utils.override_role(self):
             self.route_client.list_interface_route_tables()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_interface_route_table")
-    @idempotent_id('94703a28-5e33-4003-b95b-6a3cc5752fd4')
+                                 rules=["show_interface_route_table"])
+    @decorators.idempotent_id('94703a28-5e33-4003-b95b-6a3cc5752fd4')
     def test_show_interface_route(self):
-        """
-        test method for show route interface table objects
-        """
+        """test method for show route interface table objects"""
         interface_rte_table = self._create_interface_route_tables()
         with self.rbac_utils.override_role(self):
             self.route_client.show_interface_route_table(
                 interface_rte_table['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_interface_route_tables")
-    @idempotent_id('b89ef437-4759-4c04-948b-d2ff9675ab07')
+                                 rules=["create_interface_route_tables"])
+    @decorators.idempotent_id('b89ef437-4759-4c04-948b-d2ff9675ab07')
     def test_create_interface_route(self):
-        """
-        test method for create route interface table objects
-        """
+        """test method for create route interface table objects"""
         with self.rbac_utils.override_role(self):
             self._create_interface_route_tables()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_interface_route_table")
-    @idempotent_id('e9346d4f-7a07-41bc-8e88-e8ae9fa309ea')
+                                 rules=["update_interface_route_table"])
+    @decorators.idempotent_id('e9346d4f-7a07-41bc-8e88-e8ae9fa309ea')
     def test_update_interface_route(self):
-        """
-        test method for update route interface table objects
-        """
+        """test method for update route interface table objects"""
         interface_rte_table = self._create_interface_route_tables()
         display_name = data_utils.rand_name('InterfaceRouteNew')
         with self.rbac_utils.override_role(self):
@@ -183,12 +157,10 @@
                 display_name=display_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_interface_route_table")
-    @idempotent_id('b00444a5-cb4c-45bc-b393-503e9e333e98')
+                                 rules=["delete_interface_route_table"])
+    @decorators.idempotent_id('b00444a5-cb4c-45bc-b393-503e9e333e98')
     def test_delete_interface_route(self):
-        """
-        test method for delete route interface table objects
-        """
+        """test method for delete route interface table objects"""
         interface_rte_table = self._create_interface_route_tables()
         with self.rbac_utils.override_role(self):
             self._delete_interface_route_table(
@@ -196,10 +168,7 @@
 
 
 class ContrailRouteTargetsTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test route targets using RBAC roles
-    """
+    """Test class to test route targets using RBAC roles"""
 
     def _delete_route_target(self, target_id):
         self.route_client.delete_route_target(target_id)
@@ -219,44 +188,36 @@
         return route_target
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_route_targets")
-    @idempotent_id('757efd07-8027-4a16-887a-1e42f16b4140')
+                                 rules=["list_route_targets"])
+    @decorators.idempotent_id('757efd07-8027-4a16-887a-1e42f16b4140')
     def test_list_route_targets(self):
-        """
-        test method for list route target objects
-        """
+        """test method for list route target objects"""
         self._create_route_targets()
         with self.rbac_utils.override_role(self):
             self.route_client.list_route_targets()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_route_target")
-    @idempotent_id('76c60d98-dd5e-453a-bf0e-7854f78a1a5e')
+                                 rules=["show_route_target"])
+    @decorators.idempotent_id('76c60d98-dd5e-453a-bf0e-7854f78a1a5e')
     def test_show_route_target(self):
-        """
-        test method for show route target objects
-        """
+        """test method for show route target objects"""
         target = self._create_route_targets()
         with self.rbac_utils.override_role(self):
             self.route_client.show_route_target(target['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_route_targets")
-    @idempotent_id('fcdb4ebc-b92d-49f2-88e9-68c93aec94be')
+                                 rules=["create_route_targets"])
+    @decorators.idempotent_id('fcdb4ebc-b92d-49f2-88e9-68c93aec94be')
     def test_create_route_targets(self):
-        """
-        test method for create route target objects
-        """
+        """test method for create route target objects"""
         with self.rbac_utils.override_role(self):
             self._create_route_targets()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_route_target")
-    @idempotent_id('dd830a77-4bfe-4a8c-b4e9-08b6ef2af3be')
+                                 rules=["update_route_target"])
+    @decorators.idempotent_id('dd830a77-4bfe-4a8c-b4e9-08b6ef2af3be')
     def test_update_route_target(self):
-        """
-        test method for update route target objects
-        """
+        """test method for update route target objects"""
         target = self._create_route_targets()
         display_name = data_utils.rand_name('RouteTargetNew')
         with self.rbac_utils.override_role(self):
@@ -265,22 +226,17 @@
                 display_name=display_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_route_target")
-    @idempotent_id('dfaa58f9-ec29-4d51-a475-870fac08908d')
+                                 rules=["delete_route_target"])
+    @decorators.idempotent_id('dfaa58f9-ec29-4d51-a475-870fac08908d')
     def test_delete_route_target(self):
-        """
-        test method for delete route target objects
-        """
+        """test method for delete route target objects"""
         target = self._create_route_targets()
         with self.rbac_utils.override_role(self):
             self._delete_route_target(target['uuid'])
 
 
 class ContrailRouteAggregateTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test route aggregate using RBAC roles
-    """
+    """Test class to test route aggregate using RBAC roles"""
 
     def _delete_route_aggregate(self, route_aggr_id):
         self.route_client.delete_route_aggregate(route_aggr_id)
@@ -299,45 +255,37 @@
         return route_aggr
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_route_aggregates")
-    @idempotent_id('15f2c30c-4404-4228-94a0-86c5ec5cf62e')
+                                 rules=["list_route_aggregates"])
+    @decorators.idempotent_id('15f2c30c-4404-4228-94a0-86c5ec5cf62e')
     def test_list_route_aggregates(self):
-        """
-        test method for list route aggregate objects
-        """
+        """test method for list route aggregate objects"""
         self._create_route_aggregates()
         with self.rbac_utils.override_role(self):
             self.route_client.list_route_aggregates()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_route_aggregate")
-    @idempotent_id('c8edee30-81c4-44e2-8485-055bed853384')
+                                 rules=["show_route_aggregate"])
+    @decorators.idempotent_id('c8edee30-81c4-44e2-8485-055bed853384')
     def test_show_route_aggregate(self):
-        """
-        test method for show route aggregate objects
-        """
+        """test method for show route aggregate objects"""
         route_aggr = self._create_route_aggregates()
         with self.rbac_utils.override_role(self):
             self.route_client.show_route_aggregate(
                 route_aggr['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_route_aggregates")
-    @idempotent_id('7553a54f-e41c-4555-b745-a858c5a70690')
+                                 rules=["create_route_aggregates"])
+    @decorators.idempotent_id('7553a54f-e41c-4555-b745-a858c5a70690')
     def test_create_route_aggregates(self):
-        """
-        test method for create route aggregate objects
-        """
+        """test method for create route aggregate objects"""
         with self.rbac_utils.override_role(self):
             self._create_route_aggregates()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_route_aggregate")
-    @idempotent_id('de1e6102-0bc6-4f9b-a354-48eb051ab5e4')
+                                 rules=["update_route_aggregate"])
+    @decorators.idempotent_id('de1e6102-0bc6-4f9b-a354-48eb051ab5e4')
     def test_update_route_aggregate(self):
-        """
-        test method for update route aggregate objects
-        """
+        """test method for update route aggregate objects"""
         route_aggr = self._create_route_aggregates()
         display_name = data_utils.rand_name('RouteAggregateNew')
         with self.rbac_utils.override_role(self):
@@ -346,12 +294,10 @@
                 display_name=display_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_route_aggregate")
-    @idempotent_id('e16dbdc6-d7cf-43c7-af9d-bd76cc220200')
+                                 rules=["delete_route_aggregate"])
+    @decorators.idempotent_id('e16dbdc6-d7cf-43c7-af9d-bd76cc220200')
     def test_delete_route_aggregate(self):
-        """
-        test method for delete route aggregate objects
-        """
+        """test method for delete route aggregate objects"""
         # Create aggregate
         route_aggr = self._create_route_aggregates()
         with self.rbac_utils.override_role(self):
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_routers.py b/tungsten_tempest_plugin/tests/api/contrail/test_routers.py
index 65133b2..c07ca42 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_routers.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_routers.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class BaseRouterTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test router objects using RBAC roles
-    """
+    """Test class to test router objects using RBAC roles"""
 
     @classmethod
     def resource_setup(cls):
@@ -52,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,
@@ -105,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,
@@ -129,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,
@@ -142,101 +122,74 @@
         return router
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_physical_routers")
-    @idempotent_id('349ac042-b922-4727-9e1b-8f363ee343f3')
+                                 rules=["list_physical_routers"])
+    @decorators.idempotent_id('349ac042-b922-4727-9e1b-8f363ee343f3')
     def test_list_physical_routers(self):
-        """
-        test method for list physical router objects
-        """
+        """test method for list physical router objects"""
         with self.rbac_utils.override_role(self):
             self.router_client.list_physical_routers()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_physical_routers")
-    @idempotent_id('d0b7449e-9037-4f9f-8c7e-9f364c95f18a')
+                                 rules=["create_physical_routers"])
+    @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']
+        """test method for create physical router objects"""
         with self.rbac_utils.override_role(self):
-            self._create_physical_router(global_system_config)
+            self._create_physical_router()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_physical_router")
-    @idempotent_id('6dfc53f4-a884-46d5-b303-22ba59c116f4')
+                                 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']
+        """test method for show physical router objects"""
+        physical_router_uuid = self._create_physical_router()['uuid']
         with self.rbac_utils.override_role(self):
             self.router_client.show_physical_router(physical_router_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_physical_router")
-    @idempotent_id('c270f369-8cd7-4ee3-8ab1-4580c3138a5c')
+                                 rules=["update_physical_router"])
+    @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']
+        """test method for update physical router objects"""
         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,
                 display_name=updated_fq_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_physical_router")
-    @idempotent_id('eeded742-6a8d-4e88-bfa8-fe32db463c53')
+                                 rules=["delete_physical_router"])
+    @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']
+        """test method for delete physical router objects"""
+        physical_router_uuid = self._create_physical_router()['uuid']
         with self.rbac_utils.override_role(self):
             self.router_client.delete_physical_router(physical_router_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_bgp_routers")
-    @idempotent_id('49bfb461-f99e-4585-b051-e20a3c937589')
+                                 rules=["list_bgp_routers"])
+    @decorators.idempotent_id('49bfb461-f99e-4585-b051-e20a3c937589')
     def test_list_bgp_routers(self):
-        """
-        test method for list bgp router objects
-        """
+        """test method for list bgp router objects"""
         with self.rbac_utils.override_role(self):
             self.router_client.list_bgp_routers()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_bgp_routers")
-    @idempotent_id('7567974c-040e-4edd-b3a1-c633aa9651cb')
+                                 rules=["create_bgp_routers"])
+    @decorators.idempotent_id('7567974c-040e-4edd-b3a1-c633aa9651cb')
     def test_create_bgp_routers(self):
-        """
-        test method for create bgp router objects
-        """
+        """test method for create bgp router objects"""
         # Create Routing Instance
         routing_instance = self._create_routing_instances()
         with self.rbac_utils.override_role(self):
             self._create_bgp_router(routing_instance)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_bgp_router")
-    @idempotent_id('0d3ad424-18c9-4d96-8708-fa1ebd45594b')
+                                 rules=["show_bgp_router"])
+    @decorators.idempotent_id('0d3ad424-18c9-4d96-8708-fa1ebd45594b')
     def test_show_bgp_router(self):
-        """
-        test method for show bgp router objects
-        """
+        """test method for show bgp router objects"""
         # Create Routing Instance
         routing_instance = self._create_routing_instances()
         bgp_router_uuid = self._create_bgp_router(routing_instance)['uuid']
@@ -244,12 +197,10 @@
             self.router_client.show_bgp_router(bgp_router_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_bgp_router")
-    @idempotent_id('dc50e7c5-7614-4281-8a66-282c52f3c769')
+                                 rules=["update_bgp_router"])
+    @decorators.idempotent_id('dc50e7c5-7614-4281-8a66-282c52f3c769')
     def test_update_bgp_router(self):
-        """
-        test method for update bgp router objects
-        """
+        """test method for update bgp router objects"""
         # Create Routing Instance
         routing_instance = self._create_routing_instances()
         updated_fq_name = data_utils.rand_name('rbac-bgp-router-new-name')
@@ -260,12 +211,10 @@
                 display_name=updated_fq_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_bgp_router")
-    @idempotent_id('f14aee72-cad4-4c3e-8eea-7886a81abb24')
+                                 rules=["delete_bgp_router"])
+    @decorators.idempotent_id('f14aee72-cad4-4c3e-8eea-7886a81abb24')
     def test_delete_bgp_router(self):
-        """
-        test method for delete bgp router objects
-        """
+        """test method for delete bgp router objects"""
         # Create Routing Instance
         routing_instance = self._create_routing_instances()
         bgp_router_uuid = self._create_bgp_router(routing_instance)['uuid']
@@ -273,113 +222,111 @@
             self.router_client.delete_bgp_router(bgp_router_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_global_vrouter_configs")
-    @idempotent_id('4af768d1-3cbe-4aff-bcbc-0e045cac3277')
-    def test_list_global_vrouter(self):
-        """
-        test method for list global vrouter config objects
-        """
+                                 rules=["list_global_vrouter_configs"])
+    @decorators.idempotent_id('4af768d1-3cbe-4aff-bcbc-0e045cac3277')
+    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()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_global_vrouter_configs")
-    @idempotent_id('e13d800f-9304-4a06-9bf1-ad08345a13a8')
-    def test_create_global_vrouter(self):
-        """
-        test method for create global vrouter config objects
-        """
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
+                                 rules=["create_global_vrouter_configs"])
+    @decorators.idempotent_id('e13d800f-9304-4a06-9bf1-ad08345a13a8')
+    def test_create_global_vrouter_configs(self):
+        """test method for create global vrouter config objects"""
+        # 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()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_global_vrouter_config")
-    @idempotent_id('3bb6f4e1-fd3f-4338-8392-f7f80974a80e')
+                                 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']
+        """test method for show global vrouter config objects"""
+        # 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)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_global_vrouter_config")
-    @idempotent_id('36fcdd51-c42b-4e67-8c26-73d4cde47507')
-    def test_update_global_vrouter(self):
-        """
-        test method for update global vrouter config objects
-        """
-        # Create global system config
-        global_system_config = self._create_global_system_config()['name']
+                                 rules=["update_global_vrouter_config"])
+    @decorators.idempotent_id('36fcdd51-c42b-4e67-8c26-73d4cde47507')
+    def test_update_global_vrouter_config(self):
+        """test method for update global vrouter config objects"""
+        # 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)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_global_vrouter_config")
-    @idempotent_id('4f3d59e8-3dac-4346-9d13-5ebe5ad8f6cf')
-    def test_delete_global_vrouter(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']
+                                 rules=["delete_global_vrouter_config"])
+    @decorators.idempotent_id('4f3d59e8-3dac-4346-9d13-5ebe5ad8f6cf')
+    def test_delete_global_vrouter_config(self):
+        """test method for delete global vrouter config objects"""
+        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)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_logical_routers")
-    @idempotent_id('674bf3de-a9e5-45c2-921b-b89db73a2abe')
+                                 rules=["list_logical_routers"])
+    @decorators.idempotent_id('674bf3de-a9e5-45c2-921b-b89db73a2abe')
     def test_list_logical_routers(self):
-        """
-        test method for list logical router objects
-        """
+        """test method for list logical router objects"""
         with self.rbac_utils.override_role(self):
             self.router_client.list_logical_routers()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_logical_routers")
-    @idempotent_id('610f051b-8eba-4d3a-ba43-91386bfc0e52')
+                                 rules=["create_logical_routers"])
+    @decorators.idempotent_id('610f051b-8eba-4d3a-ba43-91386bfc0e52')
     def test_create_logical_routers(self):
-        """
-        test method for create logical router objects
-        """
+        """test method for create logical router objects"""
         with self.rbac_utils.override_role(self):
             self._create_logical_router()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_logical_router")
-    @idempotent_id('992841d4-0d5d-4d85-b513-049b33e2a2e2')
+                                 rules=["show_logical_router"])
+    @decorators.idempotent_id('992841d4-0d5d-4d85-b513-049b33e2a2e2')
     def test_show_logical_router(self):
-        """
-        test method for show logical router objects
-        """
+        """test method for show logical router objects"""
         logical_router_uuid = self._create_logical_router()['uuid']
         with self.rbac_utils.override_role(self):
             self.router_client.show_logical_router(logical_router_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_logical_router")
-    @idempotent_id('518197bf-5233-4059-9021-5d7ecc74718e')
+                                 rules=["update_logical_router"])
+    @decorators.idempotent_id('518197bf-5233-4059-9021-5d7ecc74718e')
     def test_update_logical_router(self):
-        """
-        test method for update logical router objects
-        """
+        """test method for update logical router objects"""
         updated_fq_name = data_utils.rand_name('rbac-logical-router-new-name')
         logical_router_uuid = self._create_logical_router()['uuid']
         with self.rbac_utils.override_role(self):
@@ -388,79 +335,56 @@
                 display_name=updated_fq_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_logical_router")
-    @idempotent_id('70448b9c-4444-45e0-b307-7bff4dc075b1')
+                                 rules=["delete_logical_router"])
+    @decorators.idempotent_id('70448b9c-4444-45e0-b307-7bff4dc075b1')
     def test_delete_logical_router(self):
-        """
-        test method for delete logical router objects
-        """
+        """test method for delete logical router objects"""
         logical_router_uuid = self._create_logical_router()['uuid']
         with self.rbac_utils.override_role(self):
             self.router_client.delete_logical_router(logical_router_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_virtual_routers")
-    @idempotent_id('604dc476-732e-4890-8665-a497360f5475')
+                                 rules=["list_virtual_routers"])
+    @decorators.idempotent_id('604dc476-732e-4890-8665-a497360f5475')
     def test_list_virtual_routers(self):
-        """
-        test method for list virtual router objects
-        """
+        """test method for list virtual router objects"""
         with self.rbac_utils.override_role(self):
             self.router_client.list_virtual_routers()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_virtual_routers")
-    @idempotent_id('114beb14-45c0-4714-a407-d160bb102022')
+                                 rules=["create_virtual_routers"])
+    @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']
+        """test method for create virtual router objects"""
         with self.rbac_utils.override_role(self):
-            self._create_virtual_router(global_system_config)
+            self._create_virtual_router()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_virtual_router")
-    @idempotent_id('258fe4e0-3e39-460f-aafa-e3b53c96e534')
+                                 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']
+        """test method for show virtual router objects"""
+        virtual_router_uuid = self._create_virtual_router()['uuid']
         with self.rbac_utils.override_role(self):
             self.router_client.show_virtual_router(virtual_router_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_virtual_router")
-    @idempotent_id('d1c72191-2068-4552-a78f-038cdd4c9c1d')
+                                 rules=["update_virtual_router"])
+    @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']
+        """test method for update virtual router objects"""
         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,
                 display_name=updated_fq_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_virtual_router")
-    @idempotent_id('efbe25d6-8763-42d4-baf6-9f342e710144')
+                                 rules=["delete_virtual_router"])
+    @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']
+        """test method for delete virtual router objects"""
+        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_routing.py b/tungsten_tempest_plugin/tests/api/contrail/test_routing.py
index b3f80dd..850f767 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_routing.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_routing.py
@@ -17,22 +17,18 @@
 Tempest test-case to test routing objects using RBAC roles
 """
 
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 
 
 class RoutingTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test routing objects using RBAC roles
-    """
+    """Test class to test routing objects using RBAC roles"""
 
     @classmethod
     def resource_setup(cls):
@@ -62,54 +58,44 @@
         return new_instance
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_routing_instances")
-    @idempotent_id('054c56ba-76b2-4161-a702-40301d8de085')
+                                 rules=["list_routing_instances"])
+    @decorators.idempotent_id('054c56ba-76b2-4161-a702-40301d8de085')
     def test_list_routing_instances(self):
-        """
-        test method for list routing instance objects
-        """
+        """test method for list routing instance objects"""
         with self.rbac_utils.override_role(self):
             self.routing_client.list_routing_instances()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_routing_instances")
-    @idempotent_id('3d44a46b-5436-43a8-b2f7-8581f0f04dbc')
+                                 rules=["create_routing_instances"])
+    @decorators.idempotent_id('3d44a46b-5436-43a8-b2f7-8581f0f04dbc')
     def test_create_routing_instances(self):
-        """
-        test method for create routing instance objects
-        """
+        """test method for create routing instance objects"""
         with self.rbac_utils.override_role(self):
             self._create_routing_instances()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_routing_instance")
-    @idempotent_id('161abb37-6037-422b-b453-108a5d10caca')
+                                 rules=["show_routing_instance"])
+    @decorators.idempotent_id('161abb37-6037-422b-b453-108a5d10caca')
     def test_show_routing_instance(self):
-        """
-        test method for show routing instance objects
-        """
+        """test method for show routing instance objects"""
         new_instance = self._create_routing_instances()
         with self.rbac_utils.override_role(self):
             self.routing_client.show_routing_instance(new_instance['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_routing_instance")
-    @idempotent_id('1d3af01e-01bf-4347-a9bc-633732339e0e')
+                                 rules=["delete_routing_instance"])
+    @decorators.idempotent_id('1d3af01e-01bf-4347-a9bc-633732339e0e')
     def test_delete_routing_instance(self):
-        """
-        test method for delete routing instance objects
-        """
+        """test method for delete routing instance objects"""
         new_instance = self._create_routing_instances()
         with self.rbac_utils.override_role(self):
             self.routing_client.delete_routing_instance(new_instance['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_routing_instance")
-    @idempotent_id('ebcfd442-2a26-4954-968b-e17e414ed0d1')
+                                 rules=["update_routing_instance"])
+    @decorators.idempotent_id('ebcfd442-2a26-4954-968b-e17e414ed0d1')
     def test_update_routing_instance(self):
-        """
-        test method for update routing instance objects
-        """
+        """test method for update routing instance objects"""
         new_instance = self._create_routing_instances()
         with self.rbac_utils.override_role(self):
             self.routing_client.update_routing_instance(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_routing_policy.py b/tungsten_tempest_plugin/tests/api/contrail/test_routing_policy.py
index 9b1dde9..dc0b619 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_routing_policy.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_routing_policy.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class RoutingPolicyTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test routing policy objects using RBAC roles
-    """
+    """Test class to test routing policy objects using RBAC roles"""
 
     def _create_routing_policy(self):
         fq_name = data_utils.rand_name('routing-policy')
@@ -59,54 +54,44 @@
                                                          **put_body)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_routing_policys")
-    @idempotent_id('fe25a306-bc4f-42b3-91ca-38df01e35345')
+                                 rules=["list_routing_policys"])
+    @decorators.idempotent_id('fe25a306-bc4f-42b3-91ca-38df01e35345')
     def test_list_routing_policys(self):
-        """
-        test method for list routing policy objects
-        """
+        """test method for list routing policy objects"""
         with self.rbac_utils.override_role(self):
             self.routing_policy_client.list_routing_policys()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_routing_policys")
-    @idempotent_id('f8ca5e30-8bb3-410f-8618-8fdca70bda06')
+                                 rules=["create_routing_policys"])
+    @decorators.idempotent_id('f8ca5e30-8bb3-410f-8618-8fdca70bda06')
     def test_create_routing_policys(self):
-        """
-        test method for create routing policy objects
-        """
+        """test method for create routing policy objects"""
         with self.rbac_utils.override_role(self):
             self._create_routing_policy()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_routing_policy")
-    @idempotent_id('3421e84e-3e2a-452a-9a26-b2caf00b1cbc')
+                                 rules=["show_routing_policy"])
+    @decorators.idempotent_id('3421e84e-3e2a-452a-9a26-b2caf00b1cbc')
     def test_show_routing_policy(self):
-        """
-        test method for show routing policy objects
-        """
+        """test method for show routing policy objects"""
         policy_uuid = self._create_routing_policy()
         with self.rbac_utils.override_role(self):
             self.routing_policy_client.show_routing_policy(policy_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_routing_policy")
-    @idempotent_id('9fc1f44f-c8e2-4f5a-8239-e9b783f55d94')
+                                 rules=["update_routing_policy"])
+    @decorators.idempotent_id('9fc1f44f-c8e2-4f5a-8239-e9b783f55d94')
     def test_update_routing_policy(self):
-        """
-        test method for update routing policy objects
-        """
+        """test method for update routing policy objects"""
         policy_uuid = self._create_routing_policy()
         with self.rbac_utils.override_role(self):
             self._update_routing_policy(policy_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_routing_policy")
-    @idempotent_id('24f1cd7a-2917-4b81-a0a3-a40ed2d40c7d')
+                                 rules=["delete_routing_policy"])
+    @decorators.idempotent_id('24f1cd7a-2917-4b81-a0a3-a40ed2d40c7d')
     def test_delete_routing_policy(self):
-        """
-        test method for delete routing policy objects
-        """
+        """test method for delete routing policy objects"""
         policy_uuid = self._create_routing_policy()
         with self.rbac_utils.override_role(self):
             self.routing_policy_client.delete_routing_policy(policy_uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_security_group.py b/tungsten_tempest_plugin/tests/api/contrail/test_security_group.py
index 8a14b03..e537f62 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_security_group.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_security_group.py
@@ -17,24 +17,19 @@
 Tempest test-case to test service group objects using RBAC roles
 """
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ContrailSecurityGroupTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test security group objects using RBAC roles
-    """
+    """Test class to test security group objects using RBAC roles"""
 
     def _delete_security_group(self, sec_grp_id):
         return self.security_group_client.delete_security_group(sec_grp_id)
@@ -55,57 +50,47 @@
         return sec_grp
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_security_groups")
-    @idempotent_id('a13cc1d5-f562-4b68-b732-980deb3cddf4')
+                                 rules=["list_security_groups"])
+    @decorators.idempotent_id('a13cc1d5-f562-4b68-b732-980deb3cddf4')
     def test_list_security_groups(self):
-        """
-        test method for list security group objects
-        """
+        """test method for list security group objects"""
         self._create_security_groups()
         with self.rbac_utils.override_role(self):
             self.security_group_client.list_security_groups()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_security_group")
-    @idempotent_id('c7ca1781-08ae-4fa2-bd6d-1f369950c4c4')
+                                 rules=["show_security_group"])
+    @decorators.idempotent_id('c7ca1781-08ae-4fa2-bd6d-1f369950c4c4')
     def test_show_security_group(self):
-        """
-        test method for show security group objects
-        """
+        """test method for show security group objects"""
         grp = self._create_security_groups()
         grp_id = grp['uuid']
         with self.rbac_utils.override_role(self):
             self.security_group_client.show_security_group(grp_id)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_security_group")
-    @idempotent_id('e682d7b4-deb8-4b5c-9c9b-1e1ada827b40')
+                                 rules=["delete_security_group"])
+    @decorators.idempotent_id('e682d7b4-deb8-4b5c-9c9b-1e1ada827b40')
     def test_delete_security_group(self):
-        """
-        test method for delete security group objects
-        """
+        """test method for delete security group objects"""
         grp = self._create_security_groups()
         grp_id = grp['uuid']
         with self.rbac_utils.override_role(self):
             self._delete_security_group(grp_id)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_security_groups")
-    @idempotent_id('63a2ff14-7869-40a2-962a-d65752de5651')
+                                 rules=["create_security_groups"])
+    @decorators.idempotent_id('63a2ff14-7869-40a2-962a-d65752de5651')
     def test_create_security_groups(self):
-        """
-        test method for create security group objects
-        """
+        """test method for create security group objects"""
         with self.rbac_utils.override_role(self):
             self._create_security_groups()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_security_group")
-    @idempotent_id('cf9aafe2-fffb-4028-8fd7-4d6634e144e7')
+                                 rules=["update_security_group"])
+    @decorators.idempotent_id('cf9aafe2-fffb-4028-8fd7-4d6634e144e7')
     def test_update_security_group(self):
-        """
-        test method for update security group objects
-        """
+        """test method for update security group objects"""
         grp = self._create_security_groups()
         grp_id = grp['uuid']
         display_name = data_utils.rand_name('securitygroupnew')
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 7abe131..7cf5e24 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_service_appliances.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_service_appliances.py
@@ -17,41 +17,22 @@
 Tempest test-case to test service appliance using RBAC roles
 """
 
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 
 
 class ServiceAppliancesTest(rbac_base.BaseContrailTest):
+    """Test class to test service appliances objects using RBAC roles"""
 
-    """
-    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']
@@ -76,57 +57,39 @@
         return new_appliance
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_service_appliances")
-    @idempotent_id('6b5fc17c-34e6-4d21-a53e-a0dfe69afd31')
+                                 rules=["list_service_appliances"])
+    @decorators.idempotent_id('6b5fc17c-34e6-4d21-a53e-a0dfe69afd31')
     def test_list_service_appliances(self):
-        """
-        test method for list service appliance objects
-        """
+        """test method for list service appliance objects"""
         with self.rbac_utils.override_role(self):
             self.service_appliances_client.list_service_appliances()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_service_appliances")
-    @idempotent_id('0563c0c8-b986-466e-8540-aa8ad7a10367')
+                                 rules=["create_service_appliances"])
+    @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)
+        """test method for create service appliance objects"""
+        new_set = self._create_service_appliance_sets()
         with self.rbac_utils.override_role(self):
             self._create_service_appliances(new_set)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_service_appliance")
-    @idempotent_id('ea30dcfe-8657-4a7d-9cf1-3176d334bf27')
+                                 rules=["show_service_appliance"])
+    @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)
+        """test method for show service appliance objects"""
+        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(
                 new_appliance['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_service_appliance")
-    @idempotent_id('a54ca33a-8590-4844-96d7-b96882b59e86')
+                                 rules=["update_service_appliance"])
+    @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)
+        """test method for update service appliance objects"""
+        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):
@@ -135,69 +98,48 @@
                 display_name=update_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_service_appliance")
-    @idempotent_id('362deff5-7b72-4929-ba81-972cfcfa1309')
+                                 rules=["delete_service_appliance"])
+    @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)
+        """test method for delete service appliance objects"""
+        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(
                 new_appliance['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_service_appliance_sets")
-    @idempotent_id('c1e74da9-00b6-4c88-adda-2ce49094e570')
+                                 rules=["list_service_appliance_sets"])
+    @decorators.idempotent_id('c1e74da9-00b6-4c88-adda-2ce49094e570')
     def test_list_service_appl_sets(self):
-        """
-        test method for list service appliance sets objects
-        """
+        """test method for list service appliance sets objects"""
         with self.rbac_utils.override_role(self):
             self.service_appliances_client.list_service_appliance_sets()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_service_appliance_sets")
-    @idempotent_id('eb00d6cf-590f-41bf-8ee4-5be625d9cb93')
+                                 rules=["create_service_appliance_sets"])
+    @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']
+        """test method for create service appliance sets objects"""
         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=CONF.sdn.service_name,
-                                 rule="show_service_appliance_set")
-    @idempotent_id('dd35dd04-e7d9-46bb-8f36-26835f122572')
+                                 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)
+        """test method for show service appliance sets objects"""
+        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'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_service_appliance_set")
-    @idempotent_id('952f063b-bc71-4f62-83b1-719bce5ad4ed')
+                                 rules=["update_service_appliance_set"])
+    @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)
+        """test method for update service appliance sets objects"""
+        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(
@@ -205,16 +147,11 @@
                 display_name=update_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_service_appliance_set")
-    @idempotent_id('7b56ce24-da1d-4565-bd22-c58dc57d7045')
+                                 rules=["delete_service_appliance_set"])
+    @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)
+        """test method for delete service appliance sets objects"""
+        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'])
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_service_clients.py b/tungsten_tempest_plugin/tests/api/contrail/test_service_clients.py
index e629526..98283bb 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_service_clients.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_service_clients.py
@@ -17,22 +17,18 @@
 Tempest test-case to test service clients objects using RBAC roles
 """
 
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 
 
 class ServiceClientsTest(rbac_base.BaseContrailTest):
-
-    """
-    Tempest test-case to test service clients objects using RBAC roles
-    """
+    """Tempest test-case to test service clients objects using RBAC roles"""
 
     def _create_service_template(self):
         template_name = data_utils.rand_name('test-template')
@@ -87,44 +83,36 @@
         return new_instance
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_service_templates")
-    @idempotent_id('841b1d32-4308-4fb6-852a-41bdd8c56c37')
+                                 rules=["list_service_templates"])
+    @decorators.idempotent_id('841b1d32-4308-4fb6-852a-41bdd8c56c37')
     def test_list_service_templates(self):
-        """
-        test method for list service template objects
-        """
+        """test method for list service template objects"""
         with self.rbac_utils.override_role(self):
             self.service_client.list_service_templates()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_service_templates")
-    @idempotent_id('3f02d14a-31e2-4476-821f-87d0cc42d9fb')
+                                 rules=["create_service_templates"])
+    @decorators.idempotent_id('3f02d14a-31e2-4476-821f-87d0cc42d9fb')
     def test_create_service_templates(self):
-        """
-        test method for create service template objects
-        """
+        """test method for create service template objects"""
         with self.rbac_utils.override_role(self):
             self._create_service_template()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_service_template")
-    @idempotent_id('1f15d734-2cc6-4ded-916e-134286c6b87b')
+                                 rules=["show_service_template"])
+    @decorators.idempotent_id('1f15d734-2cc6-4ded-916e-134286c6b87b')
     def test_show_service_template(self):
-        """
-        test method for show service template objects
-        """
+        """test method for show service template objects"""
         new_template = self._create_service_template()
         with self.rbac_utils.override_role(self):
             self.service_client.show_service_template(
                 new_template['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_service_template")
-    @idempotent_id('3549debd-4c7a-4574-8d11-4190c8530a23')
+                                 rules=["update_service_template"])
+    @decorators.idempotent_id('3549debd-4c7a-4574-8d11-4190c8530a23')
     def test_update_service_template(self):
-        """
-        test method for update service template objects
-        """
+        """test method for update service template objects"""
         new_template = self._create_service_template()
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
@@ -133,56 +121,46 @@
                 display_name=update_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_service_template")
-    @idempotent_id('e86cabd2-5b7e-4ee8-86ec-db52619b852b')
+                                 rules=["delete_service_template"])
+    @decorators.idempotent_id('e86cabd2-5b7e-4ee8-86ec-db52619b852b')
     def test_delete_service_template(self):
-        """
-        test method for delete service template objects
-        """
+        """test method for delete service template objects"""
         new_template = self._create_service_template()
         with self.rbac_utils.override_role(self):
             self.service_client.delete_service_template(
                 new_template['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_service_health_checks")
-    @idempotent_id('5210d6ca-9a38-4b6b-b5b7-f836c3846079')
+                                 rules=["list_service_health_checks"])
+    @decorators.idempotent_id('5210d6ca-9a38-4b6b-b5b7-f836c3846079')
     def test_list_service_health_checks(self):
-        """
-        test method for list service health check objects
-        """
+        """test method for list service health check objects"""
         with self.rbac_utils.override_role(self):
             self.service_client.list_service_health_checks()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_service_health_checks")
-    @idempotent_id('77716feb-0d05-4cfd-8a17-79cf0b19ed3c')
+                                 rules=["create_service_health_checks"])
+    @decorators.idempotent_id('77716feb-0d05-4cfd-8a17-79cf0b19ed3c')
     def test_create_service_health(self):
-        """
-        test method for create service health check objects
-        """
+        """test method for create service health check objects"""
         with self.rbac_utils.override_role(self):
             self._create_service_health_check()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_service_health_check")
-    @idempotent_id('80db4445-8d6c-4c8f-aa25-d4ea53d32d2c')
+                                 rules=["show_service_health_check"])
+    @decorators.idempotent_id('80db4445-8d6c-4c8f-aa25-d4ea53d32d2c')
     def test_show_service_health(self):
-        """
-        test method for show service health check objects
-        """
+        """test method for show service health check objects"""
         new_health_check = self._create_service_health_check()
         with self.rbac_utils.override_role(self):
             self.service_client.show_service_health_check(
                 new_health_check['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_service_health_check")
-    @idempotent_id('68fb1510-4b76-40cc-8979-e56e537229d2')
+                                 rules=["update_service_health_check"])
+    @decorators.idempotent_id('68fb1510-4b76-40cc-8979-e56e537229d2')
     def test_update_service_health(self):
-        """
-        test method for update service health check objects
-        """
+        """test method for update service health check objects"""
         new_health_check = self._create_service_health_check()
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
@@ -191,68 +169,56 @@
                 display_name=update_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_service_health_check")
-    @idempotent_id('2dce3942-402a-48a4-b682-fdc425d3d935')
+                                 rules=["delete_service_health_check"])
+    @decorators.idempotent_id('2dce3942-402a-48a4-b682-fdc425d3d935')
     def test_delete_service_health(self):
-        """
-        test method for delete service health check objects
-        """
+        """test method for delete service health check objects"""
         new_health_check = self._create_service_health_check()
         with self.rbac_utils.override_role(self):
             self.service_client.delete_service_health_check(
                 new_health_check['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_service_instances")
-    @idempotent_id('1469c71e-f6f5-419f-9672-c3c67f879704')
+                                 rules=["create_service_instances"])
+    @decorators.idempotent_id('1469c71e-f6f5-419f-9672-c3c67f879704')
     def test_create_service_instances(self):
-        """
-        test method for create service client objects
-        """
+        """test method for create service client objects"""
         with self.rbac_utils.override_role(self):
             self._create_service_instance()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_service_instance")
-    @idempotent_id('ea5b716d-5de8-4c71-becd-f1501c22f0df')
+                                 rules=["show_service_instance"])
+    @decorators.idempotent_id('ea5b716d-5de8-4c71-becd-f1501c22f0df')
     def test_show_service_instance(self):
-        """
-        test method for show service client objects
-        """
+        """test method for show service client objects"""
         new_instance = self._create_service_instance()
         with self.rbac_utils.override_role(self):
             self.service_client.show_service_instance(
                 new_instance['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_service_instance")
-    @idempotent_id('74934833-29cd-416b-a5a6-273f733d058a')
+                                 rules=["delete_service_instance"])
+    @decorators.idempotent_id('74934833-29cd-416b-a5a6-273f733d058a')
     def test_delete_service_instance(self):
-        """
-        test method for delete service client objects
-        """
+        """test method for delete service client objects"""
         new_instance = self._create_service_instance()
         with self.rbac_utils.override_role(self):
             self.service_client.delete_service_instance(
                 new_instance['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_service_instances")
-    @idempotent_id('da6016a3-a2a8-42a8-b064-c124c22fef6f')
+                                 rules=["list_service_instances"])
+    @decorators.idempotent_id('da6016a3-a2a8-42a8-b064-c124c22fef6f')
     def test_list_service_instances(self):
-        """
-        test method for list service client objects
-        """
+        """test method for list service client objects"""
         with self.rbac_utils.override_role(self):
             self.service_client.list_service_instances()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_service_instance")
-    @idempotent_id('a6237b99-336b-42db-a8eb-9604a1b08fc6')
+                                 rules=["update_service_instance"])
+    @decorators.idempotent_id('a6237b99-336b-42db-a8eb-9604a1b08fc6')
     def test_update_service_instance(self):
-        """
-        test method for update service client objects
-        """
+        """test method for update service client objects"""
         new_instance = self._create_service_instance()
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_subnet.py b/tungsten_tempest_plugin/tests/api/contrail/test_subnet.py
index 233084e..3fa1304 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_subnet.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_subnet.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class SubnetContrailTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test subnet objects using RBAC roles
-    """
+    """Test class to test subnet objects using RBAC roles"""
 
     def _create_subnet(self):
         post_body = {
@@ -56,54 +51,44 @@
         self.subnet_client.update_subnet(subnet_uuid, **put_body)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_subnets")
-    @idempotent_id('ddd1d9ae-cf2f-4a74-98ba-b0f481f27977')
+                                 rules=["list_subnets"])
+    @decorators.idempotent_id('ddd1d9ae-cf2f-4a74-98ba-b0f481f27977')
     def test_list_subnets(self):
-        """
-        test method for list subnet objects
-        """
+        """test method for list subnet objects"""
         with self.rbac_utils.override_role(self):
             self.subnet_client.list_subnets()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_subnets")
-    @idempotent_id('ee0cb904-d162-44a4-b7b0-a7451f667ed5')
+                                 rules=["create_subnets"])
+    @decorators.idempotent_id('ee0cb904-d162-44a4-b7b0-a7451f667ed5')
     def test_create_subnets(self):
-        """
-        test method for create subnet objects
-        """
+        """test method for create subnet objects"""
         with self.rbac_utils.override_role(self):
             self._create_subnet()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_subnet")
-    @idempotent_id('994618f2-5b40-460c-a6a8-6479bc15bf80')
+                                 rules=["show_subnet"])
+    @decorators.idempotent_id('994618f2-5b40-460c-a6a8-6479bc15bf80')
     def test_show_subnet(self):
-        """
-        test method for show subnet objects
-        """
+        """test method for show subnet objects"""
         subnet_uuid = self._create_subnet()
         with self.rbac_utils.override_role(self):
             self.subnet_client.show_subnet(subnet_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_subnet")
-    @idempotent_id('565e44c9-eb9b-4ae6-9ebb-db422a9751ee')
+                                 rules=["update_subnet"])
+    @decorators.idempotent_id('565e44c9-eb9b-4ae6-9ebb-db422a9751ee')
     def test_update_subnet(self):
-        """
-        test method for update subnet objects
-        """
+        """test method for update subnet objects"""
         subnet_uuid = self._create_subnet()
         with self.rbac_utils.override_role(self):
             self._update_subnet(subnet_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_subnet")
-    @idempotent_id('a733b913-7a88-45d9-ac0a-d858fa3dc662')
+                                 rules=["delete_subnet"])
+    @decorators.idempotent_id('a733b913-7a88-45d9-ac0a-d858fa3dc662')
     def test_delete_subnet(self):
-        """
-        test method for delete subnet objects
-        """
+        """test method for delete subnet objects"""
         subnet_uuid = self._create_subnet()
         with self.rbac_utils.override_role(self):
             self.subnet_client.delete_subnet(subnet_uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_dns.py b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_dns.py
index 6e75327..9bfd3ad 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_dns.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_dns.py
@@ -18,14 +18,12 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
@@ -33,10 +31,7 @@
 
 # noinspection PyPep8Naming
 class VirtualDNSTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test virtual dns objects using RBAC roles
-    """
+    """Test class to test virtual dns objects using RBAC roles"""
 
     def _create_virtual_dns(self):
         parent_type = "domain"
@@ -77,56 +72,46 @@
         return dns_record
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_virtual_DNSs")
-    @idempotent_id('8401d690-afdf-4b6e-ad60-b9363a8cfb1d')
+                                 rules=["list_virtual_DNSs"])
+    @decorators.idempotent_id('8401d690-afdf-4b6e-ad60-b9363a8cfb1d')
     def test_list_virtual_dns(self):
-        """
-        test method for list virtual dns objects
-        """
+        """test method for list virtual dns objects"""
         with self.rbac_utils.override_role(self):
             self.virtual_dns_client.list_virtual_dns()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_virtual_DNSs")
-    @idempotent_id('a7dd2c9e-e1eb-4dc4-ac70-4d48a291a3bf')
+                                 rules=["create_virtual_DNSs"])
+    @decorators.idempotent_id('a7dd2c9e-e1eb-4dc4-ac70-4d48a291a3bf')
     def test_create_virtual_dns(self):
-        """
-        test method for create virtual dns objects
-        """
+        """test method for create virtual dns objects"""
         with self.rbac_utils.override_role(self):
             self._create_virtual_dns()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_virtual_DNS")
-    @idempotent_id('ffc0fc82-3bff-48ab-b65a-3d90b4a3154d')
+                                 rules=["show_virtual_DNS"])
+    @decorators.idempotent_id('ffc0fc82-3bff-48ab-b65a-3d90b4a3154d')
     def test_show_virtual_dns(self):
-        """
-        test method for show virtual dns objects
-        """
+        """test method for show virtual dns objects"""
         dns = self._create_virtual_dns()
         with self.rbac_utils.override_role(self):
             self.virtual_dns_client.show_virtual_dns(
                 dns['virtual-DNS']['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_virtual_DNS")
-    @idempotent_id('4793caa1-7707-4123-b1b4-c3feae91312f')
+                                 rules=["delete_virtual_DNS"])
+    @decorators.idempotent_id('4793caa1-7707-4123-b1b4-c3feae91312f')
     def test_delete_virtual_dns(self):
-        """
-        test method for delete virtual dns objects
-        """
+        """test method for delete virtual dns objects"""
         dns = self._create_virtual_dns()
         with self.rbac_utils.override_role(self):
             self.virtual_dns_client.delete_virtual_dns(
                 dns['virtual-DNS']['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_virtual_DNS")
-    @idempotent_id('2bc43935-57c1-4bf6-9868-78ccfce164bb')
+                                 rules=["update_virtual_DNS"])
+    @decorators.idempotent_id('2bc43935-57c1-4bf6-9868-78ccfce164bb')
     def test_update_virtual_dns(self):
-        """
-        test method for update virtual dns objects
-        """
+        """test method for update virtual dns objects"""
         dns = self._create_virtual_dns()
         virtual_dns_data = {"domain_name": "default-domain",
                             "default_ttl_seconds": 0,
@@ -139,34 +124,28 @@
                 display_name=display_name)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_virtual_DNS_records")
-    @idempotent_id('e9103999-2f02-4f04-a8a0-906ca4fb394d')
+                                 rules=["list_virtual_DNS_records"])
+    @decorators.idempotent_id('e9103999-2f02-4f04-a8a0-906ca4fb394d')
     def test_list_virtual_dns_records(self):
-        """
-        test method for list virtual dns record objects
-        """
+        """test method for list virtual dns record objects"""
         with self.rbac_utils.override_role(self):
             self.virtual_dns_client.list_virtual_dns_records()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_virtual_DNS_records")
-    @idempotent_id('bd9f3992-0ce4-4477-97a0-1271bc8ad9ef')
+                                 rules=["create_virtual_DNS_records"])
+    @decorators.idempotent_id('bd9f3992-0ce4-4477-97a0-1271bc8ad9ef')
     def test_create_virtual_dns_records(self):
-        """
-        test method for create virtual dns record objects
-        """
+        """test method for create virtual dns record objects"""
         # A virtual DNS is needed to create a record
         dns = self._create_virtual_dns()
         with self.rbac_utils.override_role(self):
             self._create_virtual_dns_record(dns)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_virtual_DNS_record")
-    @idempotent_id('fa3d1a2b-d788-4623-89a4-3a9ed1db7a7d')
+                                 rules=["show_virtual_DNS_record"])
+    @decorators.idempotent_id('fa3d1a2b-d788-4623-89a4-3a9ed1db7a7d')
     def test_show_virtual_dns_record(self):
-        """
-        test method for show virtual dns record objects
-        """
+        """test method for show virtual dns record objects"""
         # A virtual DNS is needed to create a record
         dns = self._create_virtual_dns()
         dns_record = self._create_virtual_dns_record(dns)
@@ -175,12 +154,10 @@
                 dns_record['virtual-DNS-record']['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_virtual_DNS_record")
-    @idempotent_id('de31e867-c997-4b4c-a095-43c647f5c192')
+                                 rules=["delete_virtual_DNS_record"])
+    @decorators.idempotent_id('de31e867-c997-4b4c-a095-43c647f5c192')
     def test_delete_virtual_dns_record(self):
-        """
-        test method for delete virtual dns record objects
-        """
+        """test method for delete virtual dns record objects"""
         # A virtual DNS is needed to create a record
         dns = self._create_virtual_dns()
         dns_record = self._create_virtual_dns_record(dns)
@@ -189,12 +166,10 @@
                 dns_record['virtual-DNS-record']['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_virtual_DNS_record")
-    @idempotent_id('65acef26-646f-4b36-923c-8a1d07e90c5c')
+                                 rules=["update_virtual_DNS_record"])
+    @decorators.idempotent_id('65acef26-646f-4b36-923c-8a1d07e90c5c')
     def test_update_virtual_dns_record(self):
-        """
-        test method for update virtual dns record objects
-        """
+        """test method for update virtual dns record objects"""
         # A virtual DNS is needed to create a record
         dns = self._create_virtual_dns()
         dns_record = self._create_virtual_dns_record(dns)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_ip.py b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_ip.py
index d8268f8..27f6775 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_ip.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_ip.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class VirtualIPTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test virtual ip objects using RBAC roles
-    """
+    """Test class to test virtual ip objects using RBAC roles"""
 
     def _create_virtual_ip(self):
         fq_name = data_utils.rand_name('virtual_ip')
@@ -57,54 +52,44 @@
         self.virtual_ip_client.update_virtual_ip(virtual_ip_uuid, **put_body)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_virtual_ips")
-    @idempotent_id('92303eee-bd96-48bc-a02c-39950bd19a21')
+                                 rules=["list_virtual_ips"])
+    @decorators.idempotent_id('92303eee-bd96-48bc-a02c-39950bd19a21')
     def test_list_virtual_ips(self):
-        """
-        test method for list virtual ip objects
-        """
+        """test method for list virtual ip objects"""
         with self.rbac_utils.override_role(self):
             self.virtual_ip_client.list_virtual_ips()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_virtual_ips")
-    @idempotent_id('e0070888-995d-46ab-91fc-db1412eba2f7')
+                                 rules=["create_virtual_ips"])
+    @decorators.idempotent_id('e0070888-995d-46ab-91fc-db1412eba2f7')
     def test_create_virtual_ips(self):
-        """
-        test method for create virtual ip objects
-        """
+        """test method for create virtual ip objects"""
         with self.rbac_utils.override_role(self):
             self._create_virtual_ip()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_virtual_ip")
-    @idempotent_id('2a4b3abd-c6f7-4d82-aa31-02e53d2a8fb9')
+                                 rules=["show_virtual_ip"])
+    @decorators.idempotent_id('2a4b3abd-c6f7-4d82-aa31-02e53d2a8fb9')
     def test_show_virtual_ip(self):
-        """
-        test method for show virtual ip objects
-        """
+        """test method for show virtual ip objects"""
         virtual_ip_uuid = self._create_virtual_ip()
         with self.rbac_utils.override_role(self):
             self.virtual_ip_client.show_virtual_ip(virtual_ip_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_virtual_ip")
-    @idempotent_id('0e975c92-62dc-4e6e-82cc-8cf37da3c5b2')
+                                 rules=["update_virtual_ip"])
+    @decorators.idempotent_id('0e975c92-62dc-4e6e-82cc-8cf37da3c5b2')
     def test_update_virtual_ip(self):
-        """
-        test method for update virtual ip objects
-        """
+        """test method for update virtual ip objects"""
         virtual_ip_uuid = self._create_virtual_ip()
         with self.rbac_utils.override_role(self):
             self._update_virtual_ip(virtual_ip_uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_virtual_ip")
-    @idempotent_id('fd0b2635-36bd-4345-97b7-9c0a57372eba')
+                                 rules=["delete_virtual_ip"])
+    @decorators.idempotent_id('fd0b2635-36bd-4345-97b7-9c0a57372eba')
     def test_delete_virtual_ip(self):
-        """
-        test method for delete virtual ip objects
-        """
+        """test method for delete virtual ip objects"""
         virtual_ip_uuid = self._create_virtual_ip()
         with self.rbac_utils.override_role(self):
             self.virtual_ip_client.delete_virtual_ip(virtual_ip_uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_machines.py b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_machines.py
index d69a32e..94abb45 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_machines.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_machines.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 LOG = logging.getLogger(__name__)
 CONF = config.CONF
 
 
 class VMContrailTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test vm objects using RBAC roles
-    """
+    """Test class to test vm objects using RBAC roles"""
 
     @classmethod
     def resource_setup(cls):
@@ -65,10 +60,10 @@
                              'uuid': cls.ipam['uuid'],
                              'attr': {
                                  'ipam_subnets': [{'subnet': subnet_ip_prefix}]
-                                 }
                              }
-                         ]
-                    }
+                         }
+                     ]
+                     }
         body = cls.vn_client.create_virtual_networks(**post_body)
         cls.network = body['virtual-network']
 
@@ -104,55 +99,45 @@
         super(VMContrailTest, cls).resource_cleanup()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_virtual_machine_interfaces")
-    @idempotent_id('e27d1fae-7324-4ef3-87b1-e7f519b1e2a7')
+                                 rules=["list_virtual_machine_interfaces"])
+    @decorators.idempotent_id('e27d1fae-7324-4ef3-87b1-e7f519b1e2a7')
     def test_list_vm_interfaces(self):
-        """
-        test method for list vm interfaces objects
-        """
+        """test method for list vm interfaces objects"""
         self._create_virual_machine_interface()
         with self.rbac_utils.override_role(self):
             self.vm_client.list_virtual_machine_interfaces()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_virtual_machine_interfaces")
-    @idempotent_id('d8a3a524-d61b-4bcb-8146-c5d4f308df8e')
+                                 rules=["create_virtual_machine_interfaces"])
+    @decorators.idempotent_id('d8a3a524-d61b-4bcb-8146-c5d4f308df8e')
     def test_add_vm_interfaces(self):
-        """
-        test method for add vm interfaces objects
-        """
+        """test method for add vm interfaces objects"""
         with self.rbac_utils.override_role(self):
             self._create_virual_machine_interface()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_virtual_machine_interface")
-    @idempotent_id('3f17125a-9060-4c4a-a23f-0fe2aba2ccef')
+                                 rules=["show_virtual_machine_interface"])
+    @decorators.idempotent_id('3f17125a-9060-4c4a-a23f-0fe2aba2ccef')
     def test_show_vm_interface(self):
-        """
-        test method for show vm interfaces objects
-        """
+        """test method for show vm interfaces objects"""
         test = self._create_virual_machine_interface()
         with self.rbac_utils.override_role(self):
             self.vm_client.show_virtual_machine_interface(test['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_virtual_machine_interface")
-    @idempotent_id('ce7f9471-ba1b-40d2-94f1-bdd0c610e22f')
+                                 rules=["delete_virtual_machine_interface"])
+    @decorators.idempotent_id('ce7f9471-ba1b-40d2-94f1-bdd0c610e22f')
     def test_delete_vm_interface(self):
-        """
-        test method for delete vm interfaces objects
-        """
+        """test method for delete vm interfaces objects"""
         body = self._create_virual_machine_interface()
         with self.rbac_utils.override_role(self):
             self.vm_client.delete_vm_interface(body['uuid'])
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_virtual_machine_interface")
-    @idempotent_id('7ca3046a-6245-4c15-914b-5a8ecdbeee11')
+                                 rules=["update_virtual_machine_interface"])
+    @decorators.idempotent_id('7ca3046a-6245-4c15-914b-5a8ecdbeee11')
     def test_update_vm_interface(self):
-        """
-        test method for update vm interfaces objects
-        """
+        """test method for update vm interfaces objects"""
         virtual_machine = self._create_virual_machine_interface()
         display_name = data_utils.rand_name('new-vitual-machine-inf-name')
         with self.rbac_utils.override_role(self):
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_networks.py b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_networks.py
index 4475e7b..64130dc 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_networks.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_networks.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
-
 from patrole_tempest_plugin import rbac_rule_validation
-
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class NetworksTest(rbac_base.BaseContrailTest):
-
-    """
-    Test class to test vm network using RBAC roles
-    """
+    """Test class to test vm network using RBAC roles"""
 
     @classmethod
     def resource_setup(cls):
@@ -71,32 +66,26 @@
         return network
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_virtual_networks")
-    @idempotent_id('375ebc8d-dc52-4d9c-877b-85aba35b1539')
+                                 rules=["list_virtual_networks"])
+    @decorators.idempotent_id('375ebc8d-dc52-4d9c-877b-85aba35b1539')
     def test_list_virtual_networks(self):
-        """
-        test method for list vm network objects
-        """
+        """test method for list vm network objects"""
         with self.rbac_utils.override_role(self):
             self.vn_client.list_virtual_networks()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_virtual_networks")
-    @idempotent_id('375ebc8d-dc52-4d9c-877b-96aba35b2530')
+                                 rules=["create_virtual_networks"])
+    @decorators.idempotent_id('375ebc8d-dc52-4d9c-877b-96aba35b2530')
     def test_create_virtual_networks(self):
-        """
-        test method for create vm network objects
-        """
+        """test method for create vm network objects"""
         with self.rbac_utils.override_role(self):
             self._create_virtual_network()
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_virtual_network")
-    @idempotent_id('375ebc8d-dc52-4d9c-566b-150a025c1237')
+                                 rules=["update_virtual_network"])
+    @decorators.idempotent_id('375ebc8d-dc52-4d9c-566b-150a025c1237')
     def test_update_virtual_network(self):
-        """
-        test method for update vm network objects
-        """
+        """test method for update vm network objects"""
         # Create virtual network
         uuid = self._create_virtual_network()['uuid']
         with self.rbac_utils.override_role(self):
@@ -104,23 +93,19 @@
                 uuid, router_external=False)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_virtual_network")
-    @idempotent_id('375ebc8d-dc52-4d9c-877b-17bcb53c3641')
+                                 rules=["delete_virtual_network"])
+    @decorators.idempotent_id('375ebc8d-dc52-4d9c-877b-17bcb53c3641')
     def test_delete_virtual_network(self):
-        """
-        test method for delete vm network objects
-        """
+        """test method for delete vm network objects"""
         uuid = self._create_virtual_network()['uuid']
         with self.rbac_utils.override_role(self):
             self.vn_client.delete_virtual_network(uuid)
 
     @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_virtual_network")
-    @idempotent_id('375ebc8d-dc52-4d9c-877b-27c1a1242a81')
+                                 rules=["show_virtual_network"])
+    @decorators.idempotent_id('375ebc8d-dc52-4d9c-877b-27c1a1242a81')
     def test_show_virtual_network(self):
-        """
-        test method for show vm network objects
-        """
+        """test method for show vm network objects"""
         uuid = self._create_virtual_network()['uuid']
         with self.rbac_utils.override_role(self):
             self.vn_client.show_virtual_network(uuid)
