Merge pull request #14 from Goutham-Pratapa/master

Add tests for Policy-Management and BGPVPN.
diff --git a/README.md b/README.md
index c3775b1..4bae9e6 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,8 @@
 [![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)
-=================================================
+# Tempest Integration of Tungsten Fabric (Contrail)
 
-This directory contains Tempest tests to cover the contrail project, as well
-as a plugin to automatically load these tests into tempest. This is a set of
-integration tests to be run against a live open-contrail cluster. Tempest has
-test-cases for Contrail API validation, scenarios, and other specific tests
-useful in validating an open-contrail deployment.
+This directory contains Tempest tests to cover the contrail project, as well as a plugin to automatically load these tests into tempest. This is a set of integration tests to be run against a live open-contrail cluster. Tempest has test-cases for Contrail API validation, scenarios, and other specific tests useful in validating an open-contrail deployment.
 
 See the tempest plugin docs for information on using it:
 
@@ -18,14 +13,11 @@
 [http://docs.openstack.org/developer/tempest/](http://docs.openstack.org/developer/tempest/)
 
 
-Quickstart
-----------
+## Quickstart
 
-#Tempest Installation
+### Tempest Installation
 
-To run *tungsten-tempest*, you must first have `Tempest`_ installed and configured 
-properly. Please reference Tempest's `Quickstart`_ guide to do so and for all
-exact details. Follow all the steps outlined therein.
+To run *tungsten-tempest*, you must first have [Tempest](https://docs.openstack.org/tempest) installed and configured properly. Please reference Tempest's [Quickstart](https://docs.openstack.org/tempest/latest/overview.html#quickstart) guide to do so and for all exact details. Follow all the steps outlined therein.
 
 	Here are some sample steps:
 
@@ -40,13 +32,11 @@
 
 	$ ostestr -l
 
-You can install all these including tempest in a virtual
-environment. If virtual environment is not installed, then install it using
-"`sudo apt-get install python-virtualenv`". Afterward, proceed with the steps below.
+You can install all these including tempest in a virtual environment. If virtual environment is not installed, then install it using "`sudo apt-get install python-virtualenv`". Afterward, proceed with the steps below.
 
-#Patrole Installation
+### Patrole Installation
 
-This is done with pip after you check out the [Patrole repo](https://github.com/openstack/patrole "Patrole repo"). Please reference `Patrole` [Quickstart](https://github.com/openstack/patrole/blob/master/README.rst "Quickstart") guide for further details.
+This is done with pip after you check out the [Patrole repo](https://github.com/openstack/patrole "Patrole repo"). Please reference `Patrole` [Quickstart](https://docs.openstack.org/patrole/latest/overview.html?highlight=quickstart#quickstart) guide for further details.
 
     Here are some sample steps:
 
@@ -59,11 +49,11 @@
 	
 	$ ostestr -l | grep patrole
 
-#Tungsten-tempest Installation
+### Tungsten-tempest Installation
 
-This is done with pip after you check out the tungsten-tempest repo::
+This is done with pip after you check out the tungsten-tempest repo:
 
-	$ git clone https://git.openstack.org/tungsten/tungsten-tempest
+	$ git clone https://github.com/tungstenfabric/tungsten-tempest
 	$ pip install -e tungsten_tempest/
 
 NOTE: This can be done within a venv.
@@ -71,13 +61,13 @@
 
 	$ ostestr -l | grep tungsten
 
-#Configuration
+### Configuration
 
-You must properly configure tempest, which is relatively straightforward. For details on configuring tempest refer to the [tempest-configuration](https://github.com/openstack/tempest/blob/master/doc/source/configuration.rst "tempest-configuration").
+You must properly configure tempest, which is relatively straightforward. For details on configuring tempest refer to the [tempest-configuration](https://docs.openstack.org/tempest/latest/configuration.html).
 
-Next you must properly configure Patrole, which is relatively straightforward. For details on configuring Patrole refer to the [patrole-configuration](https://github.com/openstack/patrole/blob/master/doc/source/configuration.rst "patrole-configuration")
+Next you must properly configure Patrole, which is relatively straightforward. For details on configuring Patrole refer to the [patrole-configuration](https://docs.openstack.org/patrole/latest/configuration.html)
 
-Next you must properly configure tungsten-fabric, which is relatively straightforward too. For details on configuring tungsten-fabric refer to the :ref:`tungsten-configuration`.
+Next you must properly configure tungsten-fabric, which is relatively straightforward too. For details on configuring tungsten-fabric refer to the [tungsten-configuration](https://github.com/tungstenfabric/tungsten-tempest/blob/master/doc/source/configuration.rst).
 
 After comfiguring tempmest.conf as per tempest and Patrole requirements, please make below changes too in the patrole section of tempest.conf:
 
@@ -87,7 +77,7 @@
 
     custom_requirements_file must be absolute path of file path of the YAML file that defines your RBAC requirements.
 
-For the details about these flags please refer [patrole.conf.sample](https://github.com/openstack/patrole/blob/master/etc/patrole.conf.sample "patrole.conf.sample") file.
+For the details about these flags please refer [patrole.conf.sample](https://docs.openstack.org/patrole/latest/configuration.html#sample-configuration-file) file.
 
 
 **NOTE:** Make sure you have contrail endpoints in keystone catalog-list already like sdn-l-config-*. Otherwise configure below two keys under [sdn] section of tempest.conf.
@@ -96,7 +86,7 @@
      endpoint_type = <public|admin|internal|publicURL|adminURL|internalURL>
      catalog_type = <Catalog type of the SDN service, default sdn-l-config>
 
-#Running tungsten-tempest 
+### Running tungsten-tempest 
 
 Once the configuration is done you're now ready to run tungsten-fabric.
 
@@ -104,58 +94,42 @@
 
 	$ ostestr run --regex tungsten_tempest_plugin.tests.api
 
-This can also be done using the `tempest_run`_ command. This can be done by running::
+This can also be done using the [tempest_run](https://docs.openstack.org/tempest/latest/run.html) command. This can be done by running:
 
 	$ tempest run --regex '^tungsten_tempest_plugin\.tests\.api'
 
-There is also the option to use testr directly, or any `testr`_ based test runner, like `ostestr`_. For example, from the work-space dir run::
+There is also the option to use testr directly, or any [testr](https://testrepository.readthedocs.org/en/latest/MANUAL.html) based test runner, like [ostestr](https://docs.openstack.org/os-testr/latest/). For example, from the work-space dir run:
 
 	$ stestr --regex '(?!.*\[.*\bslow\b.*\])(^tungsten_tempest_plugin\.tests\.api))'
 
 will run the same set of tests as the default gate jobs.
 
-You can also run tungsten_tempest tests using `tox`_. To do so, ``cd`` into the **Tempest** directory and run::
+You can also run tungsten_tempest tests using [tox](https://tox.readthedocs.io/en/latest/). To do so, ``cd`` into the **Tempest** directory and run:
 
 	$ tox -eall-plugin -- tungstent_tempest_plugin.tests.api
 
-#Log Information
+### Log Information
 
-Log information from tests is captured in ``tempest.log`` under the Tempest repository. Some Patrole debugging information is captured in that log related to expected test results and :ref:`role-overriding`.
+Log information from tests is captured in ``tempest.log`` under the Tempest repository. Some Patrole debugging information is captured in that log related to expected test results and [role-overriding](https://docs.openstack.org/patrole/latest/test_writing_guide.html?highlight=role%20overriding#role-overriding).
 
 More detailed RBAC testing log output is emitted to ``tungsten_log``.
 
-To configure tungsten-tempest's logging, see the :ref:`tungsten-tempest-configuration` guide.
+To configure tungsten-tempest's logging, see the [tungsten-tempest-configuration](https://github.com/tungstenfabric/tungsten-tempest/blob/master/doc/source/configuration.rst) guide.
 
 
-Tempest: [https://github.com/openstack/tempest](https://github.com/openstack/tempest)
+## RBAC Tests
 
-Tempest Quickstart: [https://docs.openstack.org/tempest/latest/overview.html#quickstart](https://docs.openstack.org/tempest/latest/overview.html#quickstart)
-
-tempest_run: [https://docs.openstack.org/tempest/latest/run.html](https://docs.openstack.org/tempest/latest/run.html)
-
-testr: [https://testrepository.readthedocs.org/en/latest/MANUAL.html
-](https://testrepository.readthedocs.org/en/latest/MANUAL.html)
-
-ostestr: [https://docs.openstack.org/os-testr/latest/](https://docs.openstack.org/os-testr/latest/)
-
-tox: [https://tox.readthedocs.io/en/latest/](https://tox.readthedocs.io/en/latest/)
-
-
-
-#RBAC Tests
-----------
-
-To change the role that the tungsten_tempest tests are being run as, edit ``rbac_test_role`` in the ``patrole`` section of tempest.conf: ::
+To change the role that the tungsten_tempest tests are being run as, edit ``rbac_test_role`` in the ``patrole`` section of tempest.conf:
 
     [patrole]
     rbac_test_role = member
     ...
 
-**NOTE**::
+**NOTE**:
 
 The ``rbac_test_role`` is service-specific. member, for example, is an arbitrary role, but by convention is used to designate the default non-admin role in the system. Most tunsgtent_tempest tests should be run with **admin** and **member** roles. However, other services may use entirely different roles.
 
 For more information about the member role and its nomenclature,
 
-please see: `<https://ask.openstack.org/en/question/4759/member-vs-_member_/>`__.
+please see: [https://ask.openstack.org/en/question/4759/member-vs-_member_/](https://ask.openstack.org/en/question/4759/member-vs-_member_/).
 
diff --git a/tungsten_tempest_plugin/tests/api/contrail/rbac_base.py b/tungsten_tempest_plugin/tests/api/contrail/rbac_base.py
index 7da4633..527eb97 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/rbac_base.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/rbac_base.py
@@ -100,10 +100,22 @@
 LOG = logging.getLogger(__name__)
 
 
+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()
@@ -115,6 +127,8 @@
         if CONF.auth.tempest_roles != ['admin']:
             raise cls.skipException(
                 "%s skipped because tempest roles is not admin" % cls.__name__)
+        if cls.required_contrail_version:
+            cls.skip_if_contrail_version_less(cls.required_contrail_version)
 
     @classmethod
     def setup_clients(cls):
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 213bd47..3469064 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_config_client.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_config_client.py
@@ -45,7 +45,7 @@
     def _create_config_node(self):
         config_node_ip_address = self._random_ip_generator()
         display_name = data_utils.rand_name('config_node')
-        if float(CONF.sdn.contrail_version) < 5:
+        if rbac_base.get_contail_version() < 5:
             fq_name = [display_name]
         else:
             fq_name = ['default-global-system-config', display_name]
@@ -200,7 +200,7 @@
         with self.rbac_utils.override_role(self):
             self.config_client.list_global_system_configs()
 
-    @testtools.skipUnless(float(CONF.sdn.contrail_version) < 5,
+    @testtools.skipUnless(rbac_base.get_contail_version() < 5,
                           'Not supported in OpenContrail versions >= 5')
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["create_global_system_configs"])
@@ -214,7 +214,7 @@
                                  rules=["show_global_system_config"])
     @decorators.idempotent_id('4b9f9131-cb34-4b7d-9d06-c6aca85cce3a')
     def test_show_global_system_config(self):
-        if float(CONF.sdn.contrail_version) < 5:
+        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(
@@ -236,7 +236,7 @@
                         self.config_client.show_global_system_config(
                             gsc['uuid'])
 
-    @testtools.skipUnless(float(CONF.sdn.contrail_version) < 5,
+    @testtools.skipUnless(rbac_base.get_contail_version() < 5,
                           'Not supported in OpenContrail versions >= 5')
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["update_global_system_config"])
@@ -250,7 +250,7 @@
                 new_config['uuid'],
                 display_name=update_name)
 
-    @testtools.skipUnless(float(CONF.sdn.contrail_version) < 5,
+    @testtools.skipUnless(rbac_base.get_contail_version() < 5,
                           'Not supported in OpenContrail versions >= 5')
     @rbac_rule_validation.action(service="Contrail",
                                  rules=["delete_global_system_config"])
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_fabric.py b/tungsten_tempest_plugin/tests/api/contrail/test_fabric.py
index e100d59..74f22d8 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_fabric.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_fabric.py
@@ -25,11 +25,7 @@
 
 class FabricContrailTest(rbac_base.BaseContrailTest):
 
-    @classmethod
-    def skip_checks(cls):
-        super(FabricContrailTest, cls).skip_checks()
-        if float(CONF.sdn.contrail_version) < 5:
-            raise cls.skipException("fabric requires Contrail >= 5")
+    required_contrail_version = 5
 
     @classmethod
     def resource_setup(cls):
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_fabric_namespaces.py b/tungsten_tempest_plugin/tests/api/contrail/test_fabric_namespaces.py
index 21f8316..7b173c8 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_fabric_namespaces.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_fabric_namespaces.py
@@ -25,11 +25,7 @@
 
 class FabricNamespacesContrailTest(rbac_base.BaseContrailTest):
 
-    @classmethod
-    def skip_checks(cls):
-        super(FabricNamespacesContrailTest, cls).skip_checks()
-        if float(CONF.sdn.contrail_version) < 5:
-            raise cls.skipException("fabric-namespace requires Contrail >= 5")
+    required_contrail_version = 5
 
     @classmethod
     def resource_setup(cls):
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 8d6f77c..3224208 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_qos_queue.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_qos_queue.py
@@ -37,7 +37,7 @@
 
     def _create_qos_queues(self):
         name = data_utils.rand_name('test-rbac-qos-queue')
-        if float(CONF.sdn.contrail_version) < 5:
+        if rbac_base.get_contail_version() < 5:
             fq_name = [name]
         else:
             fq_name = ['default-global-system-config',