1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# 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)
|