def test_describe_new_local_bdm_image_from_local_image(self): image = self._get_new_ebs_image( image_project_id=fakes.ID_OS_PROJECT, bdm_image_project_id=fakes.ID_OS_PROJECT) image_id = self._find_snapshot_id_in_bdm(image, '/dev/vdi') image_api.describe_images(self.context, image_id=[image_id]) self.assert_image_project(fakes.ID_OS_PROJECT, image_id)
def test_describe_new_alien_bdm_image_from_new_alien_image(self): alien_project_id = fakes.random_os_id() image = self._get_new_ebs_image(image_project_id=alien_project_id, bdm_image_project_id=alien_project_id) image_id = self._find_snapshot_id_in_bdm(image, '/dev/vdi') image_api.describe_images(self.context, image_id=[image_id]) self.assert_image_project(None, image_id)
def test_describe_new_alien_bdm_image_from_new_alien_image(self): alien_project_id = fakes.random_os_id() image = self._get_new_ebs_image( image_project_id=alien_project_id, bdm_image_project_id=alien_project_id) image_id = self._find_snapshot_id_in_bdm(image, '/dev/vdi') image_api.describe_images(self.context, image_id=[image_id]) self.assert_image_project(None, image_id)
def _test_describe_new_instance_then_its_image(self, image_project_id): os_instance_id = fakes.random_os_id() os_image_id = fakes.random_os_id() os_instance = { 'id': os_instance_id, 'flavor': {'id': 'fake'}, 'image': {'id': os_image_id}, } os_image = { 'id': os_image_id, 'owner': image_project_id, 'is_public': True, } self.nova_admin.servers.list.return_value = [ fakes.OSInstance_full(os_instance)] self.glance.images.list.return_value = [fakes.OSImage(os_image)] reservations = instance_api.describe_instances(self.context) instance = reservations['reservationSet'][0]['instancesSet'][0] image_id = instance['imageId'] image = (image_api.describe_images(self.context, image_id=[image_id]) ['imagesSet'][0]) self.assertEqual(image_id, image['imageId']) self.assertEqual(image_project_id, image['imageOwnerId']) expected_project_id = (fakes.ID_OS_PROJECT if image_project_id == fakes.ID_OS_PROJECT else None) self.assert_image_project(expected_project_id, image['imageId'])
def _get_new_ebs_image(self, image_project_id=None, bdm_image_project_id=None): os_image_id = fakes.random_os_id() os_snapshot_id = fakes.random_os_id() os_bdm_image_id = fakes.random_os_id() os_image = { 'id': os_image_id, 'owner': image_project_id, 'is_public': True, 'container_format': 'ami', 'bdm_v2': True, 'block_device_mapping': [{ 'device_name': '/dev/vds', 'source_type': 'snapshot', 'destination_type': 'volume', 'snapshot_id': os_snapshot_id }], } if os_bdm_image_id: os_image['block_device_mapping'].append({ 'device_name': '/dev/vdi', 'source_type': 'image', 'destination_type': 'volume', 'image_id': os_bdm_image_id, 'size': 100 }) os_snapshot = { 'id': os_snapshot_id, } os_bdm_image = { 'id': os_bdm_image_id, 'owner': bdm_image_project_id, 'is_public': True, } os_images = [fakes.OSImage(os_image)] if bdm_image_project_id: os_images.append(fakes.OSImage(os_bdm_image)) self.glance.images.list.return_value = os_images self.cinder.volume_snapshots.list.return_value = ([ fakes.OSSnapshot(os_snapshot) ] if image_project_id == fakes.ID_OS_PROJECT else []) images = image_api.describe_images(self.context) return next(i for i in images['imagesSet'] if i['blockDeviceMapping'])
def _get_new_ebs_image(self, image_project_id=None, bdm_image_project_id=None): os_image_id = fakes.random_os_id() os_snapshot_id = fakes.random_os_id() os_bdm_image_id = fakes.random_os_id() os_image = { 'id': os_image_id, 'owner': image_project_id, 'is_public': True, 'container_format': 'ami', 'properties': { 'bdm_v2': True, 'block_device_mapping': [{'device_name': '/dev/vds', 'source_type': 'snapshot', 'destination_type': 'volume', 'snapshot_id': os_snapshot_id}], }, } if os_bdm_image_id: os_image['properties']['block_device_mapping'].append({ 'device_name': '/dev/vdi', 'source_type': 'image', 'destination_type': 'volume', 'image_id': os_bdm_image_id, 'size': 100}) os_snapshot = { 'id': os_snapshot_id, } os_bdm_image = { 'id': os_bdm_image_id, 'owner': bdm_image_project_id, 'is_public': True, } os_images = [fakes.OSImage(os_image)] if bdm_image_project_id: os_images.append(fakes.OSImage(os_bdm_image)) self.glance.images.list.return_value = os_images self.cinder.volume_snapshots.list.return_value = ( [fakes.OSSnapshot(os_snapshot)] if image_project_id == fakes.ID_OS_PROJECT else []) images = image_api.describe_images(self.context) return next(i for i in images['imagesSet'] if i['blockDeviceMapping'])
def _test_describe_new_images(self, image_project_id=None, aki_image_project_id=None, with_id_mapping=False): os_image_id = fakes.random_os_id() os_aki_image_id = fakes.random_os_id() os_image = { 'id': os_image_id, 'owner': image_project_id, 'is_public': True, 'container_format': 'ami', 'properties': { 'kernel_id': os_aki_image_id, }, } os_aki_image = { 'id': os_aki_image_id, 'owner': aki_image_project_id, 'is_public': True, 'container_format': 'aki', } self.glance.images.list.return_value = ( [fakes.OSImage(os_image), fakes.OSImage(os_aki_image)] if with_id_mapping else [fakes.OSImage(os_aki_image), fakes.OSImage(os_image)]) images = image_api.describe_images(self.context) image = next(i for i in images['imagesSet'] if i['imageType'] == 'machine') aki_image = next(i for i in images['imagesSet'] if i['imageType'] == 'kernel') self.assertEqual(image_project_id, image['imageOwnerId']) self.assert_image_project( (image_project_id if image_project_id == fakes.ID_OS_PROJECT else None), image['imageId']) self.assertEqual(aki_image_project_id, aki_image['imageOwnerId']) self.assert_image_project( (aki_image_project_id if aki_image_project_id == fakes.ID_OS_PROJECT else None), aki_image['imageId'])
def test_describe_images_being_created(self): db_api = self.mock_db() glance = self.mock_glance() context = base.create_context() image_id = fakes.random_ec2_id('ami') image = { 'id': image_id, 'os_id': None, 'is_public': False, 'description': 'fake desc' } db_api.set_mock_items(image) db_api.get_public_items.return_value = [] # describe cases when no glance image exists glance.images.list.return_value = [] expected = { 'imagesSet': [{ 'imageId': image_id, 'description': 'fake desc', 'imageOwnerId': fakes.ID_OS_PROJECT, 'imageState': 'pending', 'imageType': 'machine', 'isPublic': False }] } # describe all images result = image_api.describe_images(context) self.assertEqual(expected, result) # describe the image result = image_api.describe_images(context, image_id=[image_id]) self.assertEqual(expected, result) # describe failed image image['state'] = 'failed' expected['imagesSet'][0]['imageState'] = 'failed' result = image_api.describe_images(base.create_context()) self.assertEqual(expected, result) # describe cases when glance image exists, db item is yet not updated del image['state'] os_image_id = fakes.random_os_id() os_image = { 'id': os_image_id, 'owner': fakes.ID_OS_PROJECT, 'status': 'active', 'is_public': False, 'properties': { 'ec2_id': image_id } } glance.images.list.return_value = [fakes.OSImage(os_image)] expected['imagesSet'] = [{ 'architecture': None, 'creationDate': None, 'description': 'fake desc', 'imageId': image_id, 'imageLocation': 'None (None)', 'imageOwnerId': fakes.ID_OS_PROJECT, 'imageState': 'available', 'imageType': 'machine', 'isPublic': False, 'name': None, 'rootDeviceType': 'instance-store' }] # describe all images result = image_api.describe_images(context) self.assertEqual(expected, result) db_api.update_item.assert_called_once_with( context, tools.update_dict(image, {'os_id': os_image_id})) # describe the image db_api.reset_mock() result = image_api.describe_images(context, image_id=[image_id]) self.assertEqual(expected, result) db_api.update_item.assert_called_once_with( context, tools.update_dict(image, {'os_id': os_image_id}))
def test_describe_images_being_created(self): db_api = self.mock_db() glance = self.mock_glance() context = base.create_context() image_id = fakes.random_ec2_id('ami') image = {'id': image_id, 'os_id': None, 'is_public': False, 'description': 'fake desc'} db_api.set_mock_items(image) db_api.get_public_items.return_value = [] # describe cases when no glance image exists glance.images.list.return_value = [] expected = {'imagesSet': [{'imageId': image_id, 'description': 'fake desc', 'imageOwnerId': fakes.ID_OS_PROJECT, 'imageState': 'pending', 'imageType': 'machine', 'isPublic': False}]} # describe all images result = image_api.describe_images(context) self.assertEqual(expected, result) # describe the image result = image_api.describe_images(context, image_id=[image_id]) self.assertEqual(expected, result) # describe with filter result = image_api.describe_images( context, filter=[{'name': 'name', 'value': 'noname'}]) self.assertEqual({'imagesSet': []}, result) # describe failed image image['state'] = 'failed' expected['imagesSet'][0]['imageState'] = 'failed' result = image_api.describe_images(base.create_context()) self.assertEqual(expected, result) # describe cases when glance image exists, db item is yet not updated del image['state'] os_image_id = fakes.random_os_id() os_image = {'id': os_image_id, 'owner': fakes.ID_OS_PROJECT, 'status': 'active', 'visibility': 'private', 'ec2_id': image_id} glance.images.list.return_value = [fakes.OSImage(os_image)] expected['imagesSet'] = [{ 'architecture': None, 'creationDate': None, 'description': 'fake desc', 'imageId': image_id, 'imageLocation': 'None (None)', 'imageOwnerId': fakes.ID_OS_PROJECT, 'imageState': 'available', 'imageType': 'machine', 'isPublic': False, 'name': None, 'rootDeviceType': 'instance-store'}] # describe all images result = image_api.describe_images(context) self.assertEqual(expected, result) db_api.update_item.assert_called_once_with( context, tools.update_dict(image, {'os_id': os_image_id})) # describe the image db_api.reset_mock() result = image_api.describe_images(context, image_id=[image_id]) self.assertEqual(expected, result) db_api.update_item.assert_called_once_with( context, tools.update_dict(image, {'os_id': os_image_id}))