package org.ovirt.engine.api.restapi.resource; import java.util.ArrayList; import java.util.Arrays; 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.VdcActionType; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; 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 BackendStorageDomainDiskResourceTest extends AbstractBackendSubResourceTest<Disk, org.ovirt.engine.core.common.businessentities.storage.Disk, BackendStorageDomainDiskResource> { protected static final Guid DISK_ID = GUIDS[1]; protected static final Guid STORAGE_DOMAIN_ID = GUIDS[0]; public BackendStorageDomainDiskResourceTest() { super(new BackendStorageDomainDiskResource(STORAGE_DOMAIN_ID, 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 testGetNotFound() throws Exception { setUriInfo(setUpBasicUriExpectations()); setUpEntityQueryExpectations( VdcQueryType.GetDiskByDiskId, IdQueryParameters.class, new String[] { "Id" }, new Object[] { DISK_ID }, getEntity(1, true)); try { resource.get(); fail("expected WebApplicationException"); } catch (WebApplicationException wae) { verifyNotFoundException(wae); } } @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)); } 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) { return getEntity(index, false); } protected org.ovirt.engine.core.common.businessentities.storage.Disk getEntity(int index, boolean noSD) { DiskImage entity = new DiskImage(); entity.setId(GUIDS[index]); entity.setVolumeFormat(VolumeFormat.RAW); entity.setImageStatus(ImageStatus.OK); entity.setVolumeType(VolumeType.Sparse); entity.setShareable(false); entity.setPropagateErrors(PropagateErrors.On); ArrayList<Guid> storages = new ArrayList<>(); if (!noSD) { storages.addAll(Arrays.asList(GUIDS)); } entity.setStorageIds(storages); 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()); assertEquals(model.getStorageDomains().getStorageDomains().get(0).getId(), STORAGE_DOMAIN_ID.toString()); } }