package org.ovirt.engine.api.restapi.resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.ws.rs.core.Response;
import org.junit.Ignore;
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.api.restapi.types.DiskMapper;
import org.ovirt.engine.core.common.action.AddDiskParameters;
import org.ovirt.engine.core.common.action.RegisterDiskParameters;
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.StoragePool;
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.GetUnregisteredDiskQueryParameters;
import org.ovirt.engine.core.common.queries.GetUnregisteredDisksQueryParameters;
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 BackendStorageDomainDisksResourceTest extends AbstractBackendCollectionResourceTest<Disk, org.ovirt.engine.core.common.businessentities.storage.Disk, BackendStorageDomainDisksResource> {
protected static final Guid storagePoolId = new Guid("44444444-4444-4444-4444-444444444444");
public BackendStorageDomainDisksResourceTest() {
super(new BackendStorageDomainDisksResource(GUIDS[3]), 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));
Disk model = getModel();
setUpCreationExpectations(VdcActionType.AddDisk,
AddDiskParameters.class,
new String[] {"StorageDomainId"},
new Object[] {GUIDS[3]},
true,
true,
GUIDS[0],
asList(storagePoolId),
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 testAddUnregistered() throws Exception {
setUriInfo(addMatrixParameterExpectations(setUpBasicUriExpectations(), BackendStorageDomainDisksResource.UNREGISTERED));
setUpHttpHeaderExpectations("Expect", "201-created");
StoragePool storagePool = new StoragePool();
storagePool.setId(storagePoolId);
setUpEntityQueryExpectations(VdcQueryType.GetStoragePoolsByStorageDomainId,
IdQueryParameters.class,
new String[] { "Id" },
new Object[] {GUIDS[3]},
Collections.singletonList(storagePool));
setUpEntityQueryExpectations(VdcQueryType.GetUnregisteredDisk,
GetUnregisteredDiskQueryParameters.class,
new String[] {"DiskId", "StorageDomainId", "StoragePoolId"},
new Object[] {GUIDS[0], GUIDS[3], storagePoolId},
getEntity(0));
Disk model = getModel();
org.ovirt.engine.core.common.businessentities.storage.Disk imageToRegister = new DiskMapper().map(model, getEntity(0));
// imageToRegister.setDiskAlias("alias");
setUpCreationExpectations(VdcActionType.RegisterDisk,
RegisterDiskParameters.class,
new String[] { "DiskImage" },
new Object[] { imageToRegister },
true,
true,
GUIDS[0],
VdcQueryType.GetDiskByDiskId,
IdQueryParameters.class,
new String[] {"Id"},
new Object[] {GUIDS[0]},
getEntity(0));
model.setId(GUIDS[0].toString());
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));
Disk model = getModel();
model.getStorageDomains().getStorageDomains().get(0).setId(null);
model.getStorageDomains().getStorageDomains().get(0).setName("Storage_Domain_1");
setUpCreationExpectations(VdcActionType.AddDisk,
AddDiskParameters.class,
new String[] {},
new Object[] {},
true,
true,
GUIDS[0],
asList(storagePoolId),
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());
}
@Override
@Test
@Ignore
public void testQuery() throws Exception {
}
@Test
@Override
public void testList() throws Exception {
collection.setUriInfo(setUpBasicUriExpectations());
List<org.ovirt.engine.core.common.businessentities.storage.Disk> entities = new ArrayList<>();
for (int i = 0; i < NAMES.length; i++) {
entities.add(getEntity(i));
}
setUpEntityQueryExpectations(VdcQueryType.GetAllDisksByStorageDomainId,
IdQueryParameters.class,
new String[] { "Id" },
new Object[] {GUIDS[3]},
entities);
verifyCollection(getCollection());
}
@Test
public void testListUnregistered() throws Exception {
setUriInfo(addMatrixParameterExpectations(setUpBasicUriExpectations(), BackendStorageDomainDisksResource.UNREGISTERED));
StoragePool storagePool = new StoragePool();
storagePool.setId(storagePoolId);
setUpEntityQueryExpectations(VdcQueryType.GetStoragePoolsByStorageDomainId,
IdQueryParameters.class,
new String[] { "Id" },
new Object[] {GUIDS[3]},
Collections.singletonList(storagePool));
List<org.ovirt.engine.core.common.businessentities.storage.Disk> entities = new ArrayList<>();
for (int i = 0; i < NAMES.length; i++) {
entities.add(getEntity(i));
}
setUpEntityQueryExpectations(VdcQueryType.GetUnregisteredDisks,
GetUnregisteredDisksQueryParameters.class,
new String[] {"StorageDomainId", "StoragePoolId"},
new Object[] {GUIDS[3], storagePoolId},
entities);
verifyCollection(getCollection());
}
@Test
@Override
@Ignore
public void testListFailure() throws Exception {
}
@Test
@Override
@Ignore
public void testListCrash() throws Exception {
}
@Test
@Override
@Ignore
public void testListCrashClientLocale() throws Exception {
}
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());
}
}