
It seems sane to have consistent use of a 'TestCase' class wherever possible. I stumbled on need for this in porting some code (the reporter) back to cloud-init 0.7. Change-Id: Ia10546484dfe73154a68e817129ac2f950d5fe85
48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
# Copyright 2015 Canonical Ltd.
|
|
# This file is part of cloud-init. See LICENCE file for license information.
|
|
#
|
|
# vi: ts=4 expandtab
|
|
|
|
from cloudinit import safeyaml as yaml
|
|
from cloudinit.tests import TestCase
|
|
|
|
import tempfile
|
|
|
|
|
|
class TestSafeYaml(TestCase):
|
|
def test_simple(self):
|
|
blob = '\nk1: one\nk2: two'
|
|
expected = {'k1': "one", 'k2': "two"}
|
|
self.assertEqual(yaml.loads(blob), expected)
|
|
|
|
def test_bogus_raises_exception(self):
|
|
badyaml = "1\n 2:"
|
|
self.assertRaises(yaml.YAMLError, yaml.loads, badyaml)
|
|
|
|
def test_unsafe_types(self):
|
|
# should not load complex types
|
|
unsafe_yaml = "!!python/object:__builtin__.object {}"
|
|
self.assertRaises(yaml.YAMLError, yaml.loads, unsafe_yaml)
|
|
|
|
def test_python_unicode_not_allowed(self):
|
|
# python/unicode is not allowed
|
|
# in the past this type was allowed, but not now, so explicit test.
|
|
blob = "{k1: !!python/unicode 'my unicode', k2: my string}"
|
|
self.assertRaises(yaml.YAMLError, yaml.loads, blob)
|
|
|
|
def test_dumps_returns_string(self):
|
|
self.assertTrue(
|
|
isinstance(yaml.dumps(867 - 5309), (str,)))
|
|
|
|
def test_dumps_is_loadable(self):
|
|
mydata = {'a': 'hey', 'b': ['bee', 'Bea']}
|
|
self.assertEqual(yaml.loads(yaml.dumps(mydata)), mydata)
|
|
|
|
def test_load(self):
|
|
valid_yaml = "foo: bar"
|
|
expected = {'foo': 'bar'}
|
|
with tempfile.NamedTemporaryFile(mode='w', delete=False) as tmpf:
|
|
tmpf.write(valid_yaml)
|
|
tmpf.close()
|
|
self.assertEqual(yaml.load(tmpf.name), expected)
|