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
This commit is contained in:
Sławek Kapłoński 2016-12-04 15:00:54 +00:00
parent aa7d30f797
commit 9f19b3e7e1
3 changed files with 23 additions and 0 deletions

View File

@ -348,6 +348,11 @@ class BaseNetworkTest(test.BaseTestCase):
router_id, subnet_id)
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):
@ -492,6 +497,18 @@ class BaseAdminNetworkTest(BaseNetworkTest):
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):

View File

@ -360,6 +360,7 @@ class QosTestJSON(base.BaseAdminNetworkTest):
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 @@ class QosDscpMarkingRuleTestJSON(base.BaseAdminNetworkTest):
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 @@ class QosMinimumBandwidthRuleTestJSON(base.BaseAdminNetworkTest):
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()

View File

@ -22,6 +22,8 @@ from tempest.lib import exceptions
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 @@ class QoSTest(base.BaseTempestTestCase):
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()