def test_s3_parse_manifest(self): self.set_mock_db_items(fakes.DB_IMAGE_AKI_1, fakes.DB_IMAGE_ARI_1) self.db_api.get_item_by_id.return_value = None self.glance.images.get.side_effect = ( tools.get_by_1st_arg_getter({ fakes.ID_OS_IMAGE_AKI_1: fakes.OSImage(fakes.OS_IMAGE_AKI_1), fakes.ID_OS_IMAGE_ARI_1: fakes.OSImage(fakes.OS_IMAGE_ARI_1)})) metadata, image_parts, key, iv = image_api._s3_parse_manifest( base.create_context(), AMI_MANIFEST_XML) expected_metadata = { 'disk_format': 'ami', 'container_format': 'ami', 'properties': {'architecture': 'x86_64', 'kernel_id': fakes.ID_OS_IMAGE_AKI_1, 'ramdisk_id': fakes.ID_OS_IMAGE_ARI_1, 'mappings': [ {"device": "sda1", "virtual": "ami"}, {"device": "/dev/sda1", "virtual": "root"}, {"device": "sda2", "virtual": "ephemeral0"}, {"device": "sda3", "virtual": "swap"}]}} self.assertThat(metadata, matchers.DictMatches(expected_metadata, orderless_lists=True)) self.assertThat(image_parts, matchers.ListMatches(['foo'])) self.assertEqual('foo', key) self.assertEqual('foo', iv) self.db_api.get_items_ids.assert_any_call( mock.ANY, 'aki', item_ids=(fakes.ID_EC2_IMAGE_AKI_1,), item_os_ids=None) self.db_api.get_items_ids.assert_any_call( mock.ANY, 'ari', item_ids=(fakes.ID_EC2_IMAGE_ARI_1,), item_os_ids=None)
def test_get_metadata_integral(self, keystone, network_interface_api, security_group_api): service_catalog = mock.MagicMock() service_catalog.get_data.return_value = [] keystone.return_value = mock.Mock( auth_user_id="fake_user_id", auth_tenant_id=fakes.ID_OS_PROJECT, auth_token="fake_token", service_catalog=service_catalog, ) fake_context = context.get_os_admin_context() self.set_mock_db_items( fakes.DB_INSTANCE_1, fakes.DB_INSTANCE_2, fakes.DB_NETWORK_INTERFACE_1, fakes.DB_NETWORK_INTERFACE_2, fakes.DB_IMAGE_1, fakes.DB_IMAGE_2, fakes.DB_IMAGE_ARI_1, fakes.DB_IMAGE_AKI_1, fakes.DB_VOLUME_1, fakes.DB_VOLUME_2, fakes.DB_VOLUME_3, ) self.nova_admin.servers.list.return_value = [ fakes.OSInstance_full(fakes.OS_INSTANCE_1), fakes.OSInstance_full(fakes.OS_INSTANCE_2), ] self.nova_admin.servers.get.side_effect = tools.get_by_1st_arg_getter( { fakes.ID_OS_INSTANCE_1: fakes.OSInstance_full(fakes.OS_INSTANCE_1), fakes.ID_OS_INSTANCE_2: fakes.OSInstance_full(fakes.OS_INSTANCE_2), } ) keypair = mock.Mock(public_key=fakes.PUBLIC_KEY_KEY_PAIR) keypair.configure_mock(name=fakes.NAME_KEY_PAIR) self.nova.keypairs.get.return_value = keypair self.cinder.volumes.list.return_value = [ fakes.OSVolume(fakes.OS_VOLUME_1), fakes.OSVolume(fakes.OS_VOLUME_2), fakes.OSVolume(fakes.OS_VOLUME_3), ] network_interface_api.describe_network_interfaces.side_effect = lambda *args, **kwargs: copy.deepcopy( {"networkInterfaceSet": [fakes.EC2_NETWORK_INTERFACE_1, fakes.EC2_NETWORK_INTERFACE_2]} ) security_group_api.describe_security_groups.return_value = { "securityGroupInfo": [fakes.EC2_SECURITY_GROUP_1, fakes.EC2_SECURITY_GROUP_3] } retval = api.get_metadata_item( fake_context, ["latest", "meta-data", "instance-id"], fakes.ID_OS_INSTANCE_1, fakes.IP_NETWORK_INTERFACE_2 ) self.assertEqual(fakes.ID_EC2_INSTANCE_1, retval) retval = api.get_metadata_item( fake_context, ["latest", "meta-data", "instance-id"], fakes.ID_OS_INSTANCE_2, "10.200.1.15" ) self.assertEqual(fakes.ID_EC2_INSTANCE_2, retval)
def test_s3_parse_manifest(self): db_api = self.mock_db() glance = self.mock_glance() db_api.set_mock_items(fakes.DB_IMAGE_AKI_1, fakes.DB_IMAGE_ARI_1) glance.images.get.side_effect = (tools.get_by_1st_arg_getter({ fakes.ID_OS_IMAGE_AKI_1: fakes.OSImage(fakes.OS_IMAGE_AKI_1), fakes.ID_OS_IMAGE_ARI_1: fakes.OSImage(fakes.OS_IMAGE_ARI_1) })) metadata, image_parts, key, iv = image_api._s3_parse_manifest( base.create_context(), AMI_MANIFEST_XML) expected_metadata = { 'disk_format': 'ami', 'container_format': 'ami', 'properties': { 'architecture': 'x86_64', 'kernel_id': fakes.ID_OS_IMAGE_AKI_1, 'ramdisk_id': fakes.ID_OS_IMAGE_ARI_1, 'mappings': [{ "device": "sda1", "virtual": "ami" }, { "device": "/dev/sda1", "virtual": "root" }, { "device": "sda2", "virtual": "ephemeral0" }, { "device": "sda3", "virtual": "swap" }] } } self.assertThat( metadata, matchers.DictMatches(expected_metadata, orderless_lists=True)) self.assertThat(image_parts, matchers.ListMatches(['foo'])) self.assertEqual('foo', key) self.assertEqual('foo', iv) db_api.get_items_ids.assert_any_call( mock.ANY, 'aki', item_ids=(fakes.ID_EC2_IMAGE_AKI_1, ), item_os_ids=None) db_api.get_items_ids.assert_any_call( mock.ANY, 'ari', item_ids=(fakes.ID_EC2_IMAGE_ARI_1, ), item_os_ids=None)
def test_get_metadata_integral(self, keystone, network_interface_api, security_group_api): service_catalog = mock.MagicMock() service_catalog.get_data.return_value = [] keystone.return_value = mock.Mock(auth_user_id='fake_user_id', auth_tenant_id=fakes.ID_OS_PROJECT, auth_token='fake_token', service_catalog=service_catalog) fake_context = context.get_os_admin_context() self.set_mock_db_items(fakes.DB_INSTANCE_1, fakes.DB_INSTANCE_2, fakes.DB_NETWORK_INTERFACE_1, fakes.DB_NETWORK_INTERFACE_2, fakes.DB_IMAGE_1, fakes.DB_IMAGE_2, fakes.DB_IMAGE_ARI_1, fakes.DB_IMAGE_AKI_1, fakes.DB_VOLUME_1, fakes.DB_VOLUME_2, fakes.DB_VOLUME_3) self.nova_admin.servers.list.return_value = [ fakes.OSInstance_full(fakes.OS_INSTANCE_1), fakes.OSInstance_full(fakes.OS_INSTANCE_2) ] self.nova_admin.servers.get.side_effect = tools.get_by_1st_arg_getter({ fakes.ID_OS_INSTANCE_1: fakes.OSInstance_full(fakes.OS_INSTANCE_1), fakes.ID_OS_INSTANCE_2: fakes.OSInstance_full(fakes.OS_INSTANCE_2) }) keypair = mock.Mock(public_key=fakes.PUBLIC_KEY_KEY_PAIR) keypair.configure_mock(name=fakes.NAME_KEY_PAIR) self.nova.keypairs.get.return_value = keypair self.cinder.volumes.list.return_value = [ fakes.OSVolume(fakes.OS_VOLUME_1), fakes.OSVolume(fakes.OS_VOLUME_2), fakes.OSVolume(fakes.OS_VOLUME_3) ] network_interface_api.describe_network_interfaces.side_effect = ( lambda *args, **kwargs: copy.deepcopy({ 'networkInterfaceSet': [fakes.EC2_NETWORK_INTERFACE_1, fakes.EC2_NETWORK_INTERFACE_2] })) security_group_api.describe_security_groups.return_value = { 'securityGroupInfo': [fakes.EC2_SECURITY_GROUP_1, fakes.EC2_SECURITY_GROUP_3] } retval = api.get_metadata_item(fake_context, ['latest', 'meta-data', 'instance-id'], fakes.ID_OS_INSTANCE_1, fakes.IP_NETWORK_INTERFACE_2) self.assertEqual(fakes.ID_EC2_INSTANCE_1, retval) retval = api.get_metadata_item(fake_context, ['latest', 'meta-data', 'instance-id'], fakes.ID_OS_INSTANCE_2, '10.200.1.15') self.assertEqual(fakes.ID_EC2_INSTANCE_2, retval)
def test_get_metadata_integral(self, network_interface_api, security_group_api, create_region): fake_context = base.create_context(is_os_admin=True) self.set_mock_db_items(fakes.DB_INSTANCE_1, fakes.DB_INSTANCE_2, fakes.DB_NETWORK_INTERFACE_1, fakes.DB_NETWORK_INTERFACE_2, fakes.DB_IMAGE_1, fakes.DB_IMAGE_2, fakes.DB_IMAGE_ARI_1, fakes.DB_IMAGE_AKI_1, fakes.DB_VOLUME_1, fakes.DB_VOLUME_2, fakes.DB_VOLUME_3) self.nova_admin.servers.list.return_value = [ fakes.OSInstance_full(fakes.OS_INSTANCE_1), fakes.OSInstance_full(fakes.OS_INSTANCE_2) ] self.nova_admin.servers.get.side_effect = tools.get_by_1st_arg_getter({ fakes.ID_OS_INSTANCE_1: fakes.OSInstance_full(fakes.OS_INSTANCE_1), fakes.ID_OS_INSTANCE_2: fakes.OSInstance_full(fakes.OS_INSTANCE_2) }) self.nova_admin.keypairs._get.return_value = (fakes.NovaKeyPair( fakes.OS_KEY_PAIR)) self.cinder.volumes.list.return_value = [ fakes.OSVolume(fakes.OS_VOLUME_1), fakes.OSVolume(fakes.OS_VOLUME_2), fakes.OSVolume(fakes.OS_VOLUME_3) ] network_interface_api.describe_network_interfaces.side_effect = ( lambda *args, **kwargs: copy.deepcopy({ 'networkInterfaceSet': [fakes.EC2_NETWORK_INTERFACE_1, fakes.EC2_NETWORK_INTERFACE_2] })) security_group_api.describe_security_groups.return_value = { 'securityGroupInfo': [fakes.EC2_SECURITY_GROUP_1, fakes.EC2_SECURITY_GROUP_3] } create_region.get.return_value = cache_core.NO_VALUE retval = api.get_metadata_item(fake_context, ['latest', 'meta-data', 'instance-id'], fakes.ID_OS_INSTANCE_1, fakes.IP_NETWORK_INTERFACE_2, create_region) self.assertEqual(fakes.ID_EC2_INSTANCE_1, retval) retval = api.get_metadata_item(fake_context, ['latest', 'meta-data', 'instance-id'], fakes.ID_OS_INSTANCE_2, '10.200.1.15', create_region) self.assertEqual(fakes.ID_EC2_INSTANCE_2, retval)
def test_get_metadata_integral(self, network_interface_api, security_group_api, create_region): fake_context = base.create_context(is_os_admin=True) self.set_mock_db_items( fakes.DB_INSTANCE_1, fakes.DB_INSTANCE_2, fakes.DB_NETWORK_INTERFACE_1, fakes.DB_NETWORK_INTERFACE_2, fakes.DB_IMAGE_1, fakes.DB_IMAGE_2, fakes.DB_IMAGE_ARI_1, fakes.DB_IMAGE_AKI_1, fakes.DB_VOLUME_1, fakes.DB_VOLUME_2, fakes.DB_VOLUME_3) self.nova_admin.servers.list.return_value = [ fakes.OSInstance_full(fakes.OS_INSTANCE_1), fakes.OSInstance_full(fakes.OS_INSTANCE_2)] self.nova_admin.servers.get.side_effect = tools.get_by_1st_arg_getter({ fakes.ID_OS_INSTANCE_1: fakes.OSInstance_full(fakes.OS_INSTANCE_1), fakes.ID_OS_INSTANCE_2: fakes.OSInstance_full(fakes.OS_INSTANCE_2) }) self.nova_admin.keypairs._get.return_value = ( fakes.NovaKeyPair(fakes.OS_KEY_PAIR)) self.cinder.volumes.list.return_value = [ fakes.OSVolume(fakes.OS_VOLUME_1), fakes.OSVolume(fakes.OS_VOLUME_2), fakes.OSVolume(fakes.OS_VOLUME_3)] network_interface_api.describe_network_interfaces.side_effect = ( lambda *args, **kwargs: copy.deepcopy({ 'networkInterfaceSet': [fakes.EC2_NETWORK_INTERFACE_1, fakes.EC2_NETWORK_INTERFACE_2]})) security_group_api.describe_security_groups.return_value = { 'securityGroupInfo': [fakes.EC2_SECURITY_GROUP_1, fakes.EC2_SECURITY_GROUP_3]} create_region.get.return_value = cache_core.NO_VALUE retval = api.get_metadata_item( fake_context, ['latest', 'meta-data', 'instance-id'], fakes.ID_OS_INSTANCE_1, fakes.IP_NETWORK_INTERFACE_2, create_region) self.assertEqual(fakes.ID_EC2_INSTANCE_1, retval) retval = api.get_metadata_item( fake_context, ['latest', 'meta-data', 'instance-id'], fakes.ID_OS_INSTANCE_2, '10.200.1.15', create_region) self.assertEqual(fakes.ID_EC2_INSTANCE_2, retval)
def test_register_image_by_bdm(self, get_os_image): self.glance.images.create.return_value = (fakes.OSImage( fakes.OS_IMAGE_2)) self.cinder.volume_snapshots.get.side_effect = ( tools.get_by_1st_arg_getter( { fakes.ID_OS_SNAPSHOT_1: (fakes.OSSnapshot(fakes.OS_SNAPSHOT_1)) }, notfound_exception=cinder_exception.NotFound(404))) self.db_api.add_item.side_effect = (tools.get_db_api_add_item( fakes.ID_EC2_IMAGE_2)) self.set_mock_db_items(fakes.DB_SNAPSHOT_1, fakes.DB_SNAPSHOT_2, fakes.DB_IMAGE_AKI_1, fakes.DB_IMAGE_ARI_1) get_os_image.side_effect = [ fakes.OSImage(fakes.OS_IMAGE_AKI_1), fakes.OSImage(fakes.OS_IMAGE_ARI_1) ] resp = self.execute( 'RegisterImage', { 'RootDeviceName': fakes.ROOT_DEVICE_NAME_IMAGE_2, 'Name': 'fake_name', 'KernelId': fakes.ID_EC2_IMAGE_AKI_1, 'RamdiskId': fakes.ID_EC2_IMAGE_ARI_1, 'BlockDeviceMapping.1.DeviceName': fakes.ROOT_DEVICE_NAME_IMAGE_2, 'BlockDeviceMapping.1.Ebs.SnapshotId': fakes.ID_EC2_SNAPSHOT_1, 'BlockDeviceMapping.2.DeviceName': '/dev/vdf', 'BlockDeviceMapping.2.Ebs.VolumeSize': '100', 'BlockDeviceMapping.2.Ebs.DeleteOnTermination': 'False', 'BlockDeviceMapping.3.DeviceName': '/dev/vdg', 'BlockDeviceMapping.3.Ebs.SnapshotId': fakes.ID_EC2_SNAPSHOT_1, 'BlockDeviceMapping.3.Ebs.VolumeSize': '55', 'BlockDeviceMapping.3.Ebs.DeleteOnTermination': 'True', 'BlockDeviceMapping.4.DeviceName': '/dev/vdh', 'BlockDeviceMapping.4.Ebs.SnapshotId': fakes.ID_EC2_SNAPSHOT_2 }) self.assertThat( resp, matchers.DictMatches({'imageId': fakes.ID_EC2_IMAGE_2})) self.db_api.add_item.assert_called_once_with(mock.ANY, 'ami', { 'os_id': fakes.ID_OS_IMAGE_2, 'is_public': False, 'description': None }) self.assertEqual(1, self.glance.images.create.call_count) self.assertEqual((), self.glance.images.create.call_args[0]) self.assertIn('properties', self.glance.images.create.call_args[1]) self.assertIsInstance( self.glance.images.create.call_args[1]['properties'], dict) bdm = self.glance.images.create.call_args[1]['properties'].pop( 'block_device_mapping', 'null') self.assertEqual( { 'is_public': False, 'size': 0, 'name': 'fake_name', 'properties': { 'root_device_name': fakes.ROOT_DEVICE_NAME_IMAGE_2, 'kernel_id': fakes.ID_OS_IMAGE_AKI_1, 'ramdisk_id': fakes.ID_OS_IMAGE_ARI_1, 'bdm_v2': True } }, self.glance.images.create.call_args[1]) self.assertEqual([{ 'boot_index': 0, 'delete_on_termination': True, 'destination_type': 'volume', 'device_name': fakes.ROOT_DEVICE_NAME_IMAGE_2, 'source_type': 'snapshot', 'snapshot_id': fakes.ID_OS_SNAPSHOT_1, 'volume_size': 1 }, { 'boot_index': -1, 'delete_on_termination': False, 'destination_type': 'volume', 'device_name': '/dev/vdf', 'source_type': 'blank', 'volume_size': 100 }, { 'boot_index': -1, 'delete_on_termination': True, 'destination_type': 'volume', 'device_name': '/dev/vdg', 'source_type': 'snapshot', 'snapshot_id': fakes.ID_OS_SNAPSHOT_1, 'volume_size': 55 }, { 'boot_index': -1, 'delete_on_termination': True, 'destination_type': 'volume', 'device_name': '/dev/vdh', 'source_type': 'snapshot', 'snapshot_id': fakes.ID_OS_SNAPSHOT_2 }], json.loads(bdm)) get_os_image.assert_has_calls([ mock.call(mock.ANY, fakes.ID_EC2_IMAGE_AKI_1), mock.call(mock.ANY, fakes.ID_EC2_IMAGE_ARI_1) ]) self.cinder.volume_snapshots.get.assert_any_call( fakes.ID_OS_SNAPSHOT_1)
def test_register_image_by_bdm(self, get_os_image): self.glance.images.create.return_value = ( fakes.OSImage(fakes.OS_IMAGE_2)) self.glance.images.upload.return_value = ( fakes.OSImage(fakes.OS_IMAGE_2)) self.cinder.volume_snapshots.get.side_effect = ( tools.get_by_1st_arg_getter( {fakes.ID_OS_SNAPSHOT_1: ( fakes.OSSnapshot(fakes.OS_SNAPSHOT_1))}, notfound_exception=cinder_exception.NotFound(404))) self.db_api.add_item.side_effect = ( tools.get_db_api_add_item(fakes.ID_EC2_IMAGE_2)) self.set_mock_db_items(fakes.DB_SNAPSHOT_1, fakes.DB_SNAPSHOT_2, fakes.DB_IMAGE_AKI_1, fakes.DB_IMAGE_ARI_1) get_os_image.side_effect = [fakes.OSImage(fakes.OS_IMAGE_AKI_1), fakes.OSImage(fakes.OS_IMAGE_ARI_1)] resp = self.execute( 'RegisterImage', {'RootDeviceName': fakes.ROOT_DEVICE_NAME_IMAGE_2, 'Name': 'fake_name', 'KernelId': fakes.ID_EC2_IMAGE_AKI_1, 'RamdiskId': fakes.ID_EC2_IMAGE_ARI_1, 'BlockDeviceMapping.1.DeviceName': fakes.ROOT_DEVICE_NAME_IMAGE_2, 'BlockDeviceMapping.1.Ebs.SnapshotId': fakes.ID_EC2_SNAPSHOT_1, 'BlockDeviceMapping.2.DeviceName': '/dev/vdf', 'BlockDeviceMapping.2.Ebs.VolumeSize': '100', 'BlockDeviceMapping.2.Ebs.DeleteOnTermination': 'False', 'BlockDeviceMapping.3.DeviceName': '/dev/vdg', 'BlockDeviceMapping.3.Ebs.SnapshotId': fakes.ID_EC2_SNAPSHOT_1, 'BlockDeviceMapping.3.Ebs.VolumeSize': '55', 'BlockDeviceMapping.3.Ebs.DeleteOnTermination': 'True', 'BlockDeviceMapping.4.DeviceName': '/dev/vdh', 'BlockDeviceMapping.4.Ebs.SnapshotId': fakes.ID_EC2_SNAPSHOT_2}) self.assertThat(resp, matchers.DictMatches( {'imageId': fakes.ID_EC2_IMAGE_2})) self.db_api.add_item.assert_called_once_with( mock.ANY, 'ami', {'os_id': fakes.ID_OS_IMAGE_2, 'is_public': False, 'description': None}) self.assertEqual(1, self.glance.images.create.call_count) self.assertEqual((), self.glance.images.create.call_args[0]) self.assertIsInstance( self.glance.images.create.call_args[1], dict) bdm = self.glance.images.create.call_args[1].pop( 'block_device_mapping', 'null') self.assertEqual( {'visibility': 'private', 'name': 'fake_name', 'kernel_id': fakes.ID_OS_IMAGE_AKI_1, 'ramdisk_id': fakes.ID_OS_IMAGE_ARI_1, 'root_device_name': fakes.ROOT_DEVICE_NAME_IMAGE_2, 'container_format': 'bare', 'disk_format': 'raw', 'bdm_v2': 'True'}, self.glance.images.create.call_args[1]) self.assertEqual([{'boot_index': 0, 'delete_on_termination': True, 'destination_type': 'volume', 'device_name': fakes.ROOT_DEVICE_NAME_IMAGE_2, 'source_type': 'snapshot', 'snapshot_id': fakes.ID_OS_SNAPSHOT_1, 'volume_size': 1}, {'boot_index': -1, 'delete_on_termination': False, 'destination_type': 'volume', 'device_name': '/dev/vdf', 'source_type': 'blank', 'volume_size': 100}, {'boot_index': -1, 'delete_on_termination': True, 'destination_type': 'volume', 'device_name': '/dev/vdg', 'source_type': 'snapshot', 'snapshot_id': fakes.ID_OS_SNAPSHOT_1, 'volume_size': 55}, {'boot_index': -1, 'delete_on_termination': True, 'destination_type': 'volume', 'device_name': '/dev/vdh', 'source_type': 'snapshot', 'snapshot_id': fakes.ID_OS_SNAPSHOT_2}], json.loads(bdm)) get_os_image.assert_has_calls( [mock.call(mock.ANY, fakes.ID_EC2_IMAGE_AKI_1), mock.call(mock.ANY, fakes.ID_EC2_IMAGE_ARI_1)]) self.cinder.volume_snapshots.get.assert_any_call( fakes.ID_OS_SNAPSHOT_1)