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.Response;
import org.junit.Ignore;
import org.junit.Test;
import org.ovirt.engine.api.model.BaseResource;
import org.ovirt.engine.api.model.Permission;
import org.ovirt.engine.core.common.VdcObjectType;
import org.ovirt.engine.core.common.action.PermissionsOperationsParametes;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.DbUser;
import org.ovirt.engine.core.common.businessentities.permissions;
import org.ovirt.engine.core.common.interfaces.SearchType;
import org.ovirt.engine.core.common.queries.MultilevelAdministrationByPermissionIdParameters;
import org.ovirt.engine.core.common.queries.SearchParameters;
import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
public abstract class AbstractBackendAssignedPermissionsResourceTest
extends AbstractBackendCollectionResourceTest<Permission, permissions, BackendAssignedPermissionsResource> {
private VdcQueryType queryType;
private VdcQueryParametersBase queryParams;
private String principalParameterName;
private String queryParameterName;
public AbstractBackendAssignedPermissionsResourceTest(Guid targetId,
VdcQueryType queryType,
VdcQueryParametersBase queryParams,
Class<? extends BaseResource> suggestedParentType,
String principalParameterName,
String queryParameterName) {
super(new BackendAssignedPermissionsResource(targetId,
queryType,
queryParams,
suggestedParentType),
null,
"");
this.queryType = queryType;
this.queryParams = queryParams;
this.principalParameterName = principalParameterName;
this.queryParameterName = queryParameterName;
}
@Test
@Ignore
@Override
public void testQuery() throws Exception {
}
@Test
public void testRemove() throws Exception {
setUpGetEntityExpectations(2, GUIDS[0], getEntity(0));
setUpGetEntityExpectations(VdcQueryType.Search,
SearchParameters.class,
new String[] {"SearchPattern", "SearchTypeValue"},
new Object[] {"users:", SearchType.DBUser},
getUsers());
setUriInfo(setUpActionExpectations(VdcActionType.RemovePermission,
PermissionsOperationsParametes.class,
new String[] { "Permission.Id" },
new Object[] { GUIDS[0] },
true,
true));
verifyRemove(collection.remove(GUIDS[0].toString()));
}
@Test
public void testRemoveCantDo() throws Exception {
setUpGetEntityExpectations(VdcQueryType.Search,
SearchParameters.class,
new String[] {"SearchPattern", "SearchTypeValue"},
new Object[] {"users:", SearchType.DBUser},
getUsers());
doTestBadRemove(false, true, CANT_DO);
}
@Test
public void testRemoveFailed() throws Exception {
setUpGetEntityExpectations(VdcQueryType.Search,
SearchParameters.class,
new String[] {"SearchPattern", "SearchTypeValue"},
new Object[] {"users:", SearchType.DBUser},
getUsers());
doTestBadRemove(true, false, FAILURE);
}
@Test
public void testRemoveNonExistant() throws Exception{
setUpGetEntityExpectations(1, NON_EXISTANT_GUID, null);
control.replay();
try {
collection.remove(NON_EXISTANT_GUID.toString());
fail("expected WebApplicationException");
} catch (WebApplicationException wae) {
assertNotNull(wae.getResponse());
assertEquals(wae.getResponse().getStatus(), 404);
}
}
protected void doTestBadRemove(boolean canDo, boolean success, String detail) throws Exception {
setUpGetEntityExpectations(2, GUIDS[0], getEntity(0));
setUriInfo(setUpActionExpectations(VdcActionType.RemovePermission,
PermissionsOperationsParametes.class,
new String[] { "Permission.Id" },
new Object[] { GUIDS[0] },
canDo,
success));
try {
collection.remove(GUIDS[0].toString());
fail("expected WebApplicationException");
} catch (WebApplicationException wae) {
verifyFault(wae, detail);
}
}
@Test
public void testAddPermission() throws Exception {
setUriInfo(setUpBasicUriExpectations());
setUpCreationExpectations(VdcActionType.AddPermission,
PermissionsOperationsParametes.class,
new String[] { principalParameterName,
"Permission.ad_element_id",
"Permission.ObjectId",
"Permission.role_id" },
new Object[] { GUIDS[1], GUIDS[1], GUIDS[2], GUIDS[3] },
true,
true,
GUIDS[0],
VdcQueryType.GetPermissionById,
MultilevelAdministrationByPermissionIdParameters.class,
new String[] { "PermissionId" },
new Object[] { GUIDS[0] },
getEntity(0));
Permission model = getModel();
Response response = collection.add(model);
assertEquals(201, response.getStatus());
assertTrue(response.getEntity() instanceof Permission);
verifyModel((Permission) response.getEntity(), 0);
}
protected ArrayList<DbUser> getUsers() {
ArrayList<DbUser> users = new ArrayList<DbUser>();
for (int i=0; i < NAMES.length; i++) {
DbUser user = new DbUser();
user.setuser_id(GUIDS[i]);
user.setname(NAMES[i]);
user.setusername(NAMES[i]);
users.add(user);
}
return users;
}
protected abstract Permission getModel();
@Override
protected List<Permission> getCollection() {
return collection.list().getPermissions();
}
@Override
protected void setUpQueryExpectations(String query, Object failure) throws Exception {
assert(query.equals(""));
setUpEntityQueryExpectations(queryType,
queryParams.getClass(),
new String[] { queryParameterName },
new Object[] { GUIDS[1] },
setUpPermissions(),
failure);
control.replay();
}
protected void setUpGetEntityExpectations(int times, Guid entityId, permissions permission) throws Exception {
while (times-->0) {
setUpGetEntityExpectations(VdcQueryType.GetPermissionById,
MultilevelAdministrationByPermissionIdParameters.class,
new String[] { "PermissionId" },
new Object[] { entityId },
permission);
}
}
@Override
protected permissions getEntity(int index) {
permissions permission = new permissions();
permission.setId(GUIDS[index]);
permission.setad_element_id(GUIDS[1]);
permission.setObjectId(GUIDS[2]);
permission.setObjectType(VdcObjectType.StoragePool);
permission.setrole_id(GUIDS[3]);
return permission;
}
protected List<permissions> setUpPermissions() {
List<permissions> perms = new ArrayList<permissions>();
for (int i = 0; i < NAMES.length; i++) {
perms.add(getEntity(i));
}
return perms;
}
@Override
protected void verifyModel(Permission model, int index) {
assertEquals(GUIDS[index].toString(), model.getId());
assertTrue(model.isSetDataCenter());
assertEquals(GUIDS[2].toString(), model.getDataCenter().getId());
assertTrue(model.isSetRole());
assertEquals(GUIDS[3].toString(), model.getRole().getId());
}
}