New API call to get details of supported QoS rule type
This commit adds new API call that allows to discover
details about supported QoS rule type and its parameters
by each of loaded backend drivers.
DocImpact: New call to get details about supported
rule_type for each loaded backend driver
ApiImpact
Change-Id: I2008e9d3e400dd717434fbdd2e693c9c5e34c3a4
Closes-Bug: #1686035
diff --git a/neutron/tests/tempest/api/test_qos.py b/neutron/tests/tempest/api/test_qos.py
index f35abd8..7735710 100644
--- a/neutron/tests/tempest/api/test_qos.py
+++ b/neutron/tests/tempest/api/test_qos.py
@@ -31,6 +31,12 @@
required_extensions = ['qos']
+ @staticmethod
+ def _get_driver_details(rule_type_details, driver_name):
+ for driver in rule_type_details['drivers']:
+ if driver['name'] == driver_name:
+ return driver
+
@decorators.idempotent_id('108fbdf7-3463-4e47-9871-d07f3dcf5bbb')
def test_create_policy(self):
policy = self.create_qos_policy(name='test-policy',
@@ -172,6 +178,31 @@
for rule in actual_list_rule_types:
self.assertEqual(tuple(expected_rule_keys), tuple(rule.keys()))
+ @decorators.idempotent_id('8ececa21-ef97-4904-a152-9f04c90f484d')
+ def test_show_rule_type_details_as_user(self):
+ self.assertRaises(
+ exceptions.Forbidden,
+ self.client.show_qos_rule_type,
+ qos_consts.RULE_TYPE_BANDWIDTH_LIMIT)
+
+ @decorators.idempotent_id('d0a2460b-7325-481f-a531-050bd96ab25e')
+ def test_show_rule_type_details_as_admin(self):
+ # Since returned rule types depend on loaded backend drivers this test
+ # is checking only if returned keys are same as expected keys
+
+ # In theory, we could make the test conditional on which ml2 drivers
+ # are enabled in gate, but that option doesn't seem to be
+ # available through tempest.lib framework
+ expected_rule_type_details_keys = ['type', 'drivers']
+
+ rule_type_details = self.admin_client.show_qos_rule_type(
+ qos_consts.RULE_TYPE_BANDWIDTH_LIMIT).get("rule_type")
+
+ # Verify that only required fields present in rule details
+ self.assertEqual(
+ sorted(tuple(expected_rule_type_details_keys)),
+ sorted(tuple(rule_type_details.keys())))
+
def _disassociate_network(self, client, network_id):
updated_network = client.update_network(network_id,
qos_policy_id=None)
diff --git a/neutron/tests/tempest/services/network/json/network_client.py b/neutron/tests/tempest/services/network/json/network_client.py
index f5621ea..7c311f4 100644
--- a/neutron/tests/tempest/services/network/json/network_client.py
+++ b/neutron/tests/tempest/services/network/json/network_client.py
@@ -727,6 +727,14 @@
body = jsonutils.loads(body)
return service_client.ResponseBody(resp, body)
+ def show_qos_rule_type(self, rule_type_name):
+ uri = '%s/qos/rule-types/%s' % (
+ self.uri_prefix, rule_type_name)
+ resp, body = self.get(uri)
+ self.expected_success(200, resp.status)
+ body = jsonutils.loads(body)
+ return service_client.ResponseBody(resp, body)
+
def create_trunk(self, parent_port_id, subports,
tenant_id=None, name=None, admin_state_up=None,
description=None):