package org.ovirt.engine.api.restapi.resource; import java.util.ArrayList; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import org.junit.Test; import org.ovirt.engine.api.model.Action; import org.ovirt.engine.api.model.Disk; import org.ovirt.engine.api.model.StorageDomain; import org.ovirt.engine.core.common.action.ExportRepoImageParameters; import org.ovirt.engine.core.common.action.MoveDisksParameters; import org.ovirt.engine.core.common.action.MoveOrCopyImageGroupParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.businessentities.storage.ImageOperation; import org.ovirt.engine.core.common.businessentities.storage.ImageStatus; import org.ovirt.engine.core.common.businessentities.storage.PropagateErrors; import org.ovirt.engine.core.common.businessentities.storage.VolumeFormat; import org.ovirt.engine.core.common.businessentities.storage.VolumeType; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; public class BackendDiskResourceTest extends AbstractBackendSubResourceTest<Disk, org.ovirt.engine.core.common.businessentities.storage.Disk, BackendDiskResource>{ protected static final Guid DISK_ID = GUIDS[1]; public BackendDiskResourceTest() { super(new BackendDiskResource(DISK_ID.toString())); } @Test public void testGet() { setUriInfo(setUpBasicUriExpectations()); setUpEntityQueryExpectations( VdcQueryType.GetDiskByDiskId, IdQueryParameters.class, new String[]{"Id"}, new Object[]{DISK_ID}, getEntity(1)); Disk disk = resource.get(); verifyModelSpecific(disk, 1); verifyLinks(disk); } @Test public void testExport() throws Exception { setUriInfo(setUpActionExpectations(VdcActionType.ExportRepoImage, ExportRepoImageParameters.class, new String[]{"ImageGroupID", "DestinationDomainId"}, new Object[]{DISK_ID, GUIDS[3]}, true, true, null, null, true)); Action action = new Action(); action.setStorageDomain(new StorageDomain()); action.getStorageDomain().setId(GUIDS[3].toString()); verifyActionResponse(resource.export(action)); } @Test public void testMoveById() throws Exception { setUpEntityQueryExpectations(VdcQueryType.GetDiskByDiskId, IdQueryParameters.class, new String[] {"Id"}, new Object[] {DISK_ID}, getEntity(1)); setUriInfo(setUpActionExpectations(VdcActionType.MoveDisks, MoveDisksParameters.class, new String[] {}, new Object[] {}, true, true, null, null, true)); verifyActionResponse(resource.move(setUpParams(false)), "disks/" + DISK_ID, false); } @Test public void testCopyById() throws Exception { setUpEntityQueryExpectations(VdcQueryType.GetDiskByDiskId, IdQueryParameters.class, new String[] {"Id"}, new Object[] {DISK_ID}, getEntity(3)); setUriInfo(setUpActionExpectations(VdcActionType.MoveOrCopyDisk, MoveOrCopyImageGroupParameters.class, new String[] {"ImageId", "ImageGroupID", "SourceDomainId", "StorageDomainId", "Operation"}, new Object[] {GUIDS[1], GUIDS[3], Guid.Empty, GUIDS[3], ImageOperation.Copy}, true, true, null, null, true)); verifyActionResponse(resource.copy(setUpParams(false)), "disks/" + DISK_ID, false); } private void verifyActionResponse(Response r) throws Exception { verifyActionResponse(r, "/disks/" + DISK_ID, false); } @Test public void testBadGuid() throws Exception { try { new BackendStorageDomainVmResource(null, "foo"); fail("expected WebApplicationException"); } catch (WebApplicationException wae) { verifyNotFoundException(wae); } } @Test public void testIncompleteExport() throws Exception { setUriInfo(setUpBasicUriExpectations()); try { resource.export(new Action()); fail("expected WebApplicationException on incomplete parameters"); } catch (WebApplicationException wae) { verifyIncompleteException(wae, "Action", "export", "storageDomain.id|name"); } } @Override protected org.ovirt.engine.core.common.businessentities.storage.Disk getEntity(int index) { DiskImage entity = new DiskImage(); entity.setId(GUIDS[index]); entity.setImageId(GUIDS[1]); entity.setVolumeFormat(VolumeFormat.RAW); entity.setImageStatus(ImageStatus.OK); entity.setVolumeType(VolumeType.Sparse); entity.setShareable(false); entity.setPropagateErrors(PropagateErrors.On); ArrayList<Guid> sdIds = new ArrayList<>(); sdIds.add(Guid.Empty); entity.setStorageIds(sdIds); return setUpStatisticalEntityExpectations(entity); } static org.ovirt.engine.core.common.businessentities.storage.Disk setUpStatisticalEntityExpectations(DiskImage entity) { entity.setReadRate(1); entity.setWriteRate(2); entity.setReadLatency(3.0); entity.setWriteLatency(4.0); entity.setFlushLatency(5.0); return entity; } @Override protected void verifyModel(Disk model, int index) { verifyModelSpecific(model, index); verifyLinks(model); } static void verifyModelSpecific(Disk model, int index) { assertEquals(GUIDS[index].toString(), model.getId()); assertFalse(model.isSetVm()); assertTrue(model.isSparse()); assertTrue(model.isPropagateErrors()); } private Action setUpParams(boolean byName) { Action action = new Action(); StorageDomain sd = new StorageDomain(); if (byName) { sd.setName(NAMES[2]); } else { sd.setId(GUIDS[3].toString()); } action.setStorageDomain(sd); return action; } }