sa.Column('id', sa.String(length=36), primary_key=True),
sa.Column('qos_policy_id', sa.String(length=36),
sa.ForeignKey('qos_policies.id', ondelete='CASCADE'),
- nullable=False),
+ nullable=False, unique=True),
sa.Column('max_kbps', sa.Integer()),
sa.Column('max_burst_kbps', sa.Integer()))
class QosRuleColumns(models_v2.HasId):
- qos_policy_id = sa.Column(sa.String(36), nullable=False)
+ # NOTE(ihrachyshka): we may need to rework it later when we introduce types
+ # that should not enforce uniqueness
+ qos_policy_id = sa.Column(sa.String(36), nullable=False, unique=True)
__table_args__ = (
sa.ForeignKeyConstraint(['qos_policy_id'], ['qos_policies.id']),
# future code duplication when we have more rules.
def create_policy_bandwidth_limit_rule(self, context, policy_id,
bandwidth_limit_rule):
- #TODO(QoS): avoid creation of severan bandwidth limit rules
- # in the future we need an inter-rule validation
- # mechanism to verify all created rules will
- # play well together.
# validate that we have access to the policy
policy = self._get_policy_obj(context, policy_id)
rule = rule_object.QosBandwidthLimitRule(
self.assertEqual(1, len(policy_rules))
self.assertEqual(rule['id'], policy_rules[0]['id'])
+ @test.attr(type='smoke')
+ @test.idempotent_id('8a59b00b-ab01-4787-92f8-93a5cdf5e378')
+ def test_rule_create_fail_for_the_same_type(self):
+ policy = self.create_qos_policy(name='test-policy',
+ description='test policy',
+ shared=False)
+ self.create_qos_bandwidth_limit_rule(policy_id=policy['id'],
+ max_kbps=200,
+ max_burst_kbps=1337)
+
+ self.assertRaises(exceptions.ServerFault,
+ self.create_qos_bandwidth_limit_rule,
+ policy_id=policy['id'],
+ max_kbps=201, max_burst_kbps=1338)
+
@test.attr(type='smoke')
@test.idempotent_id('149a6988-2568-47d2-931e-2dbc858943b3')
def test_rule_update(self):
self.assertRaises(exceptions.ServerFault,
self.admin_client.show_bandwidth_limit_rule,
policy['id'], rule['id'])
-
- #TODO(QoS): create several bandwidth-limit rules (not sure it makes sense,
- # but to test more than one rule)