89cd6a0c49
As part of the split of functional and unit tests we need to isolate the unit tests into a separate directory for having multiple test targets in a sane way. Part of bp:functional-tests-for-nova Change-Id: Id42ba373c1bda6a312b673ab2b489ca56da8c628
114 lines
5.3 KiB
Python
114 lines
5.3 KiB
Python
# Copyright 2012 OpenStack Foundation # 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.
|
|
"""
|
|
Tests For Loadable class handling.
|
|
"""
|
|
|
|
from nova import exception
|
|
from nova import test
|
|
from nova.tests.unit import fake_loadables
|
|
|
|
|
|
class LoadablesTestCase(test.NoDBTestCase):
|
|
def setUp(self):
|
|
super(LoadablesTestCase, self).setUp()
|
|
self.fake_loader = fake_loadables.FakeLoader()
|
|
# The name that we imported above for testing
|
|
self.test_package = 'nova.tests.unit.fake_loadables'
|
|
|
|
def test_loader_init(self):
|
|
self.assertEqual(self.fake_loader.package, self.test_package)
|
|
# Test the path of the module
|
|
ending_path = '/' + self.test_package.replace('.', '/')
|
|
self.assertTrue(self.fake_loader.path.endswith(ending_path))
|
|
self.assertEqual(self.fake_loader.loadable_cls_type,
|
|
fake_loadables.FakeLoadable)
|
|
|
|
def _compare_classes(self, classes, expected):
|
|
class_names = [cls.__name__ for cls in classes]
|
|
self.assertEqual(set(class_names), set(expected))
|
|
|
|
def test_get_all_classes(self):
|
|
classes = self.fake_loader.get_all_classes()
|
|
expected_class_names = ['FakeLoadableSubClass1',
|
|
'FakeLoadableSubClass2',
|
|
'FakeLoadableSubClass5',
|
|
'FakeLoadableSubClass6']
|
|
self._compare_classes(classes, expected_class_names)
|
|
|
|
def test_get_matching_classes(self):
|
|
prefix = self.test_package
|
|
test_classes = [prefix + '.fake_loadable1.FakeLoadableSubClass1',
|
|
prefix + '.fake_loadable2.FakeLoadableSubClass5']
|
|
classes = self.fake_loader.get_matching_classes(test_classes)
|
|
expected_class_names = ['FakeLoadableSubClass1',
|
|
'FakeLoadableSubClass5']
|
|
self._compare_classes(classes, expected_class_names)
|
|
|
|
def test_get_matching_classes_with_underscore(self):
|
|
prefix = self.test_package
|
|
test_classes = [prefix + '.fake_loadable1.FakeLoadableSubClass1',
|
|
prefix + '.fake_loadable2._FakeLoadableSubClass7']
|
|
self.assertRaises(exception.ClassNotFound,
|
|
self.fake_loader.get_matching_classes,
|
|
test_classes)
|
|
|
|
def test_get_matching_classes_with_wrong_type1(self):
|
|
prefix = self.test_package
|
|
test_classes = [prefix + '.fake_loadable1.FakeLoadableSubClass4',
|
|
prefix + '.fake_loadable2.FakeLoadableSubClass5']
|
|
self.assertRaises(exception.ClassNotFound,
|
|
self.fake_loader.get_matching_classes,
|
|
test_classes)
|
|
|
|
def test_get_matching_classes_with_wrong_type2(self):
|
|
prefix = self.test_package
|
|
test_classes = [prefix + '.fake_loadable1.FakeLoadableSubClass1',
|
|
prefix + '.fake_loadable2.FakeLoadableSubClass8']
|
|
self.assertRaises(exception.ClassNotFound,
|
|
self.fake_loader.get_matching_classes,
|
|
test_classes)
|
|
|
|
def test_get_matching_classes_with_one_function(self):
|
|
prefix = self.test_package
|
|
test_classes = [prefix + '.fake_loadable1.return_valid_classes',
|
|
prefix + '.fake_loadable2.FakeLoadableSubClass5']
|
|
classes = self.fake_loader.get_matching_classes(test_classes)
|
|
expected_class_names = ['FakeLoadableSubClass1',
|
|
'FakeLoadableSubClass2',
|
|
'FakeLoadableSubClass5']
|
|
self._compare_classes(classes, expected_class_names)
|
|
|
|
def test_get_matching_classes_with_two_functions(self):
|
|
prefix = self.test_package
|
|
test_classes = [prefix + '.fake_loadable1.return_valid_classes',
|
|
prefix + '.fake_loadable2.return_valid_class']
|
|
classes = self.fake_loader.get_matching_classes(test_classes)
|
|
expected_class_names = ['FakeLoadableSubClass1',
|
|
'FakeLoadableSubClass2',
|
|
'FakeLoadableSubClass6']
|
|
self._compare_classes(classes, expected_class_names)
|
|
|
|
def test_get_matching_classes_with_function_including_invalids(self):
|
|
# When using a method, no checking is done on valid classes.
|
|
prefix = self.test_package
|
|
test_classes = [prefix + '.fake_loadable1.return_invalid_classes',
|
|
prefix + '.fake_loadable2.return_valid_class']
|
|
classes = self.fake_loader.get_matching_classes(test_classes)
|
|
expected_class_names = ['FakeLoadableSubClass1',
|
|
'_FakeLoadableSubClass3',
|
|
'FakeLoadableSubClass4',
|
|
'FakeLoadableSubClass6']
|
|
self._compare_classes(classes, expected_class_names)
|