Make Integer type class honor zero for min/max

The Integer type class has an option for setting a min or max value for the
integer. But the class would not recognize zero as a valid value and not
check it.

Make the Integer class honor zero as a valid value for min and/or max.

Add test cases for using zero for min and/or max.

Change-Id: I395dea133d2a92e5ca4fab913aa17483a38f7ba1
Closes-Bug: #1489688
This commit is contained in:
John L. Villalovos 2015-08-27 20:21:36 -07:00
parent bc13758bd6
commit 85eee67b99
2 changed files with 41 additions and 5 deletions
oslo_config

@ -209,6 +209,8 @@ class IntegerTypeTests(TypeTestHelper, unittest.TestCase):
def test_repr_with_min_and_max(self):
t = types.Integer(min=123, max=456)
self.assertEqual('Integer(min=123, max=456)', repr(t))
t = types.Integer(min=0, max=0)
self.assertEqual('Integer(min=0, max=0)', repr(t))
def test_equal(self):
self.assertTrue(types.Integer() == types.Integer())
@ -230,6 +232,20 @@ class IntegerTypeTests(TypeTestHelper, unittest.TestCase):
def test_not_equal_to_other_class(self):
self.assertFalse(types.Integer() == types.String())
def test_min_greater_max(self):
self.assertRaises(ValueError,
types.Integer,
min=100, max=50)
self.assertRaises(ValueError,
types.Integer,
min=-50, max=-100)
self.assertRaises(ValueError,
types.Integer,
min=0, max=-50)
self.assertRaises(ValueError,
types.Integer,
min=50, max=0)
def test_with_max_and_min(self):
t = types.Integer(min=123, max=456)
self.assertRaises(ValueError, t, 122)
@ -239,6 +255,26 @@ class IntegerTypeTests(TypeTestHelper, unittest.TestCase):
self.assertRaises(ValueError, t, 0)
self.assertRaises(ValueError, t, 457)
def test_with_min_zero(self):
t = types.Integer(min=0, max=456)
self.assertRaises(ValueError, t, -1)
t(0)
t(123)
t(300)
t(456)
self.assertRaises(ValueError, t, -201)
self.assertRaises(ValueError, t, 457)
def test_with_max_zero(self):
t = types.Integer(min=-456, max=0)
self.assertRaises(ValueError, t, 1)
t(0)
t(-123)
t(-300)
t(-456)
self.assertRaises(ValueError, t, 201)
self.assertRaises(ValueError, t, -457)
class FloatTypeTests(TypeTestHelper, unittest.TestCase):
type = types.Float()

@ -153,7 +153,7 @@ class Integer(ConfigType):
super(Integer, self).__init__()
self.min = min
self.max = max
if min and max and max < min:
if min is not None and max is not None and max < min:
raise ValueError('Max value is less than min value')
def __call__(self, value):
@ -170,17 +170,17 @@ class Integer(ConfigType):
return value
def _check_range(self, value):
if self.min and value < self.min:
if self.min is not None and value < self.min:
raise ValueError('Should be greater than or equal to %d' %
self.min)
if self.max and value > self.max:
if self.max is not None and value > self.max:
raise ValueError('Should be less than or equal to %d' % self.max)
def __repr__(self):
props = []
if self.min:
if self.min is not None:
props.append('min=%d' % self.min)
if self.max:
if self.max is not None:
props.append('max=%d' % self.max)
if props: