package org.ovirt.engine.core.itests;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Assert;
import org.junit.Test;
import org.ovirt.engine.core.common.action.ActionGroupsToRoleParameter;
import org.ovirt.engine.core.common.action.RoleWithActionGroupsParameters;
import org.ovirt.engine.core.common.action.RolesParameterBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.action.VdcReturnValueBase;
import org.ovirt.engine.core.common.businessentities.ActionGroup;
import org.ovirt.engine.core.common.businessentities.RoleGroupMap;
import org.ovirt.engine.core.common.businessentities.RoleType;
import org.ovirt.engine.core.common.businessentities.roles;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
/**
* Test class for roles and ActionGroups
*
* @see {@link ActionGroup} , {@link roles}
*
*/
public class RoleActionGroupsTest extends AbstractBackendTest {
private static Guid roleId;
// create role with 1 actionGroup
@Test
public void createRole() {
runAsSuperAdmin();
// TODO Auto-generated method stub
roles role = new roles("test role", Guid.NewGuid(), "role" + testSequence);
role.setType(RoleType.ADMIN);
ArrayList<ActionGroup> groups = new ArrayList<ActionGroup>();
groups.add(ActionGroup.CHANGE_VM_CD);
VdcReturnValueBase action = backend.RunAction(VdcActionType.AddRoleWithActionGroups,
new RoleWithActionGroupsParameters(role, groups));
roleId = (Guid) action.getActionReturnValue();
Assert.assertTrue(action.getSucceeded());
List<RoleGroupMap> getRoleGroupMapsByRoleId = DbFacade.getInstance().getRoleGroupMapDAO().getAllForRole(roleId);
Assert.assertTrue(getRoleGroupMapsByRoleId.size() == 1);
Assert.assertTrue(getRoleGroupMapsByRoleId.get(0).getActionGroup() == ActionGroup.CHANGE_VM_CD);
}
// attach 4 more actionGroups
@Test
public void attachGroups() {
runAsSuperAdmin();
ArrayList<ActionGroup> groups = new ArrayList<ActionGroup>();
groups.add(ActionGroup.CONFIGURE_CLUSTER_NETWORK);
groups.add(ActionGroup.CREATE_CLUSTER);
groups.add(ActionGroup.CREATE_TEMPLATE);
groups.add(ActionGroup.DELETE_HOST);
VdcReturnValueBase action = backend.RunAction(VdcActionType.AttachActionGroupsToRole,
sessionize(new ActionGroupsToRoleParameter(roleId, groups)));
Assert.assertTrue(action.getSucceeded());
List<RoleGroupMap> getRoleGroupMapsByRoleId = DbFacade.getInstance().getRoleGroupMapDAO().getAllForRole(roleId);
Assert.assertTrue(getRoleGroupMapsByRoleId.size() == 5);
}
// detach 2 actionGroups
@Test
public void detachGroups() {
runAsSuperAdmin();
ArrayList<ActionGroup> groups = new ArrayList<ActionGroup>();
groups.add(ActionGroup.CONFIGURE_CLUSTER_NETWORK);
groups.add(ActionGroup.DELETE_HOST);
VdcReturnValueBase action = backend.RunAction(VdcActionType.DetachActionGroupsFromRole,
sessionize(new ActionGroupsToRoleParameter(roleId, groups)));
Assert.assertTrue(action.getSucceeded());
List<RoleGroupMap> getRoleGroupMapsByRoleId = DbFacade.getInstance().getRoleGroupMapDAO().getAllForRole(roleId);
Assert.assertTrue(getRoleGroupMapsByRoleId.size() == 3);
}
// remove the role
@Test
public void removeRole() {
runAsSuperAdmin();
VdcReturnValueBase action = backend.RunAction(VdcActionType.RemoveRole, sessionize(new RolesParameterBase(roleId)));
List<RoleGroupMap> groups = DbFacade.getInstance().getRoleGroupMapDAO().getAllForRole(roleId);
Assert.assertTrue(groups == null || groups.isEmpty());
}
}