
Instead of a separate cloudinit.test package. Change-Id: I6ea05a0f57c93a944f435f306a064d918fd26152
177 lines
7.1 KiB
Python
177 lines
7.1 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.sources import base as base_source
|
|
from cloudinit.sources.openstack import base
|
|
from cloudinit import tests
|
|
from cloudinit.tests.util import LogSnatcher
|
|
from cloudinit.tests.util import mock
|
|
|
|
|
|
class TestBaseOpenStackSource(tests.TestCase):
|
|
|
|
@mock.patch('cloudinit.sources.openstack.base.BaseOpenStackSource.'
|
|
'__abstractmethods__', new=())
|
|
def setUp(self):
|
|
self._source = base.BaseOpenStackSource()
|
|
super(TestBaseOpenStackSource, self).setUp()
|
|
|
|
@mock.patch('cloudinit.sources.openstack.base.BaseOpenStackSource.'
|
|
'_available_versions')
|
|
def _test_working_version(self, mock_available_versions,
|
|
versions, expected_version):
|
|
|
|
mock_available_versions.return_value = versions
|
|
|
|
with LogSnatcher('cloudinit.sources.openstack.base') as snatcher:
|
|
version = self._source._working_version()
|
|
|
|
msg = "Selected version '{0}' from {1}"
|
|
expected_logging = [msg.format(expected_version, versions)]
|
|
self.assertEqual(expected_logging, snatcher.output)
|
|
self.assertEqual(expected_version, version)
|
|
|
|
def test_working_version_latest(self):
|
|
self._test_working_version(versions=(), expected_version='latest')
|
|
|
|
def test_working_version_other_version(self):
|
|
versions = (
|
|
base._OS_FOLSOM,
|
|
base._OS_GRIZZLY,
|
|
base._OS_HAVANA,
|
|
)
|
|
self._test_working_version(versions=versions,
|
|
expected_version=base._OS_HAVANA)
|
|
|
|
@mock.patch('cloudinit.sources.openstack.base.BaseOpenStackSource.'
|
|
'_get_meta_data')
|
|
def test_metadata_capabilities(self, mock_get_meta_data):
|
|
mock_get_meta_data.return_value = {
|
|
'uuid': mock.sentinel.id,
|
|
'hostname': mock.sentinel.hostname,
|
|
'public_keys': {'key-one': 'key-one', 'key-two': 'key-two'},
|
|
}
|
|
|
|
instance_id = self._source.instance_id()
|
|
hostname = self._source.host_name()
|
|
public_keys = self._source.public_keys()
|
|
|
|
self.assertEqual(mock.sentinel.id, instance_id)
|
|
self.assertEqual(mock.sentinel.hostname, hostname)
|
|
self.assertEqual(["key-one", "key-two"], sorted(public_keys))
|
|
|
|
@mock.patch('cloudinit.sources.openstack.base.BaseOpenStackSource.'
|
|
'_get_meta_data')
|
|
def test_no_public_keys(self, mock_get_meta_data):
|
|
mock_get_meta_data.return_value = {'public_keys': []}
|
|
public_keys = self._source.public_keys()
|
|
self.assertEqual([], public_keys)
|
|
|
|
@mock.patch('cloudinit.sources.openstack.base.BaseOpenStackSource.'
|
|
'_get_meta_data')
|
|
def test_admin_password(self, mock_get_meta_data):
|
|
mock_get_meta_data.return_value = {
|
|
'meta': {base._ADMIN_PASSWORD: mock.sentinel.password}
|
|
}
|
|
password = self._source.admin_password()
|
|
self.assertEqual(mock.sentinel.password, password)
|
|
|
|
@mock.patch('cloudinit.sources.openstack.base.BaseOpenStackSource.'
|
|
'_path_join')
|
|
@mock.patch('cloudinit.sources.openstack.base.BaseOpenStackSource.'
|
|
'_get_cache_data')
|
|
def test_get_content(self, mock_get_cache_data, mock_path_join):
|
|
result = self._source._get_content(mock.sentinel.name)
|
|
|
|
mock_path_join.assert_called_once_with(
|
|
'openstack', 'content', mock.sentinel.name)
|
|
mock_get_cache_data.assert_called_once_with(
|
|
mock_path_join.return_value)
|
|
self.assertEqual(mock_get_cache_data.return_value, result)
|
|
|
|
@mock.patch('cloudinit.sources.openstack.base.BaseOpenStackSource.'
|
|
'_path_join')
|
|
@mock.patch('cloudinit.sources.openstack.base.BaseOpenStackSource.'
|
|
'_get_cache_data')
|
|
def test_user_data(self, mock_get_cache_data, mock_path_join):
|
|
result = self._source.user_data()
|
|
|
|
mock_path_join.assert_called_once_with(
|
|
'openstack', self._source._version, 'user_data')
|
|
mock_get_cache_data.assert_called_once_with(
|
|
mock_path_join.return_value)
|
|
self.assertEqual(mock_get_cache_data.return_value.buffer, result)
|
|
|
|
@mock.patch('cloudinit.sources.openstack.base.BaseOpenStackSource.'
|
|
'_path_join')
|
|
@mock.patch('cloudinit.sources.openstack.base.BaseOpenStackSource.'
|
|
'_get_cache_data')
|
|
def test_get_metadata(self, mock_get_cache_data, mock_path_join):
|
|
mock_get_cache_data.return_value = base_source.APIResponse(b"{}")
|
|
|
|
result = self._source._get_meta_data()
|
|
|
|
mock_path_join.assert_called_once_with(
|
|
'openstack', self._source._version, 'meta_data.json')
|
|
mock_get_cache_data.assert_called_once_with(
|
|
mock_path_join.return_value)
|
|
self.assertEqual({}, result)
|
|
|
|
@mock.patch('cloudinit.sources.openstack.base.BaseOpenStackSource.'
|
|
'_path_join')
|
|
@mock.patch('cloudinit.sources.openstack.base.BaseOpenStackSource.'
|
|
'_get_cache_data')
|
|
def test_vendor_data(self, mock_get_cache_data, mock_path_join):
|
|
result = self._source.vendor_data()
|
|
|
|
mock_path_join.assert_called_once_with(
|
|
'openstack', self._source._version, 'vendor_data.json')
|
|
mock_get_cache_data.assert_called_once_with(
|
|
mock_path_join.return_value)
|
|
self.assertEqual(mock_get_cache_data.return_value.buffer, result)
|
|
|
|
@mock.patch('cloudinit.sources.openstack.base.BaseOpenStackSource.'
|
|
'_working_version')
|
|
def test_load(self, mock_working_version):
|
|
self._source.load()
|
|
|
|
self.assertTrue(mock_working_version.called)
|
|
self.assertEqual(mock_working_version.return_value,
|
|
self._source._version)
|
|
|
|
@mock.patch('cloudinit.sources.openstack.base.BaseOpenStackSource.'
|
|
'_get_meta_data')
|
|
def test_network_config_no_config(self, mock_get_metadata):
|
|
mock_get_metadata.return_value = {}
|
|
|
|
self.assertIsNone(self._source.network_config())
|
|
|
|
mock_get_metadata.return_value = {1: 2}
|
|
|
|
self.assertIsNone(self._source.network_config())
|
|
|
|
@mock.patch('cloudinit.sources.openstack.base.BaseOpenStackSource.'
|
|
'_get_meta_data')
|
|
@mock.patch('cloudinit.sources.openstack.base.BaseOpenStackSource.'
|
|
'_get_content')
|
|
def test_network_config(self, mock_get_content, mock_get_metadata):
|
|
mock_get_metadata.return_value = {
|
|
"network_config": {base._PAYLOAD_KEY: "content_path"}
|
|
}
|
|
|
|
result = self._source.network_config()
|
|
|
|
mock_get_content.assert_called_once_with("content_path")
|
|
self.assertEqual(str(mock_get_content.return_value), result)
|
|
|
|
@mock.patch('cloudinit.sources.openstack.base.BaseOpenStackSource.'
|
|
'_get_data')
|
|
def test_get_cache_data(self, mock_get_data):
|
|
mock_get_data.return_value = b'test'
|
|
result = self._source._get_cache_data(mock.sentinel.path)
|
|
|
|
mock_get_data.assert_called_once_with(mock.sentinel.path)
|
|
self.assertEqual(b'test', result)
|