Merge "New API call to get details of supported QoS rule type"
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 7a05da1..39f2c38 100644
--- a/neutron/tests/tempest/services/network/json/network_client.py
+++ b/neutron/tests/tempest/services/network/json/network_client.py
@@ -728,6 +728,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):