summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--heat/engine/properties.py15
-rw-r--r--heat/tests/test_properties.py6
2 files changed, 16 insertions, 5 deletions
diff --git a/heat/engine/properties.py b/heat/engine/properties.py
index 92d4ac4da..87a2e73ad 100644
--- a/heat/engine/properties.py
+++ b/heat/engine/properties.py
@@ -313,15 +313,22 @@ class Property(object):
validate)]
def _get_bool(self, value):
+ """Get value for boolean property.
+
+ Explicitly checking for bool, or string with lower value
+ "true" or "false", to avoid integer values.
+ """
if value is None:
value = self.has_default() and self.default() or False
if isinstance(value, bool):
return value
- normalised = value.lower()
- if normalised not in ['true', 'false']:
- raise ValueError(_('"%s" is not a valid boolean') % normalised)
+ if isinstance(value, six.string_types):
+ normalised = value.lower()
+ if normalised not in ['true', 'false']:
+ raise ValueError(_('"%s" is not a valid boolean') % normalised)
+ return normalised == 'true'
- return normalised == 'true'
+ raise TypeError(_('"%s" is not a valid boolean') % value)
def get_value(self, value, validate=False, template=None):
"""Get value from raw value and sanitize according to data type."""
diff --git a/heat/tests/test_properties.py b/heat/tests/test_properties.py
index 09c8c39fa..ad33b1e82 100644
--- a/heat/tests/test_properties.py
+++ b/heat/tests/test_properties.py
@@ -887,10 +887,14 @@ class PropertyTest(common.HeatTestCase):
self.assertIs(False, p.get_value('false'))
self.assertIs(False, p.get_value(False))
- def test_boolean_invalid(self):
+ def test_boolean_invalid_string(self):
p = properties.Property({'Type': 'Boolean'})
self.assertRaises(ValueError, p.get_value, 'fish')
+ def test_boolean_invalid_int(self):
+ p = properties.Property({'Type': 'Boolean'})
+ self.assertRaises(TypeError, p.get_value, 5)
+
def test_list_string(self):
p = properties.Property({'Type': 'List'})
self.assertRaises(TypeError, p.get_value, 'foo')