cloudbase-init/cloudbaseinit/tests/metadata/services/test_baseopenstackservice.py
trobert2 d61826a0c6 Test refactoring
Added mock based unit tests for maasservice module, baseopenstack
module and changed all other tests in compliance with latest
refactoring.
2014-02-19 22:41:19 +02:00

162 lines
7.1 KiB
Python

# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright 2014 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 importlib
import mock
import posixpath
import sys
import unittest
from cloudbaseinit.metadata.services import base
from oslo.config import cfg
CONF = cfg.CONF
_ctypes_mock = mock.MagicMock()
mock_dict = {'ctypes': _ctypes_mock}
class BaseOpenStackServiceTest(unittest.TestCase):
@mock.patch.dict(sys.modules, mock_dict)
def setUp(self):
self.baseopenstackservice = importlib.import_module(
"cloudbaseinit.metadata.services.baseopenstackservice")
CONF.set_override('retry_count_interval', 0)
self._service = self.baseopenstackservice.BaseOpenStackService()
@mock.patch("cloudbaseinit.metadata.services.baseopenstackservice"
".BaseOpenStackService._get_cache_data")
def test_get_content(self, mock_get_cache_data):
response = self._service.get_content('fake name')
path = posixpath.join('openstack', 'content', 'fake name')
mock_get_cache_data.assert_called_once_with(path)
self.assertEqual(response, mock_get_cache_data())
@mock.patch("cloudbaseinit.metadata.services.baseopenstackservice"
".BaseOpenStackService._get_cache_data")
def test_get_user_data(self, mock_get_cache_data):
response = self._service.get_user_data()
path = posixpath.join('openstack', 'latest', 'user_data')
mock_get_cache_data.assert_called_once_with(path)
self.assertEqual(response, mock_get_cache_data())
@mock.patch("cloudbaseinit.metadata.services.baseopenstackservice"
".BaseOpenStackService._get_cache_data")
@mock.patch('json.loads')
def _test_get_meta_data(self, mock_loads, mock_get_cache_data, data):
mock_get_cache_data.return_value = data
response = self._service._get_meta_data(
version='fake version')
path = posixpath.join('openstack', 'fake version', 'meta_data.json')
mock_get_cache_data.assert_called_with(path)
if type(data) is str:
mock_loads.assert_called_once_with(mock_get_cache_data())
self.assertEqual(response, mock_loads())
else:
self.assertEqual(response, data)
def test_get_meta_data_string(self):
self._test_get_meta_data(data='fake data')
def test_get_meta_data_dict(self):
self._test_get_meta_data(data={'fake': 'data'})
@mock.patch("cloudbaseinit.metadata.services.baseopenstackservice"
".BaseOpenStackService._get_meta_data")
def test_get_instance_id(self, mock_get_meta_data):
response = self._service.get_instance_id()
mock_get_meta_data.assert_called_once_with()
mock_get_meta_data().get.assert_called_once_with('uuid')
self.assertEqual(response, mock_get_meta_data().get())
@mock.patch("cloudbaseinit.metadata.services.baseopenstackservice"
".BaseOpenStackService._get_meta_data")
def test_get_host_name(self, mock_get_meta_data):
response = self._service.get_host_name()
mock_get_meta_data.assert_called_once_with()
mock_get_meta_data().get.assert_called_once_with('hostname')
self.assertEqual(response, mock_get_meta_data().get())
@mock.patch("cloudbaseinit.metadata.services.baseopenstackservice"
".BaseOpenStackService._get_meta_data")
def test_get_public_keys(self, mock_get_meta_data):
response = self._service.get_public_keys()
mock_get_meta_data.assert_called_once_with()
mock_get_meta_data().get.assert_called_once_with('public_keys')
self.assertEqual(response, mock_get_meta_data().get().values())
@mock.patch("cloudbaseinit.metadata.services.baseopenstackservice"
".BaseOpenStackService._get_meta_data")
def test_get_network_config(self, mock_get_meta_data):
response = self._service.get_network_config()
mock_get_meta_data.assert_called_once_with()
mock_get_meta_data().get.assert_called_once_with('network_config')
self.assertEqual(response, mock_get_meta_data().get())
@mock.patch("cloudbaseinit.metadata.services.baseopenstackservice"
".BaseOpenStackService._get_meta_data")
def _test_get_admin_password(self, mock_get_meta_data, meta_data):
mock_get_meta_data.return_value = meta_data
response = self._service.get_admin_password()
mock_get_meta_data.assert_called_once_with()
if meta_data and 'admin_pass' in meta_data:
self.assertEqual(response, meta_data['admin_pass'])
elif meta_data and 'admin_pass' in meta_data.get('meta'):
self.assertEqual(response, meta_data.get('meta')['admin_pass'])
else:
self.assertEqual(response, None)
def test_get_admin_pass(self):
self._test_get_admin_password(meta_data={'admin_pass': 'fake pass'})
def test_get_admin_pass_in_meta(self):
self._test_get_admin_password(
meta_data={'meta': {'admin_pass': 'fake pass'}})
def test_get_admin_pass_no_pass(self):
self._test_get_admin_password(meta_data={})
@mock.patch("cloudbaseinit.metadata.services.baseopenstackservice"
".BaseOpenStackService._get_meta_data")
@mock.patch("cloudbaseinit.metadata.services.baseopenstackservice"
".BaseOpenStackService.get_user_data")
def _test_get_client_auth_certs(self, mock_get_user_data,
mock_get_meta_data, meta_data,
ret_value=None):
mock_get_meta_data.return_value = meta_data
mock_get_user_data.side_effect = [ret_value]
response = self._service.get_client_auth_certs()
mock_get_meta_data.assert_called_once_with()
if 'meta' in meta_data:
self.assertEqual(response, ['fake cert'])
elif type(ret_value) is str and ret_value.startswith(
self.baseopenstackservice.x509.PEM_HEADER):
mock_get_user_data.assert_called_once_with()
self.assertEqual(response, [ret_value])
elif ret_value is base.NotExistingMetadataException:
self.assertEqual(response, None)
def test_get_client_auth_certs(self):
self._test_get_client_auth_certs(
meta_data={'meta': {'admin_cert0': 'fake cert'}})
def test_get_client_auth_certs_no_cert_data(self):
self._test_get_client_auth_certs(
meta_data={}, ret_value=self.baseopenstackservice.x509.PEM_HEADER)
def test_get_client_auth_certs_no_cert_data_exception(self):
self._test_get_client_auth_certs(
meta_data={}, ret_value=base.NotExistingMetadataException)