package org.cagrid.gridgrouper.service.impl;
import edu.internet2.middleware.grouper.GrouperBaseTest;
import net.sf.hibernate.exception.ExceptionUtils;
import org.cagrid.gridgrouper.model.GroupCompositeType;
import org.cagrid.gridgrouper.model.GroupDescriptor;
import org.cagrid.gridgrouper.model.GroupPrivilegeType;
import org.cagrid.gridgrouper.model.MemberDescriptor;
import org.cagrid.gridgrouper.model.MemberFilter;
import org.cagrid.gridgrouper.model.MembershipType;
import org.cagrid.gridgrouper.model.StemDescriptor;
import org.cagrid.gridgrouper.service.exception.InsufficientPrivilegeException;
import org.cagrid.gridgrouper.service.impl.testutils.Utils;
import org.cagrid.gridgrouper.service.impl.tools.GridGrouperBootstrapper;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.junit.Assert.*;
/**
* @author <A href="mailto:langella@bmi.osu.edu">Stephen Langella </A>
* @author <A href="mailto:oster@bmi.osu.edu">Scott Oster </A>
* @author <A href="mailto:hastings@bmi.osu.edu">Shannon Hastings </A>
* @version $Id: ArgumentManagerTable.java,v 1.2 2004/10/15 16:35:16 langella
* Exp $
*/
public class TestMembers extends GrouperBaseTest {
private String USER_A = "/O=OSU/OU=BMI/OU=caGrid/OU=Dorian/OU=cagrid05/OU=IdP [1]/CN=user a";
private String USER_B = "/O=OSU/OU=BMI/OU=caGrid/OU=Dorian/OU=cagrid05/OU=IdP [1]/CN=user b";
private String USER_C = "/O=OSU/OU=BMI/OU=caGrid/OU=Dorian/OU=cagrid05/OU=IdP [1]/CN=user c";
private String USER_D = "/O=OSU/OU=BMI/OU=caGrid/OU=Dorian/OU=cagrid05/OU=IdP [1]/CN=user d";
@Test
public void testGetMember() {
try {
try {
grouper.getMember(SUPER_USER, USER_A);
fail("Should not be able to get member!!!");
} catch (InsufficientPrivilegeException f) {
}
GridGrouperBootstrapper.addAdminMember(SUPER_USER);
MemberDescriptor des = grouper.getMember(SUPER_USER, USER_A);
assertNotNull(des);
assertEquals(USER_A, des.getSubjectId());
assertEquals(USER_A, des.getSubjectName());
try {
grouper.getMember(USER_A, USER_B);
fail("Should not be able to get member!!!");
} catch (InsufficientPrivilegeException f) {
}
des = null;
des = grouper.getMember(USER_B, USER_B);
assertNotNull(des);
assertEquals(USER_B, des.getSubjectId());
assertEquals(USER_B, des.getSubjectName());
} catch (Exception e) {
fail(ExceptionUtils.getFullStackTrace(e));
}
}
@Test
public void testGetMemberGroups() {
try {
List<GroupDescriptor> groups = grouper.getMembersGroups(SUPER_USER, USER_A, null);
assertEquals("The super user should not see any of the member's groups yet", 0, groups.size());
GridGrouperBootstrapper.addAdminMember(SUPER_USER);
Map expected = new HashMap();
expected.clear();
verifyMembersGroups(SUPER_USER, USER_A, null, expected);
StemDescriptor root = grouper.getStem(SUPER_USER, Utils.getRootStemIdentifier());
assertNotNull(root);
assertEquals(root.getName(), Utils.getRootStemIdentifier().getStemName());
String testStem = "TestStem";
StemDescriptor test = grouper.addChildStem(SUPER_USER, Utils.getRootStemIdentifier(), testStem, testStem);
final String groupExtensionA = "mygroupa";
final String groupDisplayExtensionA = "My Group A";
GroupDescriptor grpa = createAndCheckGroup(test, groupExtensionA, groupDisplayExtensionA, 1);
final String groupExtensionB = "mygroupb";
final String groupDisplayExtensionB = "My Group B";
GroupDescriptor grpb = createAndCheckGroup(test, groupExtensionB, groupDisplayExtensionB, 2);
grouper.revokeGroupPrivilege(SUPER_USER, Utils.getGroupIdentifier(grpb), GROUPER_ALL,
GroupPrivilegeType.READ);
grouper.revokeGroupPrivilege(SUPER_USER, Utils.getGroupIdentifier(grpb), GROUPER_ALL,
GroupPrivilegeType.VIEW);
grouper.addMember(SUPER_USER, Utils.getGroupIdentifier(grpa), USER_A);
expected.clear();
expected.put(USER_A, getGridMember(USER_A));
grouper.addMember(SUPER_USER, Utils.getGroupIdentifier(grpa), USER_C);
expected.put(USER_C, getGridMember(USER_C));
verifyMembers(grpa, MemberFilter.ALL, expected);
grouper.addMember(SUPER_USER, Utils.getGroupIdentifier(grpb), USER_B);
expected.clear();
expected.put(USER_B, getGridMember(USER_B));
grouper.addMember(SUPER_USER, Utils.getGroupIdentifier(grpb), USER_C);
expected.put(USER_C, getGridMember(USER_C));
verifyMembers(SUPER_USER, grpb, MemberFilter.ALL, expected);
groups = grouper.getMembersGroups(USER_D, USER_B, null);
assertEquals("USER_D should not see USER_B's group. GrouperAll does not have READ or VIEW for GroupB", 0, groups.size());
expected.clear();
expected.put(grpa.getName(), grpa);
verifyMembersGroups(USER_A, USER_A, null, expected);
expected.clear();
expected.put(grpa.getName(), grpa);
verifyMembersGroups(SUPER_USER, USER_A, null, expected);
groups = grouper.getMembersGroups(USER_D, USER_B, null);
assertEquals("UUSER_D should not see USER_B's group. GrouperAll does not have READ or VIEW for GroupB", 0, groups.size());
expected.clear();
expected.put(grpb.getName(), grpb);
verifyMembersGroups(USER_B, USER_B, null, expected);
expected.clear();
expected.put(grpb.getName(), grpb);
verifyMembersGroups(SUPER_USER, USER_B, null, expected);
groups = grouper.getMembersGroups(USER_D, USER_C, null);
assertEquals("USER_D should only see 1 of USER_C's groups", 1, groups.size());
assertEquals(grpa.getName(), groups.get(0).getName());
expected.clear();
expected.put(grpa.getName(), grpa);
expected.put(grpb.getName(), grpb);
verifyMembersGroups(USER_C, USER_C, null, expected);
expected.clear();
expected.put(grpa.getName(), grpa);
expected.put(grpb.getName(), grpb);
verifyMembersGroups(SUPER_USER, USER_C, null, expected);
groups = grouper.getMembersGroups(USER_C, USER_D, null);
assertEquals("USER_C should not see any groups for USER_D. USER_D has not been added to any groups.", 0, groups.size());
expected.clear();
verifyMembersGroups(USER_D, USER_D, null, expected);
expected.clear();
verifyMembersGroups(SUPER_USER, USER_D, null, expected);
} catch (Exception e) {
fail(e.getMessage());
}
}
@Test
public void testGetMembersGroupsByAssociation() {
try {
GridGrouperBootstrapper.addAdminMember(SUPER_USER);
Map expected = new HashMap();
expected.clear();
verifyMembersGroups(SUPER_USER, USER_A, null, expected);
StemDescriptor root = grouper.getStem(SUPER_USER, Utils.getRootStemIdentifier());
assertNotNull(root);
assertEquals(root.getName(), Utils.getRootStemIdentifier().getStemName());
String testStem = "TestStem";
StemDescriptor test = grouper.addChildStem(SUPER_USER, Utils.getRootStemIdentifier(), testStem, testStem);
final String groupExtensionA = "mygroupa";
final String groupDisplayExtensionA = "My Group A";
GroupDescriptor grpa = createAndCheckGroup(test, groupExtensionA, groupDisplayExtensionA, 1);
final String groupExtensionB = "mygroupb";
final String groupDisplayExtensionB = "My Group B";
GroupDescriptor grpb = createAndCheckGroup(test, groupExtensionB, groupDisplayExtensionB, 2);
grouper.revokeGroupPrivilege(SUPER_USER, Utils.getGroupIdentifier(grpb), GROUPER_ALL,
GroupPrivilegeType.READ);
grouper.revokeGroupPrivilege(SUPER_USER, Utils.getGroupIdentifier(grpb), GROUPER_ALL,
GroupPrivilegeType.VIEW);
grouper.addMember(SUPER_USER, Utils.getGroupIdentifier(grpa), USER_A);
expected.clear();
expected.put(USER_A, getGridMember(USER_A));
grouper.addMember(SUPER_USER, Utils.getGroupIdentifier(grpa), USER_C);
expected.put(USER_C, getGridMember(USER_C));
verifyMembers(grpa, MemberFilter.ALL, expected);
grouper.addMember(SUPER_USER, Utils.getGroupIdentifier(grpb), USER_B);
expected.clear();
expected.put(USER_B, getGridMember(USER_B));
grouper.addMember(SUPER_USER, Utils.getGroupIdentifier(grpb), USER_C);
expected.put(USER_C, getGridMember(USER_C));
grouper.addMember(SUPER_USER, Utils.getGroupIdentifier(grpb), grpa.getUUID());
expected.put(grpa.getUUID(), getGroupMember(grpa.getUUID()));
expected.put(USER_A, getGridMember(USER_A));
verifyMembers(SUPER_USER, grpb, MemberFilter.ALL, expected);
// Test Groups for USER_A
// All groups that USER_A is a member of
expected.clear();
expected.put(grpa.getName(), grpa);
expected.put(grpb.getName(), grpb);
verifyMembersGroups(SUPER_USER, USER_A, MembershipType.ANY, expected);
// Groups that USER_A is an immediate member of
expected.clear();
expected.put(grpa.getName(), grpa);;
verifyMembersGroups(SUPER_USER, USER_A, MembershipType.IMMEDIATE_MEMBERS, expected);
// Groups that USER_A is an effective member of
expected.clear();
expected.put(grpb.getName(), grpb);
verifyMembersGroups(SUPER_USER, USER_A, MembershipType.EFFECTIVE_MEMBERS, expected);
// Test Groups for USER_B
// All groups that USER_B is a member of
expected.clear();
expected.put(grpb.getName(), grpb);
verifyMembersGroups(SUPER_USER, USER_B, MembershipType.ANY, expected);
// Groups that USER_B is an immediate member of
expected.clear();
expected.put(grpb.getName(), grpb);
verifyMembersGroups(SUPER_USER, USER_B, MembershipType.IMMEDIATE_MEMBERS, expected);
// Groups that USER_B is an effective member of
expected.clear();
verifyMembersGroups(SUPER_USER, USER_B, MembershipType.EFFECTIVE_MEMBERS, expected);
// Test Groups for USER_C
// All groups that USER_C is a member of
expected.clear();
expected.put(grpa.getName(), grpa);
expected.put(grpb.getName(), grpb);
verifyMembersGroups(SUPER_USER, USER_C, MembershipType.ANY, expected);
// Groups that USER_C is an immediate member of
expected.clear();
expected.put(grpa.getName(), grpa);
expected.put(grpb.getName(), grpb);
verifyMembersGroups(SUPER_USER, USER_C, MembershipType.IMMEDIATE_MEMBERS, expected);
// Groups that USER_C is an effective member of
expected.clear();
expected.put(grpb.getName(), grpb);
verifyMembersGroups(SUPER_USER, USER_C, MembershipType.EFFECTIVE_MEMBERS, expected);
} catch (Exception e) {
fail(e.getMessage());
}
}
@Test
public void testGetMembersGroupsByComposite() {
try {
GridGrouperBootstrapper.addAdminMember(SUPER_USER);
Map expected = new HashMap();
expected.clear();
verifyMembersGroups(SUPER_USER, USER_A, null, expected);
StemDescriptor root = grouper.getStem(SUPER_USER, Utils.getRootStemIdentifier());
assertNotNull(root);
assertEquals(root.getName(), Utils.getRootStemIdentifier().getStemName());
String testStem = "TestStem";
StemDescriptor test = grouper.addChildStem(SUPER_USER, Utils.getRootStemIdentifier(), testStem, testStem);
final String groupExtensionA = "mygroupa";
final String groupDisplayExtensionA = "My Group A";
GroupDescriptor grpa = createAndCheckGroup(test, groupExtensionA, groupDisplayExtensionA, 1);
final String groupExtensionB = "mygroupb";
final String groupDisplayExtensionB = "My Group B";
GroupDescriptor grpb = createAndCheckGroup(test, groupExtensionB, groupDisplayExtensionB, 2);
final String compositeExtension = "compositegroup";
final String compositeDisplayExtension = "Composite Group";
GroupDescriptor compgrp = createAndCheckGroup(test, compositeExtension, compositeDisplayExtension, 3);
grouper.addMember(SUPER_USER, Utils.getGroupIdentifier(grpa), USER_A);
expected.clear();
expected.put(USER_A, getGridMember(USER_A));
grouper.addMember(SUPER_USER, Utils.getGroupIdentifier(grpa), USER_C);
expected.put(USER_C, getGridMember(USER_C));
grouper.addMember(SUPER_USER, Utils.getGroupIdentifier(grpa), USER_D);
expected.put(USER_D, getGridMember(USER_D));
verifyMembers(grpa, MemberFilter.ALL, expected);
grouper.addMember(SUPER_USER, Utils.getGroupIdentifier(grpb), USER_B);
expected.clear();
expected.put(USER_B, getGridMember(USER_B));
grouper.addMember(SUPER_USER, Utils.getGroupIdentifier(grpb), USER_C);
expected.put(USER_C, getGridMember(USER_C));
grouper.addMember(SUPER_USER, Utils.getGroupIdentifier(grpb), USER_D);
expected.put(USER_D, getGridMember(USER_D));
verifyMembers(SUPER_USER, grpb, MemberFilter.ALL, expected);
grouper.addCompositeMember(SUPER_USER, GroupCompositeType.INTERSECTION, Utils.getGroupIdentifier(compgrp), Utils
.getGroupIdentifier(grpa), Utils.getGroupIdentifier(grpb));
expected.clear();
expected.put(USER_C, getGridMember(USER_C));
expected.put(USER_D, getGridMember(USER_D));
verifyMembers(SUPER_USER, compgrp, MemberFilter.ALL, expected);
// Test Groups for USER_A
// All groups that USER_A is a member of
expected.clear();
expected.put(grpa.getName(), grpa);
verifyMembersGroups(SUPER_USER, USER_A, MembershipType.ANY, expected);
// Groups that USER_A is an immediate member of
expected.clear();
expected.put(grpa.getName(), grpa);
verifyMembersGroups(SUPER_USER, USER_A, MembershipType.IMMEDIATE_MEMBERS, expected);
// Groups that USER_A is an effective member of
expected.clear();
verifyMembersGroups(SUPER_USER, USER_A, MembershipType.EFFECTIVE_MEMBERS, expected);
// Test Groups for USER_B
// All groups that USER_B is a member of
expected.clear();
expected.put(grpb.getName(), grpb);
verifyMembersGroups(SUPER_USER, USER_B, MembershipType.ANY, expected);
// Groups that USER_B is an immediate member of
expected.clear();
expected.put(grpb.getName(), grpb);
verifyMembersGroups(SUPER_USER, USER_B, MembershipType.IMMEDIATE_MEMBERS, expected);
// Groups that USER_B is an effective member of
expected.clear();
verifyMembersGroups(SUPER_USER, USER_B, MembershipType.EFFECTIVE_MEMBERS, expected);
// Test Groups for USER_C
// All groups that USER_C is a member of
expected.clear();
expected.put(grpa.getName(), grpa);
expected.put(grpb.getName(), grpb);
expected.put(compgrp.getName(), compgrp);
verifyMembersGroups(SUPER_USER, USER_C, MembershipType.ANY, expected);
// Groups that USER_C is an immediate member of
expected.clear();
expected.put(grpa.getName(), grpa);
expected.put(grpb.getName(), grpb);
verifyMembersGroups(SUPER_USER, USER_C, MembershipType.IMMEDIATE_MEMBERS, expected);
// Groups that USER_C is an effective member of
expected.clear();
verifyMembersGroups(SUPER_USER, USER_C, MembershipType.EFFECTIVE_MEMBERS, expected);
// Test Groups for USER_D
// All groups that USER_D is a member of
expected.clear();
expected.put(grpa.getName(), grpa);
expected.put(grpb.getName(), grpb);
expected.put(compgrp.getName(), compgrp);
verifyMembersGroups(SUPER_USER, USER_D, MembershipType.ANY, expected);
// Groups that USER_C is an immediate member of
expected.clear();
expected.put(grpa.getName(), grpa);
expected.put(grpb.getName(), grpb);
verifyMembersGroups(SUPER_USER, USER_D, MembershipType.IMMEDIATE_MEMBERS, expected);
// Groups that USER_C is an effective member of
expected.clear();
verifyMembersGroups(SUPER_USER, USER_D, MembershipType.EFFECTIVE_MEMBERS, expected);
} catch (Exception e) {
fail(e.getMessage());
}
}
@Test
public void testGetMembers() {
try {
GridGrouperBootstrapper.addAdminMember(SUPER_USER);
grouper.getStem(SUPER_USER, Utils.getRootStemIdentifier());
String testStem = "TestStem";
StemDescriptor test = grouper.addChildStem(SUPER_USER, Utils.getRootStemIdentifier(), testStem, testStem);
final String groupExtension = "mygroup";
final String groupDisplayExtension = "My Group";
GroupDescriptor grp = createAndCheckGroup(test, groupExtension, groupDisplayExtension, 1);
try {
grouper.getMembers(SUPER_USER, Utils.getGroupIdentifier(grp), null);
fail("Should not be able to get member!!!");
} catch (Exception f) {
// Expected Fault
}
} catch (Exception e) {
fail(e.getMessage());
}
}
}