package org.ovirt.engine.api.restapi.resource;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.WebApplicationException;
import org.junit.Ignore;
import org.junit.Test;
import org.ovirt.engine.api.model.Storage;
import org.ovirt.engine.api.model.StorageType;
import org.ovirt.engine.api.resource.StorageResource;
import org.ovirt.engine.core.common.businessentities.LUNs;
import org.ovirt.engine.core.common.businessentities.storage_domains;
import org.ovirt.engine.core.common.queries.GetDeviceListQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.common.queries.VdsIdParametersBase;
import org.ovirt.engine.core.compat.Guid;
public class BackendHostStorageResourceTest
extends AbstractBackendCollectionResourceTest<Storage, LUNs, BackendHostStorageResource> {
private static final Guid HOST_GUID = GUIDS[0];
private static final int SINGLE_STORAGE_IDX = GUIDS.length - 2;
private static final String VG_ID_PREFIX = "vg";
public BackendHostStorageResourceTest() {
super(new BackendHostStorageResource(HOST_GUID.toString()), null, null);
}
@Test
@Ignore
@Override
public void testQuery() throws Exception {
}
@Test
public void testGetNotFound() throws Exception {
StorageResource subresource = collection.getStorageSubResource("foo");
setUriInfo(setUpBasicUriExpectations());
setUpQueryExpectations("");
try {
subresource.get();
fail("expected WebApplicationException");
} catch (WebApplicationException wae) {
verifyNotFoundException(wae);
}
}
@Test
public void testGet() throws Exception {
StorageResource subresource = collection.getStorageSubResource(GUIDS[SINGLE_STORAGE_IDX].toString());
setUriInfo(setUpBasicUriExpectations());
setUpQueryExpectations("", null, false);
verifyModel(subresource.get(), SINGLE_STORAGE_IDX);
}
@Test
public void testGetVg() throws Exception {
StorageResource subresource = collection.getStorageSubResource(VG_ID_PREFIX + GUIDS[SINGLE_STORAGE_IDX].toString());
setUriInfo(setUpBasicUriExpectations());
setUpQueryExpectations("");
verifyModel(subresource.get(), SINGLE_STORAGE_IDX);
}
@Override
protected void setUpQueryExpectations(String query, Object failure) throws Exception {
setUpQueryExpectations(query, failure, true);
}
protected void setUpQueryExpectations(String query, Object failure, boolean vgs_query) throws Exception {
assert(query.equals(""));
setUpEntityQueryExpectations(VdcQueryType.GetDeviceList,
GetDeviceListQueryParameters.class,
new String[] { "VdsId" },
new Object[] { HOST_GUID },
setUpLuns(),
failure);
if (vgs_query && failure == null) {
setUpEntityQueryExpectations(VdcQueryType.GetVgList,
VdsIdParametersBase.class,
new String[] { "VdsId" },
new Object[] { HOST_GUID },
setUpVgs(),
failure);
}
control.replay();
}
private List<LUNs> setUpLuns() {
List<LUNs> luns = new ArrayList<LUNs>();
for (int i = 0; i < NAMES.length; i++) {
luns.add(getEntity(i));
}
return luns;
}
private List<storage_domains> setUpVgs() {
List<storage_domains> vgs = new ArrayList<storage_domains>();
for (int i = 0; i < NAMES.length; i++) {
vgs.add(getVgEntity(i));
}
return vgs;
}
@Override
protected LUNs getEntity(int index) {
LUNs entity = new LUNs(GUIDS[index].toString(), null, null);
entity.setLunType(org.ovirt.engine.core.common.businessentities.StorageType.ISCSI);
return entity;
}
protected storage_domains getVgEntity(int index) {
storage_domains entity = new storage_domains();
entity.setstorage(VG_ID_PREFIX + GUIDS[index].toString());
entity.setstorage_type(org.ovirt.engine.core.common.businessentities.StorageType.ISCSI);
return entity;
}
@Override
protected void verifyModel(Storage model, int index) {
assertEquals(StorageType.ISCSI.value(), model.getType());
if (!model.isSetVolumeGroup()) {
assertEquals(GUIDS[index].toString(), model.getId());
assertEquals(1, model.getLogicalUnits().size());
assertEquals(GUIDS[index].toString(), model.getLogicalUnits().get(0).getId());
} else {
assertEquals(VG_ID_PREFIX + GUIDS[index].toString(), model.getId());
assertEquals(VG_ID_PREFIX + GUIDS[index].toString(), model.getVolumeGroup().getId());
}
verifyLinks(model);
}
@Override
protected void verifyCollection(List<Storage> collection) throws Exception {
assertNotNull(collection);
assertEquals(NAMES.length * 2, collection.size());
for (int i = 0; i < (NAMES.length * 2); i++) {
verifyModel(collection.get(i), i % NAMES.length);
}
}
@Override
protected List<Storage> getCollection() {
return collection.list().getStorage();
}
}