def test_isolate_agg_trait_on_flv_img_destination_not_set( self, mock_getnotmd): mock_getnotmd.return_value = [] flavor_traits = set(['HW_GPU_API_DXVA']) image_traits = set(['HW_NIC_DCB_ETS']) fake_flavor = objects.Flavor(vcpus=1, memory_mb=1024, root_gb=10, ephemeral_gb=5, swap=0, extra_specs={ 'trait:' + trait: 'required' for trait in flavor_traits }) fake_image = objects.ImageMeta(properties=objects.ImageMetaProps( traits_required=[trait for trait in image_traits])) reqspec = objects.RequestSpec(flavor=fake_flavor, image=fake_image) result = request_filter.isolate_aggregates(self.context, reqspec) self.assertTrue(result) self.assertNotIn('requested_destination', reqspec) keys = [ 'trait:%s' % trait for trait in flavor_traits.union(image_traits) ] mock_getnotmd.assert_called_once_with(self.context, utils.ItemsMatcher(keys), 'trait:', value='required')
def test_isolate_aggregates(self, mock_getnotmd): agg4_traits = { 'trait:HW_GPU_API_DXVA': 'required', 'trait:HW_NIC_DCB_ETS': 'required' } mock_getnotmd.return_value = [ objects.Aggregate( uuid=uuids.agg1, metadata={'trait:CUSTOM_WINDOWS_LICENSED_TRAIT': 'required'}), objects.Aggregate(uuid=uuids.agg2, metadata={ 'trait:CUSTOM_WINDOWS_LICENSED_TRAIT': 'required', 'trait:CUSTOM_XYZ_TRAIT': 'required' }), objects.Aggregate(uuid=uuids.agg4, metadata=agg4_traits), ] fake_flavor = objects.Flavor(vcpus=1, memory_mb=1024, root_gb=10, ephemeral_gb=5, swap=0, extra_specs=agg4_traits) fake_image = objects.ImageMeta(properties=objects.ImageMetaProps( traits_required=[])) reqspec = objects.RequestSpec(flavor=fake_flavor, image=fake_image) result = request_filter.isolate_aggregates(self.context, reqspec) self.assertTrue(result) self.assertItemsEqual( set([uuids.agg1, uuids.agg2, uuids.agg4]), reqspec.requested_destination.forbidden_aggregates) mock_getnotmd.assert_called_once_with(self.context, utils.ItemsMatcher(agg4_traits), 'trait:', value='required')