nodepool/nodepool/tests/test_shade_integration.py

103 lines
3.9 KiB
Python

# Copyright (C) 2015 Hewlett-Packard Development Company, L.P.
#
# 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 logging
import os
import fixtures
import shade
import testtools
import yaml
from nodepool import tests
from nodepool.provider_manager import shade_inner_exceptions
class TestShadeIntegration(tests.IntegrationTestCase):
def _cleanup_cloud_config(self):
os.remove(self.clouds_path)
def _use_cloud_config(self, config):
config_dir = fixtures.TempDir()
self.useFixture(config_dir)
self.clouds_path = os.path.join(config_dir.path, 'clouds.yaml')
self.useFixture(fixtures.MonkeyPatch(
'os_client_config.config.CONFIG_FILES',
[self.clouds_path]))
with open(self.clouds_path, 'w') as h:
yaml.safe_dump(config, h)
self.addCleanup(self._cleanup_cloud_config)
def test_nodepool_provider_config(self):
configfile = self.setup_config('node.yaml')
pool = self.useNodepool(configfile, watermark_sleep=1)
pool.updateConfig()
provider_manager = pool.config.provider_managers['fake-provider']
auth_data = {'username': 'fake',
'project_id': 'fake',
'password': 'fake',
'auth_url': 'fake'}
self.assertEqual(provider_manager._client.auth, auth_data)
self.assertEqual(provider_manager._client.region_name, 'fake-region')
def test_nodepool_osc_config(self):
configfile = self.setup_config('node_osc.yaml')
auth_data = {'username': 'os_fake',
'project_name': 'os_fake',
'password': 'os_fake',
'auth_url': 'os_fake'}
osc_config = {'clouds': {'fake-cloud': {'auth': auth_data}}}
self._use_cloud_config(osc_config)
pool = self.useNodepool(configfile, watermark_sleep=1)
pool.updateConfig()
provider_manager = pool.config.provider_managers['fake-provider']
self.assertEqual(provider_manager._client.auth, auth_data)
def test_nodepool_osc_config_reload(self):
configfile = self.setup_config('node_osc.yaml')
auth_data = {'username': 'os_fake',
'project_name': 'os_fake',
'password': 'os_fake',
'auth_url': 'os_fake'}
osc_config = {'clouds': {'fake-cloud': {'auth': auth_data}}}
self._use_cloud_config(osc_config)
pool = self.useNodepool(configfile, watermark_sleep=1)
pool.updateConfig()
provider_manager = pool.config.provider_managers['fake-provider']
self.assertEqual(provider_manager._client.auth, auth_data)
# update the config
auth_data['password'] = 'os_new_fake'
os.remove(self.clouds_path)
with open(self.clouds_path, 'w') as h:
yaml.safe_dump(osc_config, h)
pool.updateConfig()
provider_manager = pool.config.provider_managers['fake-provider']
self.assertEqual(provider_manager._client.auth, auth_data)
def test_exceptions(self):
log = self.useFixture(fixtures.FakeLogger(level=logging.DEBUG))
with testtools.ExpectedException(shade.OpenStackCloudException):
with shade_inner_exceptions():
try:
raise Exception("inner test")
except:
raise shade.OpenStackCloudException("outer test")
self.assertTrue('Exception("inner test")' in log.output)