package org.ovirt.engine.api.restapi.resource;
import java.util.ArrayList;
import java.util.List;
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.Group;
import org.ovirt.engine.api.model.Permission;
import org.ovirt.engine.api.model.User;
import org.ovirt.engine.core.common.VdcObjectType;
import org.ovirt.engine.core.common.action.PermissionsOperationsParameters;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.aaa.DbUser;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
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,
org.ovirt.engine.core.common.businessentities.Permission,
BackendAssignedPermissionsResource> {
private Guid targetId;
private Class<? extends BaseResource> targetType;
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.targetId = targetId;
this.targetType = suggestedParentType;
this.queryType = queryType;
this.queryParams = queryParams;
this.principalParameterName = principalParameterName;
this.queryParameterName = queryParameterName;
}
@Test
@Ignore
@Override
public void testQuery() throws Exception {
}
@Test
public void testAddPermission() throws Exception {
setUriInfo(setUpBasicUriExpectations());
setUpCreationExpectations(VdcActionType.AddPermission,
PermissionsOperationsParameters.class,
new String[] { principalParameterName,
"Permission.AdElementId",
"Permission.ObjectId",
"Permission.RoleId" },
new Object[] { GUIDS[1], chooseElementId(), chooseObjectId(), GUIDS[3] },
true,
true,
GUIDS[0],
VdcQueryType.GetPermissionById,
IdQueryParameters.class,
new String[] { "Id" },
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);
}
/**
* When adding a permission this method decides what should be the identifier of the user or group.
*/
private Guid chooseElementId() {
// If the resource being tested is the collection of permissions associated to a user or group then the
// identifier is that of the user or group of that resource, otherwise we use a fixed identifier:
if (targetType == User.class || targetType == Group.class) {
return targetId;
}
return GUIDS[1];
}
/**
* When adding a permission this method decides what should be the identifier of the object.
*/
private Guid chooseObjectId() {
// If the resource being tested is the collection of permissions associated to a user or group then we use a
// fixed identifier, otherwise we have to use the identifier of the object corresponding to the resource:
if (targetType != User.class && targetType != Group.class) {
return targetId;
}
return GUIDS[2];
}
protected DbUser getUserByIdx(int idx) {
DbUser user = new DbUser();
user.setId(GUIDS[idx]);
user.setFirstName(NAMES[idx]);
user.setLoginName(NAMES[idx]);
return user;
}
protected abstract Permission getModel();
@Override
protected List<Permission> getCollection() {
return collection.list().getPermissions();
}
@Override
protected void setUpQueryExpectations(String query, Object failure) throws Exception {
assertEquals("", query);
List<org.ovirt.engine.core.common.businessentities.Permission> perms = setUpPermissions();
setUpEntityQueryExpectations(queryType,
queryParams.getClass(),
new String[] { queryParameterName },
new Object[] { GUIDS[1] },
perms,
failure);
}
protected void setUpQueryExpectations(String query, Object failure, Guid adElementId) throws Exception {
assertEquals("", query);
setUpEntityQueryExpectations(queryType,
queryParams.getClass(),
new String[] { queryParameterName },
new Object[] { GUIDS[1] },
setUpPermissionsWithAdElementId(adElementId),
failure);
}
@Override
protected org.ovirt.engine.core.common.businessentities.Permission getEntity(int index) {
org.ovirt.engine.core.common.businessentities.Permission permission =
new org.ovirt.engine.core.common.businessentities.Permission();
permission.setId(GUIDS[index]);
permission.setAdElementId(GUIDS[1]);
permission.setObjectId(GUIDS[2]);
permission.setObjectType(VdcObjectType.StoragePool);
permission.setRoleId(GUIDS[3]);
return permission;
}
protected List<org.ovirt.engine.core.common.businessentities.Permission> setUpPermissions() {
List<org.ovirt.engine.core.common.businessentities.Permission> perms = new ArrayList<>();
for (int i = 0; i < NAMES.length; i++) {
perms.add(getEntity(i));
}
return perms;
}
protected List<org.ovirt.engine.core.common.businessentities.Permission> setUpPermissionsWithAdElementId(
Guid adElementId) {
List<org.ovirt.engine.core.common.businessentities.Permission> perms = new ArrayList<>();
for (int i = 0; i < NAMES.length; i++) {
org.ovirt.engine.core.common.businessentities.Permission entity = getEntity(i);
entity.setAdElementId(adElementId);
perms.add(entity);
}
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());
}
}