ironic/ironic/tests/unit/dhcp/test_factory.py
Dmitry Tantsur 7fcca34de6 Completely stop using the "fake" classic driver in unit tests
This change makes "fake-hardware" the default driver for test nodes
and makes enabled_drivers empty in the base test class.

Note that some unit test coverage for classic drivers is lost because
of this change. It is fine, because the classic drivers themselves
are deprecated and will be removed soon.

Change-Id: I06acb5aed24ef952db3f9e6987e5a90c81e96401
2018-06-06 16:10:43 +02:00

116 lines
3.9 KiB
Python

# Copyright 2014 Rackspace, Inc.
# All Rights Reserved
#
# 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 inspect
import mock
import six
import stevedore
from ironic.common import dhcp_factory
from ironic.common import exception
from ironic.dhcp import base as base_class
from ironic.dhcp import neutron
from ironic.dhcp import none
from ironic.tests import base
class TestDHCPFactory(base.TestCase):
def setUp(self):
super(TestDHCPFactory, self).setUp()
self.config(url='test-url',
url_timeout=30,
group='neutron')
dhcp_factory.DHCPFactory._dhcp_provider = None
self.addCleanup(setattr, dhcp_factory.DHCPFactory,
'_dhcp_provider', None)
def test_default_dhcp(self):
# dhcp provider should default to neutron
api = dhcp_factory.DHCPFactory()
self.assertIsInstance(api.provider, neutron.NeutronDHCPApi)
def test_set_none_dhcp(self):
self.config(dhcp_provider='none',
group='dhcp')
api = dhcp_factory.DHCPFactory()
self.assertIsInstance(api.provider, none.NoneDHCPApi)
def test_set_neutron_dhcp(self):
self.config(dhcp_provider='neutron',
group='dhcp')
api = dhcp_factory.DHCPFactory()
self.assertIsInstance(api.provider, neutron.NeutronDHCPApi)
def test_only_one_dhcp(self):
self.config(dhcp_provider='none',
group='dhcp')
dhcp_factory.DHCPFactory()
with mock.patch.object(dhcp_factory.DHCPFactory,
'_set_dhcp_provider') as mock_set_dhcp:
# There is already a dhcp_provider, so this shouldn't call
# _set_dhcp_provider again.
dhcp_factory.DHCPFactory()
self.assertEqual(0, mock_set_dhcp.call_count)
def test_set_bad_dhcp(self):
self.config(dhcp_provider='bad_dhcp',
group='dhcp')
self.assertRaises(exception.DHCPLoadError, dhcp_factory.DHCPFactory)
@mock.patch.object(stevedore.driver, 'DriverManager', autospec=True)
def test_dhcp_some_error(self, mock_drv_mgr):
mock_drv_mgr.side_effect = Exception('No module mymod found.')
self.assertRaises(exception.DHCPLoadError, dhcp_factory.DHCPFactory)
class CompareBasetoModules(base.TestCase):
def test_drivers_match_dhcp_base(self):
signature_method = inspect.getargspec if six.PY2 else inspect.signature
def _get_public_apis(inst):
methods = {}
for (name, value) in inspect.getmembers(inst, inspect.ismethod):
if name.startswith("_"):
continue
methods[name] = value
return methods
def _compare_classes(baseclass, driverclass):
basemethods = _get_public_apis(baseclass)
implmethods = _get_public_apis(driverclass)
for name in basemethods:
baseargs = signature_method(basemethods[name])
implargs = signature_method(implmethods[name])
self.assertEqual(
baseargs,
implargs,
"%s args of %s don't match base %s" % (
name,
driverclass,
baseclass)
)
_compare_classes(base_class.BaseDHCP, none.NoneDHCPApi)
_compare_classes(base_class.BaseDHCP, neutron.NeutronDHCPApi)