package org.ovirt.engine.api.restapi.resource;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.UriInfo;
import org.junit.Test;
import org.ovirt.engine.api.model.Disk;
import org.ovirt.engine.api.model.Fault;
import org.ovirt.engine.api.model.StorageDomain;
import org.ovirt.engine.api.resource.DeviceResource;
import org.ovirt.engine.api.resource.ReadOnlyDeviceResource;
import org.ovirt.engine.core.common.businessentities.storage_domains;
import org.ovirt.engine.core.common.queries.GetStorageDomainsByVmTemplateIdQueryParameters;
import org.ovirt.engine.core.common.queries.GetVmTemplatesDisksParameters;
import org.ovirt.engine.core.common.queries.VdcQueryType;
public class BackendReadOnlyDisksResourceTest
extends AbstractBackendDisksResourceTest<BackendReadOnlyDisksResource> {
public BackendReadOnlyDisksResourceTest() {
super(new BackendReadOnlyDisksResource(PARENT_ID,
VdcQueryType.GetVmTemplatesDisks,
new GetVmTemplatesDisksParameters(PARENT_ID)),
VdcQueryType.GetVmTemplatesDisks,
new GetVmTemplatesDisksParameters(PARENT_ID),
"Id");
}
@Test
public void testSubResourceLocator() throws Exception {
control.replay();
Object subResource = collection.getDeviceSubResource(GUIDS[0].toString());
assertFalse(subResource instanceof DeviceResource);
assertTrue(subResource instanceof ReadOnlyDeviceResource);
}
@Test
public void testSubResourceLocatorBadGuid() throws Exception {
control.replay();
try {
collection.getDeviceSubResource("foo");
fail("expected WebApplicationException");
} catch (WebApplicationException wae) {
verifyNotFoundException(wae);
}
}
@Test
@Override
public void testList() throws Exception {
UriInfo uriInfo = setUpUriExpectations(null);
setUpEntityQueryExpectations(1, null);
setUpGetStorageDomainsQueryExpectations(1);
control.replay();
collection.setUriInfo(uriInfo);
List<Disk> disks = getCollection();
for (Disk disk : disks) {
assertNotNull(disk.getStorageDomains());
List<StorageDomain> storageDomains = disk.getStorageDomains().getStorageDomains();
assertEquals(storageDomains.size(), 2);
assertEquals(storageDomains.get(0).getId(), GUIDS[2].toString());
assertEquals(storageDomains.get(1).getId(), GUIDS[3].toString());
}
verifyCollection(disks);
}
@Test
public void testListFailure() throws Exception {
UriInfo uriInfo = setUpUriExpectations(null);
setUpEntityQueryExpectations(1, FAILURE);
setUpGetStorageDomainsQueryExpectations(1);
control.replay();
collection.setUriInfo(uriInfo);
try {
getCollection();
fail("expected WebApplicationException");
} catch (WebApplicationException wae) {
assertTrue(wae.getResponse().getEntity() instanceof Fault);
assertEquals(mockl10n(FAILURE), ((Fault) wae.getResponse().getEntity()).getDetail());
}
}
@Test
public void testListCrash() throws Exception {
UriInfo uriInfo = setUpUriExpectations(null);
Throwable t = new RuntimeException(FAILURE);
setUpEntityQueryExpectations(1, t);
setUpGetStorageDomainsQueryExpectations(1);
control.replay();
collection.setUriInfo(uriInfo);
try {
getCollection();
fail("expected WebApplicationException");
} catch (WebApplicationException wae) {
verifyFault(wae, BACKEND_FAILED_SERVER_LOCALE, t);
}
}
@Test
public void testListCrashClientLocale() throws Exception {
UriInfo uriInfo = setUpUriExpectations(null);
locales.add(CLIENT_LOCALE);
Throwable t = new RuntimeException(FAILURE);
setUpEntityQueryExpectations(1, t);
setUpGetStorageDomainsQueryExpectations(1);
control.replay();
collection.setUriInfo(uriInfo);
try {
getCollection();
fail("expected WebApplicationException");
} catch (WebApplicationException wae) {
verifyFault(wae, BACKEND_FAILED_CLIENT_LOCALE, t);
} finally {
locales.clear();
}
}
private int setUpGetStorageDomainsQueryExpectations(int times) {
while (times-- > 0) {
setUpEntityQueryExpectations(VdcQueryType.GetStorageDomainsByVmTemplateId,
GetStorageDomainsByVmTemplateIdQueryParameters.class,
new String[] { "Id" },
new Object[] { PARENT_ID },
getStorageDomains(),
null);
}
return times;
}
protected List<storage_domains> getStorageDomains() {
List<storage_domains> storageDomains = new ArrayList<storage_domains>();
storage_domains storageDomain = new storage_domains();
storageDomain.setid(GUIDS[2]);
storageDomains.add(storageDomain);
storageDomain = new storage_domains();
storageDomain.setid(GUIDS[3]);
storageDomains.add(storageDomain);
return storageDomains;
}
}