Tempest tests uses only supported QoS rule types
If rule type required for QoS tempest test is not supported by current
configuration of Neutron then such test will be skipped.
For example if neutron-server is running with ML2 plugin only with openvswitch
mechanism driver loaded then tests related to MINIMUM_BANDWIDTH rule type will
be skipped because openvswitch mechanism driver don't support this kind of rule.
Change-Id: I88e59cdbd79afb5337052ba3e5aecb96c7c8ea1c
Closes-Bug: 1644097
diff --git a/neutron/tests/tempest/api/base.py b/neutron/tests/tempest/api/base.py
index 3321ad4..0d77064 100644
--- a/neutron/tests/tempest/api/base.py
+++ b/neutron/tests/tempest/api/base.py
@@ -349,6 +349,11 @@
return interface
@classmethod
+ def get_supported_qos_rule_types(cls):
+ body = cls.client.list_qos_rule_types()
+ return [rule_type['type'] for rule_type in body['rule_types']]
+
+ @classmethod
def create_qos_policy(cls, name, description=None, shared=False,
tenant_id=None):
"""Wrapper utility that returns a test QoS policy."""
@@ -492,6 +497,18 @@
raise exceptions.InvalidConfiguration(message)
+def require_qos_rule_type(rule_type):
+ def decorator(f):
+ @functools.wraps(f)
+ def wrapper(self, *func_args, **func_kwargs):
+ if rule_type not in self.get_supported_qos_rule_types():
+ raise self.skipException(
+ "%s rule type is required." % rule_type)
+ return f(self, *func_args, **func_kwargs)
+ return wrapper
+ return decorator
+
+
def _require_sorting(f):
@functools.wraps(f)
def inner(self, *args, **kwargs):
diff --git a/neutron/tests/tempest/api/test_qos.py b/neutron/tests/tempest/api/test_qos.py
index 2f1c75a..7752f94 100644
--- a/neutron/tests/tempest/api/test_qos.py
+++ b/neutron/tests/tempest/api/test_qos.py
@@ -360,6 +360,7 @@
class QosBandwidthLimitRuleTestJSON(base.BaseAdminNetworkTest):
@classmethod
+ @base.require_qos_rule_type(qos_consts.RULE_TYPE_BANDWIDTH_LIMIT)
@test.requires_ext(extension="qos", service="network")
def resource_setup(cls):
super(QosBandwidthLimitRuleTestJSON, cls).resource_setup()
@@ -771,6 +772,7 @@
VALID_DSCP_MARK2 = 48
@classmethod
+ @base.require_qos_rule_type(qos_consts.RULE_TYPE_DSCP_MARKING)
@test.requires_ext(extension="qos", service="network")
def resource_setup(cls):
super(QosDscpMarkingRuleTestJSON, cls).resource_setup()
@@ -904,6 +906,7 @@
RULES_NAME = RULE_NAME + "s"
@classmethod
+ @base.require_qos_rule_type(qos_consts.RULE_TYPE_MINIMUM_BANDWIDTH)
@test.requires_ext(extension="qos", service="network")
def resource_setup(cls):
super(QosMinimumBandwidthRuleTestJSON, cls).resource_setup()
diff --git a/neutron/tests/tempest/scenario/test_qos.py b/neutron/tests/tempest/scenario/test_qos.py
index a58b6e4..f44e631 100644
--- a/neutron/tests/tempest/scenario/test_qos.py
+++ b/neutron/tests/tempest/scenario/test_qos.py
@@ -22,6 +22,8 @@
from tempest import test
from neutron.common import utils
+from neutron.services.qos import qos_consts
+from neutron.tests.tempest.api import base as base_api
from neutron.tests.tempest import config
from neutron.tests.tempest.scenario import base
from neutron.tests.tempest.scenario import constants
@@ -78,6 +80,7 @@
FILE_PATH = "/tmp/img"
@classmethod
+ @base_api.require_qos_rule_type(qos_consts.RULE_TYPE_BANDWIDTH_LIMIT)
@test.requires_ext(extension="qos", service="network")
def resource_setup(cls):
super(QoSTest, cls).resource_setup()