package org.ovirt.engine.api.restapi.resource;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.WebApplicationException;
import org.junit.Test;
import org.ovirt.engine.api.model.Permit;
import org.ovirt.engine.core.common.action.ActionGroupsToRoleParameter;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.ActionGroup;
import org.ovirt.engine.core.compat.Guid;
public class BackendPermitResourceTest extends AbstractBackendSubResourceTest<Permit, ActionGroup, BackendPermitResource> {
private static final Guid ROLE_ID = new Guid("11111111-1111-1111-1111-111111111111");
public BackendPermitResourceTest() {
super(new BackendPermitResource("1", new BackendPermitsResource(ROLE_ID)));
}
@Test
public void testGetBadId() throws Exception {
doTestGetNotFound("foo");
}
@Test
public void testGetNotFound() throws Exception {
doTestGetNotFound("11111");
}
private void doTestGetNotFound(String id) throws Exception {
BackendPermitResource resource = new BackendPermitResource(id, new BackendPermitsResource(ROLE_ID));
resource.getParent().setMappingLocator(mapperLocator);
try {
resource.get();
fail("expected WebApplicationException");
} catch (WebApplicationException wae) {
assertEquals(404, wae.getResponse().getStatus());
}
}
@Test
public void testGet() {
initResource(resource.parent);
for (ActionGroup action : ActionGroup.values()) {
resource.id = Integer.toString(action.getId());
verifyPermit(resource.get(), action);
}
resource.id = "1"; // reset id, because 'resource' is used for multiple tests.
}
@Test
public void testRemoveBadId() throws Exception {
doTestRemoveNotFound("foo");
}
@Test
public void testRemoveNotFound() throws Exception {
doTestRemoveNotFound("11111");
}
private void doTestRemoveNotFound(String id) throws Exception {
initResource(resource.parent);
resource.id = id;
try {
resource.remove();
fail("expected WebApplicationException");
} catch (WebApplicationException wae) {
verifyNotFoundException(wae);
}
resource.id = "1";
}
@Test
public void testRemove() throws Exception {
initResource(resource.parent);
List<ActionGroup> actionGroups = new ArrayList<>();
actionGroups.add(ActionGroup.forValue(1));
setUriInfo(setUpActionExpectations(VdcActionType.DetachActionGroupsFromRole,
ActionGroupsToRoleParameter.class,
new String[] { "RoleId", "ActionGroups" },
new Object[] { GUIDS[1], actionGroups },
true,
true));
verifyRemove(resource.remove());
}
@Test
public void testRemoveCantDo() throws Exception {
doTestBadRemove(false, true, CANT_DO);
}
@Test
public void testRemoveFailed() throws Exception {
doTestBadRemove(true, false, FAILURE);
}
protected void doTestBadRemove(boolean valid, boolean success, String detail) throws Exception {
initResource(resource.parent);
List<ActionGroup> actionGroups = new ArrayList<>();
actionGroups.add(ActionGroup.forValue(1));
setUriInfo(setUpActionExpectations(VdcActionType.DetachActionGroupsFromRole,
ActionGroupsToRoleParameter.class,
new String[] { "RoleId", "ActionGroups" },
new Object[] { GUIDS[1], actionGroups },
valid,
success));
try {
resource.remove();
fail("expected WebApplicationException");
} catch (WebApplicationException wae) {
verifyFault(wae, detail);
}
}
private void verifyPermit(Permit permit, ActionGroup action) {
assertEquals(Integer.toString(action.getId()), permit.getId());
assertEquals(action.name().toLowerCase(), permit.getName());
assertNotNull(permit.getRole());
assertEquals(ROLE_ID.toString(), permit.getRole().getId());
}
@Override
protected ActionGroup getEntity(int index) {
// TODO Auto-generated method stub
return null;
}
}