summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--heatclient/common/environment_format.py5
-rw-r--r--heatclient/tests/test_environment_format.py12
2 files changed, 16 insertions, 1 deletions
diff --git a/heatclient/common/environment_format.py b/heatclient/common/environment_format.py
index 136c0ae..d3c002e 100644
--- a/heatclient/common/environment_format.py
+++ b/heatclient/common/environment_format.py
@@ -26,7 +26,7 @@ def parse(env_str):
'''Takes a string and returns a dict containing the parsed structure.
This includes determination of whether the string is using the
- JSON or YAML format.
+ YAML format.
'''
try:
env = yaml.load(env_str, Loader=yaml_loader)
@@ -35,6 +35,9 @@ def parse(env_str):
else:
if env is None:
env = {}
+ elif not isinstance(env, dict):
+ raise ValueError('The environment is not a valid '
+ 'YAML mapping data type.')
for param in env:
if param not in SECTIONS:
diff --git a/heatclient/tests/test_environment_format.py b/heatclient/tests/test_environment_format.py
index 0df52d1..bc694d4 100644
--- a/heatclient/tests/test_environment_format.py
+++ b/heatclient/tests/test_environment_format.py
@@ -49,6 +49,18 @@ parameters: }
'''
self.assertRaises(ValueError, environment_format.parse, env)
+ def test_parse_string_environment(self):
+ env = 'just string'
+ expect = 'The environment is not a valid YAML mapping data type.'
+ msg = self.assertRaises(ValueError, environment_format.parse, env)
+ self.assertIn(expect, msg)
+
+ def test_parse_document(self):
+ env = '["foo" , "bar"]'
+ expect = 'The environment is not a valid YAML mapping data type.'
+ msg = self.assertRaises(ValueError, environment_format.parse, env)
+ self.assertIn(expect, msg)
+
class YamlParseExceptions(testtools.TestCase):