From 9f19b3e7e16d946b0770710a428606462cf217f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C5=82awek=20Kap=C5=82o=C5=84ski?= Date: Sun, 4 Dec 2016 15:00:54 +0000 Subject: [PATCH] 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 --- neutron/tests/tempest/api/base.py | 17 +++++++++++++++++ neutron/tests/tempest/api/test_qos.py | 3 +++ neutron/tests/tempest/scenario/test_qos.py | 3 +++ 3 files changed, 23 insertions(+) diff --git a/neutron/tests/tempest/api/base.py b/neutron/tests/tempest/api/base.py index 3321ad43c2c..0d77064e5b7 100644 --- a/neutron/tests/tempest/api/base.py +++ b/neutron/tests/tempest/api/base.py @@ -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): diff --git a/neutron/tests/tempest/api/test_qos.py b/neutron/tests/tempest/api/test_qos.py index 2f1c75a648d..7752f945b6b 100644 --- a/neutron/tests/tempest/api/test_qos.py +++ b/neutron/tests/tempest/api/test_qos.py @@ -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() diff --git a/neutron/tests/tempest/scenario/test_qos.py b/neutron/tests/tempest/scenario/test_qos.py index a58b6e470a4..f44e6310021 100644 --- a/neutron/tests/tempest/scenario/test_qos.py +++ b/neutron/tests/tempest/scenario/test_qos.py @@ -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()