
Drivers are loaded and registered automatically. Proper handling is done when driver is not found. Change-Id: Ifd491de7b40592e5f4edada3a58038d6fd707208
119 lines
4.4 KiB
Python
119 lines
4.4 KiB
Python
# 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 os
|
|
import yaml
|
|
|
|
import mock
|
|
|
|
import os_faults
|
|
from os_faults.api import error
|
|
from os_faults.drivers import devstack
|
|
from os_faults.drivers import fuel
|
|
from os_faults.drivers import ipmi
|
|
from os_faults.drivers import libvirt_driver
|
|
from os_faults.tests.unit import test
|
|
|
|
|
|
class OSFaultsTestCase(test.TestCase):
|
|
|
|
def setUp(self):
|
|
super(OSFaultsTestCase, self).setUp()
|
|
self.cloud_config = {
|
|
'cloud_management': {
|
|
'driver': 'fuel',
|
|
'address': '10.30.00.5',
|
|
'username': 'root',
|
|
},
|
|
'power_management': {
|
|
'driver': 'libvirt',
|
|
'connection_uri': "qemu+ssh://user@10.30.20.21/system"
|
|
}
|
|
}
|
|
|
|
def test_connect_devstack(self):
|
|
cloud_config = {
|
|
'cloud_management': {
|
|
'driver': 'devstack',
|
|
'address': 'devstack.local',
|
|
'username': 'developer',
|
|
}
|
|
}
|
|
destructor = os_faults.connect(cloud_config)
|
|
self.assertIsInstance(destructor, devstack.DevStackManagement)
|
|
|
|
def test_connect_fuel_with_libvirt(self):
|
|
destructor = os_faults.connect(self.cloud_config)
|
|
self.assertIsInstance(destructor, fuel.FuelManagement)
|
|
self.assertIsInstance(destructor.power_management,
|
|
libvirt_driver.LibvirtDriver)
|
|
|
|
def test_connect_fuel_with_ipmi(self):
|
|
cloud_config = {
|
|
'cloud_management': {
|
|
'driver': 'fuel',
|
|
'address': '10.30.00.5',
|
|
'username': 'root',
|
|
},
|
|
'power_management': {
|
|
'driver': 'ipmi',
|
|
'mac_to_bmc': {
|
|
'00:00:00:00:00:00': {
|
|
'address': '55.55.55.55',
|
|
'username': 'foo',
|
|
'password': 'bar',
|
|
}
|
|
}
|
|
}
|
|
}
|
|
destructor = os_faults.connect(cloud_config)
|
|
self.assertIsInstance(destructor, fuel.FuelManagement)
|
|
self.assertIsInstance(destructor.power_management, ipmi.IPMIDriver)
|
|
|
|
def test_connect_driver_not_found(self):
|
|
cloud_config = {
|
|
'cloud_management': {
|
|
'driver': 'non-existing',
|
|
}
|
|
}
|
|
self.assertRaises(error.OSFError, os_faults.connect, cloud_config)
|
|
|
|
def test_connect_driver_not_specified(self):
|
|
cloud_config = {}
|
|
self.assertRaises(error.OSFError, os_faults.connect, cloud_config)
|
|
|
|
@mock.patch('os.path.exists', return_value=True)
|
|
def test_connect_with_config_file(self, mock_os_path_exists):
|
|
mock_os_faults_open = mock.mock_open(
|
|
read_data=yaml.dump(self.cloud_config))
|
|
with mock.patch('os_faults.open', mock_os_faults_open, create=True):
|
|
destructor = os_faults.connect()
|
|
self.assertIsInstance(destructor, fuel.FuelManagement)
|
|
self.assertIsInstance(destructor.power_management,
|
|
libvirt_driver.LibvirtDriver)
|
|
|
|
@mock.patch.dict(os.environ, {'OS_FAULTS_CONFIG': '/my/conf.yaml'})
|
|
@mock.patch('os.path.exists', return_value=True)
|
|
def test_connect_with_env_config(self, mock_os_path_exists):
|
|
mock_os_faults_open = mock.mock_open(
|
|
read_data=yaml.dump(self.cloud_config))
|
|
with mock.patch('os_faults.open', mock_os_faults_open, create=True):
|
|
destructor = os_faults.connect()
|
|
self.assertIsInstance(destructor, fuel.FuelManagement)
|
|
self.assertIsInstance(destructor.power_management,
|
|
libvirt_driver.LibvirtDriver)
|
|
mock_os_faults_open.assert_called_once_with('/my/conf.yaml')
|
|
|
|
@mock.patch('os.path.exists', return_value=False)
|
|
def test_connect_no_config_files(self, mock_os_path_exists):
|
|
self.assertRaises(error.OSFError, os_faults.connect)
|