Fixes environment file using correct YAML format

An internal unexpected exception is raised while create a stack with an
environment file which only has string content. We should handle the case
and raise the correct error message such as "environment file is not Yaml
format".

Change-Id: I4e124db6a8dca9cf811f151ae95058cdaae16a01
Closes-Bug: #1273974
This commit is contained in:
huangtianhua
2014-01-29 15:25:14 +08:00
parent 62cd3154c5
commit ce02d917f7
2 changed files with 16 additions and 1 deletions

View File

@@ -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:

View File

@@ -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):