cloudbase-init/cloudbaseinit/tests/plugins/common/userdataplugins/test_cloudconfig.py

78 lines
2.7 KiB
Python

# Copyright 2015 Cloudbase Solutions Srl
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import unittest
try:
import unittest.mock as mock
except ImportError:
import mock
from cloudbaseinit import conf as cloudbaseinit_conf
from cloudbaseinit.plugins.common.userdataplugins import cloudconfig
from cloudbaseinit.tests import testutils
CONF = cloudbaseinit_conf.CONF
class CloudConfigPluginTests(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.plugin = cloudconfig.CloudConfigPlugin()
def test_priority(self):
orig = CONF.cloud_config_plugins
CONF.cloud_config_plugins = ['write_file', 'dummy', 'dummy1']
expected = [
('write_file', 0),
('dummy', 1),
('dummy1', 2),
('invalid', 3),
]
try:
executor = cloudconfig.CloudConfigPluginExecutor(
dummy=1,
dummy1=2,
invalid=3,
write_file=0)
self.assertEqual(expected, executor._expected_plugins)
finally:
CONF.cloud_config_plugins = orig
def test_executor_from_yaml(self):
for invalid in (mock.sentinel.yaml, None, 1, int, '{}'):
with self.assertRaises(cloudconfig.CloudConfigError):
cloudconfig.CloudConfigPluginExecutor.from_yaml(invalid)
executor = cloudconfig.CloudConfigPluginExecutor.from_yaml('{f: 1}')
self.assertIsInstance(executor, cloudconfig.CloudConfigPluginExecutor)
def _test_invalid_type(self, part, err_msg):
with testutils.LogSnatcher('cloudbaseinit.plugins.common.'
'userdataplugins.cloudconfig') as snatcher:
self.plugin.process_non_multipart(part)
expected = ("Could not process part type %(type)r: %(err)r"
% {'type': type(part), 'err': err_msg})
self.assertEqual([expected], snatcher.output)
def test_invalid_type(self):
self._test_invalid_type({'unsupported'},
"Invalid yaml stream provided.")
def test_invalid_type_empty(self):
self._test_invalid_type('#comment',
'Empty yaml stream provided.')