package org.ovirt.engine.core.itests;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import junit.framework.Assert;
import org.junit.Test;
import org.ovirt.engine.core.common.VdcObjectType;
import org.ovirt.engine.core.common.action.AdElementParametersBase;
import org.ovirt.engine.core.common.action.PermissionsOperationsParametes;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.action.VdcReturnValueBase;
import org.ovirt.engine.core.common.businessentities.AdUser;
import org.ovirt.engine.core.common.businessentities.DbUser;
import org.ovirt.engine.core.common.businessentities.permissions;
import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.common.users.VdcUser;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.bll.PredefinedRoles;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
/**
* Test class for specific permissions commands.
*
*/
public class PermissionTest extends AbstractBackendTest {
/**
* Test adding permission for a random user Steps are: - choose a random user from the active directory - activate
* the test's basic setup to create entities to work with. Choose the newly created DataCenter ID - create
* permissions with user Id with role DATA_CENTER_ADMIN on the created DataCenter
*
* result - test succeeded if the AddPermissionCommand returned true
*/
@Test
public void addPermission() {
runAsSuperAdmin();
DbUser user = new DbUser(new AdUser("jnuit-testUser", "123345", Guid.NewGuid(), "example.com"));
DbFacade.getInstance().getDbUserDAO().save(user);
permissions perms = new permissions(user.getuser_id(), Guid.NewGuid(), PredefinedRoles.DATA_CENTER_ADMIN
.getId());
perms.setObjectId(getBasicSetup().getDataCenter().getId());
perms.setObjectType(VdcObjectType.StoragePool);
PermissionsOperationsParametes parameters = new PermissionsOperationsParametes(perms);
vdcUserFrom(user, parameters);
VdcReturnValueBase runAction = backend.RunAction(VdcActionType.AddPermission, parameters);
assertTrue(runAction.getSucceeded());
VdcReturnValueBase removeUserAction =
backend.runInternalAction(VdcActionType.RemoveUser,
sessionize(new AdElementParametersBase(user.getuser_id())));
assertTrue(removeUserAction.getSucceeded());
}
/**
* Test adding system permission for a random user Steps are: - choose a random user from the active directory -
* activate the test's basic setup to create entities to work with. Choose the newly created DataCenter ID - create
* permissions with user Id with role DATA_CENTER_ADMIN using AddSystemPermissionsCommand
*
* result - test succeeded if the AddSystemPermissionsCommand returned true
*/
@Test
public void addSystemPermission() {
runAsSuperAdmin();
DbUser user = new DbUser(new AdUser("jnuit-testUser1", "123345", Guid.NewGuid(), "example.com"));
DbFacade.getInstance().getDbUserDAO().save(user);
permissions perms = new permissions(user.getuser_id(), Guid.NewGuid(), PredefinedRoles.DATA_CENTER_ADMIN
.getId());
PermissionsOperationsParametes parameters = new PermissionsOperationsParametes(perms);
vdcUserFrom(user, parameters);
VdcReturnValueBase runAction = backend.RunAction(VdcActionType.AddSystemPermission, parameters);
assertTrue(runAction.getSucceeded());
VdcReturnValueBase removeUserAction =
backend.runInternalAction(VdcActionType.RemoveUser,
sessionize(new AdElementParametersBase(user.getuser_id())));
assertTrue(removeUserAction.getSucceeded());
}
private VdcUser vdcUserFrom(DbUser user, PermissionsOperationsParametes parameters) {
VdcUser vdcUser = new VdcUser();
vdcUser.setDomainControler(user.getdomain());
vdcUser.setUserName(user.getusername());
vdcUser.setUserId(user.getuser_id());
parameters.setVdcUser(vdcUser);
return vdcUser;
}
/**
* Test getSystemPermissionsQuery
*
* result - success if the query returned a list with records. If the former test {@link #addSystemPermission()}
* failed we should expect this to fail as well if there no system permissions in the system already
*/
@Test
public void getSystemPermissions() {
runAsSuperAdmin();
VdcQueryReturnValue runQuery = backend
.RunQuery(VdcQueryType.GetSystemPermissions, sessionize(new VdcQueryParametersBase()));
Assert.assertTrue(((ArrayList<permissions>) runQuery.getReturnValue()).size() > 0);
}
}