package org.ovirt.engine.api.restapi.resource;
import java.util.LinkedList;
import java.util.List;
import javax.ws.rs.core.Response;
import org.junit.Test;
import org.ovirt.engine.api.model.Disk;
import org.ovirt.engine.api.model.DiskFormat;
import org.ovirt.engine.api.model.StorageDomain;
import org.ovirt.engine.api.model.StorageDomains;
import org.ovirt.engine.core.common.action.AddDiskParameters;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.AsyncTaskStatus;
import org.ovirt.engine.core.common.businessentities.AsyncTaskStatusEnum;
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.interfaces.SearchType;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
import org.ovirt.engine.core.common.queries.VdcQueryType;
public class BackendDisksResourceTest extends AbstractBackendCollectionResourceTest<Disk, org.ovirt.engine.core.common.businessentities.storage.Disk, BackendDisksResource> {
public BackendDisksResourceTest() {
super(new BackendDisksResource(), SearchType.Disk, "Disks : ");
}
@Override
protected List<Disk> getCollection() {
return collection.list().getDisks();
}
@Override
protected org.ovirt.engine.core.common.businessentities.storage.Disk getEntity(int index) {
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);
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;
}
@Test
public void testAdd() throws Exception {
setUriInfo(setUpBasicUriExpectations());
setUpHttpHeaderExpectations("Expect", "201-created");
setUpEntityQueryExpectations(VdcQueryType.GetDiskByDiskId,
IdQueryParameters.class,
new String[]{ "Id" },
new Object[]{ GUIDS[0] },
getEntity(0));
setUpEntityQueryExpectations(VdcQueryType.GetStorageDomainById,
IdQueryParameters.class,
new String[] { "Id" },
new Object[] { GUIDS[2] },
getStorageDomains().get(0));
Disk model = getModel();
setUpCreationExpectations(VdcActionType.AddDisk,
AddDiskParameters.class,
new String[] {"StorageDomainId"},
new Object[] {GUIDS[2]},
true,
true,
GUIDS[0],
asList(GUIDS[3]),
asList(new AsyncTaskStatus(AsyncTaskStatusEnum.finished)),
VdcQueryType.GetDiskByDiskId,
IdQueryParameters.class,
new String[] {"Id"},
new Object[] {GUIDS[0]},
getEntity(0));
Response response = collection.add(model);
assertEquals(201, response.getStatus());
assertTrue(response.getEntity() instanceof Disk);
verifyModel((Disk)response.getEntity(), 0);
assertNull(((Disk)response.getEntity()).getCreationStatus());
}
@Test
public void testAddIdentifyStorageDomainByName() throws Exception {
setUriInfo(setUpBasicUriExpectations());
setUpHttpHeaderExpectations("Expect", "201-created");
setUpEntityQueryExpectations(VdcQueryType.GetDiskByDiskId,
IdQueryParameters.class,
new String[]{ "Id" },
new Object[]{ GUIDS[0] },
getEntity(0));
setUpEntityQueryExpectations(VdcQueryType.GetStorageDomainById,
IdQueryParameters.class,
new String[] { "Id" },
new Object[] { GUIDS[2] },
getStorageDomains().get(0));
Disk model = getModel();
model.getStorageDomains().getStorageDomains().get(0).setId(null);
model.getStorageDomains().getStorageDomains().get(0).setName("Storage_Domain_1");
setUpEntityQueryExpectations(VdcQueryType.GetAllStorageDomains,
VdcQueryParametersBase.class,
new String[] {},
new Object[] {},
getStorageDomains());
setUpCreationExpectations(VdcActionType.AddDisk,
AddDiskParameters.class,
new String[] {},
new Object[] {},
true,
true,
GUIDS[0],
asList(GUIDS[3]),
asList(new AsyncTaskStatus(AsyncTaskStatusEnum.finished)),
VdcQueryType.GetDiskByDiskId,
IdQueryParameters.class,
new String[] {"Id"},
new Object[] {GUIDS[0]},
getEntity(0));
Response response = collection.add(model);
assertEquals(201, response.getStatus());
assertTrue(response.getEntity() instanceof Disk);
verifyModel((Disk)response.getEntity(), 0);
assertNull(((Disk)response.getEntity()).getCreationStatus());
}
private List<org.ovirt.engine.core.common.businessentities.StorageDomain> getStorageDomains() {
List<org.ovirt.engine.core.common.businessentities.StorageDomain> sds = new LinkedList<>();
org.ovirt.engine.core.common.businessentities.StorageDomain sd = new org.ovirt.engine.core.common.businessentities.StorageDomain();
sd.setStorageName("Storage_Domain_1");
sd.setId(GUIDS[2]);
sds.add(sd);
return sds;
}
static Disk getModel() {
Disk model = new Disk();
model.setProvisionedSize(1024 * 1024L);
model.setFormat(DiskFormat.COW);
model.setSparse(true);
model.setShareable(false);
model.setPropagateErrors(true);
model.setStorageDomains(new StorageDomains());
model.getStorageDomains().getStorageDomains().add(new StorageDomain());
model.getStorageDomains().getStorageDomains().get(0).setId(GUIDS[2].toString());
return model;
}
@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());
}
}