Merge "Add missing tests for db.instance_type_* methods"
This commit is contained in:
		| @@ -1847,6 +1847,194 @@ class ServiceTestCase(test.TestCase, ModelsObjectComparatorMixin): | ||||
|                           self.ctxt, 'non-exists-host', 'a') | ||||
|  | ||||
|  | ||||
| class InstanceTypeTestCase(test.TestCase, ModelsObjectComparatorMixin): | ||||
|  | ||||
|     def setUp(self): | ||||
|         super(InstanceTypeTestCase, self).setUp() | ||||
|         self.ctxt = context.get_admin_context() | ||||
|  | ||||
|     def _get_base_values(self): | ||||
|         return { | ||||
|             'name': 'fake_name', | ||||
|             'memory_mb': 512, | ||||
|             'vcpus': 1, | ||||
|             'root_gb': 10, | ||||
|             'ephemeral_gb': 10, | ||||
|             'flavorid': 'fake_flavor', | ||||
|             'swap': 0, | ||||
|             'rxtx_factor': 0.5, | ||||
|             'vcpu_weight': 1, | ||||
|             'disabled': False, | ||||
|             'is_public': True | ||||
|         } | ||||
|  | ||||
|     def _create_inst_type(self, values): | ||||
|         v = self._get_base_values() | ||||
|         v.update(values) | ||||
|         return db.instance_type_create(self.ctxt, v) | ||||
|  | ||||
|     def test_instance_type_create(self): | ||||
|         inst_type = self._create_inst_type({}) | ||||
|         ignored_keys = ['id', 'deleted', 'deleted_at', 'updated_at', | ||||
|                         'created_at', 'extra_specs'] | ||||
|  | ||||
|         self.assertFalse(inst_type['id'] is None) | ||||
|         self._assertEqualObjects(inst_type, self._get_base_values(), | ||||
|                                  ignored_keys) | ||||
|  | ||||
|     def test_instance_type_destroy(self): | ||||
|         specs1 = {'a': '1', 'b': '2'} | ||||
|         inst_type1 = self._create_inst_type({'name': 'name1', 'flavorid': 'a1', | ||||
|                                              'extra_specs': specs1}) | ||||
|         specs2 = {'c': '4', 'd': '3'} | ||||
|         inst_type2 = self._create_inst_type({'name': 'name2', 'flavorid': 'a2', | ||||
|                                              'extra_specs': specs2}) | ||||
|  | ||||
|         db.instance_type_destroy(self.ctxt, 'name1') | ||||
|  | ||||
|         self.assertRaises(exception.InstanceTypeNotFound, | ||||
|                           db.instance_type_get, self.ctxt, inst_type1['id']) | ||||
|         real_specs1 = db.instance_type_extra_specs_get(self.ctxt, | ||||
|                                                        inst_type1['flavorid']) | ||||
|         self._assertEqualObjects(real_specs1, {}) | ||||
|  | ||||
|         r_inst_type2 = db.instance_type_get(self.ctxt, inst_type2['id']) | ||||
|         self._assertEqualObjects(inst_type2, r_inst_type2, 'extra_specs') | ||||
|  | ||||
|     def test_instance_type_create_duplicate_name(self): | ||||
|         self._create_inst_type({}) | ||||
|         self.assertRaises(exception.InstanceTypeExists, | ||||
|                           self._create_inst_type, | ||||
|                           {'flavorid': 'some_random_flavor'}) | ||||
|  | ||||
|     def test_instance_type_create_duplicate_flavorid(self): | ||||
|         self._create_inst_type({}) | ||||
|         self.assertRaises(exception.InstanceTypeIdExists, | ||||
|                           self._create_inst_type, | ||||
|                           {'name': 'some_random_name'}) | ||||
|  | ||||
|     def test_instance_type_create_with_extra_specs(self): | ||||
|         extra_specs = dict(a='abc', b='def', c='ghi') | ||||
|         inst_type = self._create_inst_type({'extra_specs': extra_specs}) | ||||
|         ignored_keys = ['id', 'deleted', 'deleted_at', 'updated_at', | ||||
|                         'created_at', 'extra_specs'] | ||||
|  | ||||
|         self._assertEqualObjects(inst_type, self._get_base_values(), | ||||
|                                  ignored_keys) | ||||
|         self._assertEqualObjects(extra_specs, inst_type['extra_specs']) | ||||
|  | ||||
|     def test_instance_type_get_all(self): | ||||
|         # NOTE(boris-42): Remove base instance types | ||||
|         for it in db.instance_type_get_all(self.ctxt): | ||||
|             db.instance_type_destroy(self.ctxt, it['name']) | ||||
|  | ||||
|         instance_types = [ | ||||
|             {'root_gb': 600, 'memory_mb': 100, 'disabled': True, | ||||
|              'is_public': True, 'name': 'a1', 'flavorid': 'f1'}, | ||||
|             {'root_gb': 500, 'memory_mb': 200, 'disabled': True, | ||||
|              'is_public': True, 'name': 'a2', 'flavorid': 'f2'}, | ||||
|             {'root_gb': 400, 'memory_mb': 300, 'disabled': False, | ||||
|              'is_public': True, 'name': 'a3', 'flavorid': 'f3'}, | ||||
|             {'root_gb': 300, 'memory_mb': 400, 'disabled': False, | ||||
|              'is_public': False, 'name': 'a4', 'flavorid': 'f4'}, | ||||
|             {'root_gb': 200, 'memory_mb': 500, 'disabled': True, | ||||
|              'is_public': False, 'name': 'a5', 'flavorid': 'f5'}, | ||||
|             {'root_gb': 100, 'memory_mb': 600, 'disabled': True, | ||||
|              'is_public': False, 'name': 'a6', 'flavorid': 'f6'} | ||||
|         ] | ||||
|         instance_types = [self._create_inst_type(it) for it in instance_types] | ||||
|  | ||||
|         lambda_filters = { | ||||
|             'min_memory_mb': lambda it, v: it['memory_mb'] >= v, | ||||
|             'min_root_gb': lambda it, v: it['root_gb'] >= v, | ||||
|             'disabled': lambda it, v: it['disabled'] == v, | ||||
|             'is_public': lambda it, v: (v is None or it['is_public'] == v) | ||||
|         } | ||||
|  | ||||
|         mem_filts = [{'min_memory_mb': x} for x in [100, 350, 550, 650]] | ||||
|         root_filts = [{'min_root_gb': x} for x in [100, 350, 550, 650]] | ||||
|         disabled_filts = [{'disabled': x} for x in [True, False]] | ||||
|         is_public_filts = [{'is_public': x} for x in [True, False, None]] | ||||
|  | ||||
|         def assert_multi_filter_instance_type_get(filters=None): | ||||
|             if filters is None: | ||||
|                 filters = {} | ||||
|  | ||||
|             expected_it = instance_types | ||||
|             for name, value in filters.iteritems(): | ||||
|                 filt = lambda it: lambda_filters[name](it, value) | ||||
|                 expected_it = filter(filt, expected_it) | ||||
|  | ||||
|             real_it = db.instance_type_get_all(self.ctxt, filters=filters) | ||||
|             self._assertEqualListsOfObjects(expected_it, real_it) | ||||
|  | ||||
|         #no filter | ||||
|         assert_multi_filter_instance_type_get() | ||||
|  | ||||
|         #test only with one filter | ||||
|         for filt in mem_filts: | ||||
|             assert_multi_filter_instance_type_get(filt) | ||||
|         for filt in root_filts: | ||||
|             assert_multi_filter_instance_type_get(filt) | ||||
|         for filt in disabled_filts: | ||||
|             assert_multi_filter_instance_type_get(filt) | ||||
|         for filt in is_public_filts: | ||||
|             assert_multi_filter_instance_type_get(filt) | ||||
|  | ||||
|         #test all filters together | ||||
|         for mem in mem_filts: | ||||
|             for root in root_filts: | ||||
|                 for disabled in disabled_filts: | ||||
|                     for is_public in is_public_filts: | ||||
|                         filts = [f.items() for f in | ||||
|                                     [mem, root, disabled, is_public]] | ||||
|                         filts = dict(reduce(lambda x, y: x + y, filts, [])) | ||||
|                         assert_multi_filter_instance_type_get(filts) | ||||
|  | ||||
|     def test_instance_type_get(self): | ||||
|         inst_types = [{'name': 'abc', 'flavorid': '123'}, | ||||
|                     {'name': 'def', 'flavorid': '456'}, | ||||
|                     {'name': 'ghi', 'flavorid': '789'}] | ||||
|         inst_types = [self._create_inst_type(t) for t in inst_types] | ||||
|  | ||||
|         for inst_type in inst_types: | ||||
|             inst_type_by_id = db.instance_type_get(self.ctxt, inst_type['id']) | ||||
|             self._assertEqualObjects(inst_type, inst_type_by_id) | ||||
|  | ||||
|     def test_instance_type_get_by_name(self): | ||||
|         inst_types = [{'name': 'abc', 'flavorid': '123'}, | ||||
|                     {'name': 'def', 'flavorid': '456'}, | ||||
|                     {'name': 'ghi', 'flavorid': '789'}] | ||||
|         inst_types = [self._create_inst_type(t) for t in inst_types] | ||||
|  | ||||
|         for inst_type in inst_types: | ||||
|             inst_type_by_name = db.instance_type_get_by_name(self.ctxt, | ||||
|                                                              inst_type['name']) | ||||
|             self._assertEqualObjects(inst_type, inst_type_by_name) | ||||
|  | ||||
|     def test_instance_type_get_by_name_not_found(self): | ||||
|         self._create_inst_type({}) | ||||
|         self.assertRaises(exception.InstanceTypeNotFoundByName, | ||||
|                           db.instance_type_get_by_name, self.ctxt, 'nonexists') | ||||
|  | ||||
|     def test_instance_type_get_by_flavor_id(self): | ||||
|         inst_types = [{'name': 'abc', 'flavorid': '123'}, | ||||
|                       {'name': 'def', 'flavorid': '456'}, | ||||
|                       {'name': 'ghi', 'flavorid': '789'}] | ||||
|         inst_types = [self._create_inst_type(t) for t in inst_types] | ||||
|  | ||||
|         for inst_type in inst_types: | ||||
|             params = (self.ctxt, inst_type['flavorid']) | ||||
|             inst_type_by_flavorid = db.instance_type_get_by_flavor_id(*params) | ||||
|             self._assertEqualObjects(inst_type, inst_type_by_flavorid) | ||||
|  | ||||
|     def test_instance_type_get_by_flavor_not_found(self): | ||||
|         self._create_inst_type({}) | ||||
|         self.assertRaises(exception.FlavorNotFound, | ||||
|                           db.instance_type_get_by_flavor_id, | ||||
|                           self.ctxt, 'nonexists') | ||||
|  | ||||
|  | ||||
| class TestFixedIPGetByNetworkHost(test.TestCase): | ||||
|     def test_not_found_exception(self): | ||||
|         ctxt = context.get_admin_context() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jenkins
					Jenkins