from sqlalchemy import exc as sa_exc
from sqlalchemy import orm
from sqlalchemy.orm import exc
+from sqlalchemy.orm import validates
from quantum.api.v2 import attributes
from quantum.common import exceptions as q_exc
active_connections = sa.Column(sa.Integer, nullable=False)
total_connections = sa.Column(sa.Integer, nullable=False)
+ @validates('bytes_in', 'bytes_out',
+ 'active_connections', 'total_connections')
+ def validate_non_negative_int(self, key, value):
+ if value < 0:
+ data = {'key': key, 'value': value}
+ raise ValueError(_('The %(key)s field can not have '
+ 'negative value. '
+ 'Current value is %(value)d.') % data)
+ return value
+
class Vip(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):
"""Represents a v2 quantum loadbalancer vip."""
for key in keys:
self.assertEqual(pool_obj.stats.__dict__[key], 0)
+ def test_update_pool_stats_with_negative_values(self):
+ stats_data = {"bytes_in": -1,
+ "bytes_out": -2,
+ "active_connections": -3,
+ "total_connections": -4}
+ for k, v in stats_data.items():
+ self._test_update_pool_stats_with_negative_value(k, v)
+
+ def _test_update_pool_stats_with_negative_value(self, k, v):
+ with self.pool() as pool:
+ pool_id = pool['pool']['id']
+ ctx = context.get_admin_context()
+ self.assertRaises(ValueError, self.plugin._update_pool_stats,
+ ctx, pool_id, {k: v})
+
def test_update_pool_stats(self):
stats_data = {"bytes_in": 1,
"bytes_out": 2,