From 5f7a7eaeb13a6e800ec28c6e388a50195eb0f32d Mon Sep 17 00:00:00 2001 From: Jeff Burke <Jeff.Burke@nrc-cnrc.gc.ca> Date: Thu, 21 Aug 2014 09:22:28 -0700 Subject: [PATCH] s1651: unit test for testing group ownership --- .../nrc/cadc/ac/server/GroupPersistence.java | 7 +- .../nrc/cadc/ac/server/ldap/LdapGroupDAO.java | 68 ++++++-- .../ac/server/ldap/LdapGroupPersistence.java | 30 ++-- .../ac/server/ldap/LdapUserPersistence.java | 6 +- .../ac/server/web/AddGroupMemberAction.java | 9 +- .../ac/server/web/AddUserMemberAction.java | 11 +- .../cadc/ac/server/web/CreateGroupAction.java | 6 +- .../cadc/ac/server/web/DeleteGroupAction.java | 4 +- .../cadc/ac/server/web/GetGroupAction.java | 2 +- .../cadc/ac/server/web/ModifyGroupAction.java | 8 +- .../server/web/RemoveGroupMemberAction.java | 6 +- .../ac/server/web/RemoveUserMemberAction.java | 9 +- .../cadc/ac/server/ldap/LdapGroupDAOTest.java | 154 ++++++++++++------ .../src/ca/nrc/cadc/ac/AC.java | 2 +- 14 files changed, 210 insertions(+), 112 deletions(-) diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/GroupPersistence.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/GroupPersistence.java index f801d777..70556c68 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/GroupPersistence.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/GroupPersistence.java @@ -145,7 +145,7 @@ public abstract interface GroupPersistence<T extends Principal> /** * Obtain a Collection of Groups that fit the given query. * - * @param user<T> ID of user + * @param user user * @param role Role of the user, either owner, member, or read/write. * * @return Collection of Groups matching the query, or empty Collection. @@ -162,7 +162,7 @@ public abstract interface GroupPersistence<T extends Principal> /** * Check whether the user is a member of the group. * - * @param user<T> ID of user + * @param user user * @param groupID ID of group * * @return true or false @@ -170,9 +170,10 @@ public abstract interface GroupPersistence<T extends Principal> * @throws GroupNotFoundException If the group was not found. * @throws TransientException If an temporary, unexpected problem occurred. * @throws AccessControlException If the operation is not permitted. + * @throws ca.nrc.cadc.ac.UserNotFoundException */ public abstract boolean isMember(User<T> user, String groupID) throws GroupNotFoundException, TransientException, - AccessControlException; + AccessControlException, UserNotFoundException; } diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java index 738710f9..d61df2a5 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java @@ -68,7 +68,6 @@ */ package ca.nrc.cadc.ac.server.ldap; -import ca.nrc.cadc.ac.AC; import ca.nrc.cadc.ac.Group; import ca.nrc.cadc.ac.GroupAlreadyExistsException; import ca.nrc.cadc.ac.GroupNotFoundException; @@ -87,6 +86,7 @@ import com.unboundid.ldap.sdk.ModificationType; import com.unboundid.ldap.sdk.ModifyDNRequest; import com.unboundid.ldap.sdk.ModifyRequest; import com.unboundid.ldap.sdk.SearchRequest; +import com.unboundid.ldap.sdk.SearchResult; import com.unboundid.ldap.sdk.SearchResultEntry; import com.unboundid.ldap.sdk.SearchScope; import com.unboundid.ldap.sdk.controls.ProxiedAuthorizationV2RequestControl; @@ -232,7 +232,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO } List<String> members = new ArrayList<String>(); - for (User member : group.getUserMembers()) + for (User<?> member : group.getUserMembers()) { DN memberDN = this.userPersist.getUserDN(member); members.add(memberDN.toNormalizedString()); @@ -323,39 +323,73 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO * readGrDN.toNormalizedString()) the query, or empty * Collection. Never null. * @throws TransientException If an temporary, unexpected problem occurred. - * @throws ca.nrc.cadc.ac.UserNotFoundException + * @throws UserNotFoundException */ public Collection<Group> getGroups(User<T> user, Role role) throws TransientException, AccessControlException, UserNotFoundException { try - { - Filter filter; - switch (role) + { + DN userDN = userPersist.getUserDN(user); + Filter filter = null; + if (role == Role.OWNER) { - case AC.ID_TYPE_X500: - - - + filter = Filter.createEqualityFilter("owner", userDN.toString()); + } + else if (role == Role.MEMBER) + { + throw new IllegalArgumentException("Member role not implemented"); + } + else if (role == Role.RW) + { + throw new IllegalArgumentException("RW role not implemented"); } SearchRequest searchRequest = new SearchRequest( - config.getGroupsDN(), SearchScope.SUB, - "(cn=" + groupID + ")", new String[] {"entrydn", "entryid", - "cn", "description", "owner", "uniquemember", "aci", - "modifytimestamp"}); + config.getGroupsDN(), SearchScope.SUB, filter, + new String[] {"cn", "description", + "owner", "modifytimestamp"}); + + searchRequest.addControl( + new ProxiedAuthorizationV2RequestControl("dn:" + + getSubjectDN().toNormalizedString())); + + Collection<Group> groups = new ArrayList<Group>(); + SearchResult results = getConnection().search(searchRequest); + for (SearchResultEntry result : results.getSearchEntries()) + { + String groupName = result.getAttributeValue("cn"); + DN groupOwner = result.getAttributeValueAsDN("owner"); + + User<X500Principal> owner; + try + { + owner = userPersist.getMember(groupOwner); + } + catch (UserNotFoundException e) + { + throw new RuntimeException("BUG: group owner not found"); + } + + Group group = new Group(groupName, owner); + group.description = result.getAttributeValue("description"); + group.lastModified = result.getAttributeValueAsDate("modifytimestamp"); + groups.add(group); + } + + return groups; } catch (LDAPException e1) { // TODO check which LDAP exceptions are transient and which // ones are // access control - throw new TransientException("Error getting the group", e1); + throw new TransientException("Error getting groups", e1); } } - public boolean isMember(User<T> member, String groupID) + public boolean isMember(User<T> user, String groupID) throws UserNotFoundException, TransientException, AccessControlException { @@ -601,7 +635,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO } List<String> delMembers = new ArrayList<String>(); - for (User member : oldGroup.getUserMembers()) + for (User<?> member : oldGroup.getUserMembers()) { DN memberDN; try diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupPersistence.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupPersistence.java index 2704962f..65386490 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupPersistence.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupPersistence.java @@ -97,10 +97,10 @@ public class LdapGroupPersistence<T extends Principal> throws GroupNotFoundException, TransientException, AccessControlException { - LdapGroupDAO groupDAO = null; + LdapGroupDAO<T> groupDAO = null; try { - groupDAO = new LdapGroupDAO(config, new LdapUserDAO(config)); + groupDAO = new LdapGroupDAO<T>(config, new LdapUserDAO<T>(config)); Group ret = groupDAO.getGroup(groupName); return ret; } @@ -117,10 +117,10 @@ public class LdapGroupPersistence<T extends Principal> throws GroupAlreadyExistsException, TransientException, AccessControlException, UserNotFoundException { - LdapGroupDAO groupDAO = null; + LdapGroupDAO<T> groupDAO = null; try { - groupDAO = new LdapGroupDAO(config, new LdapUserDAO(config)); + groupDAO = new LdapGroupDAO<T>(config, new LdapUserDAO<T>(config)); Group ret = groupDAO.addGroup(group); return ret; } @@ -137,10 +137,10 @@ public class LdapGroupPersistence<T extends Principal> throws GroupNotFoundException, TransientException, AccessControlException { - LdapGroupDAO groupDAO = null; + LdapGroupDAO<T> groupDAO = null; try { - groupDAO = new LdapGroupDAO(config, new LdapUserDAO(config)); + groupDAO = new LdapGroupDAO<T>(config, new LdapUserDAO<T>(config)); groupDAO.deleteGroup(groupName); } finally @@ -156,10 +156,10 @@ public class LdapGroupPersistence<T extends Principal> throws GroupNotFoundException, TransientException, AccessControlException, UserNotFoundException { - LdapGroupDAO groupDAO = null; + LdapGroupDAO<T> groupDAO = null; try { - groupDAO = new LdapGroupDAO(config, new LdapUserDAO(config)); + groupDAO = new LdapGroupDAO<T>(config, new LdapUserDAO<T>(config)); Group ret = groupDAO.modifyGroup(group); return ret; } @@ -175,10 +175,10 @@ public class LdapGroupPersistence<T extends Principal> public Collection<Group> getGroups(User<T> user, Role role) throws UserNotFoundException, TransientException, AccessControlException { - LdapGroupDAO groupDAO = null; + LdapGroupDAO<T> groupDAO = null; try { - groupDAO = new LdapGroupDAO(config, new LdapUserDAO(config)); + groupDAO = new LdapGroupDAO<T>(config, new LdapUserDAO<T>(config)); Collection<Group> ret = groupDAO.getGroups(user, role); return ret; } @@ -191,15 +191,15 @@ public class LdapGroupPersistence<T extends Principal> } } - public boolean isMember(User<T> member, String groupID) + public boolean isMember(User<T> user, String groupID) throws GroupNotFoundException, TransientException, - AccessControlException + AccessControlException, UserNotFoundException { - LdapGroupDAO groupDAO = null; + LdapGroupDAO<T> groupDAO = null; try { - groupDAO = new LdapGroupDAO(config, new LdapUserDAO(config)); - boolean ret = groupDAO.isMember(member, groupID); + groupDAO = new LdapGroupDAO<T>(config, new LdapUserDAO<T>(config)); + boolean ret = groupDAO.isMember(user, groupID); return ret; } finally diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserPersistence.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserPersistence.java index ebdd209e..4305fbe9 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserPersistence.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserPersistence.java @@ -97,11 +97,11 @@ public class LdapUserPersistence<T extends Principal> public User<T> getUser(T userID) throws UserNotFoundException, TransientException, AccessControlException { - LdapUserDAO userDAO = null; + LdapUserDAO<T> userDAO = null; try { - userDAO = new LdapUserDAO(this.config); - User ret = userDAO.getUser(userID); + userDAO = new LdapUserDAO<T>(this.config); + User<T> ret = userDAO.getUser(userID); return ret; } finally diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/AddGroupMemberAction.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/AddGroupMemberAction.java index 8dda2df4..9577061c 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/AddGroupMemberAction.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/AddGroupMemberAction.java @@ -77,10 +77,11 @@ import java.util.Set; public class AddGroupMemberAction extends GroupsAction { - private String groupName; - private String groupMemberName; + private final String groupName; + private final String groupMemberName; - AddGroupMemberAction(GroupLogInfo logInfo, String groupName, String groupMemberName) + AddGroupMemberAction(GroupLogInfo logInfo, String groupName, + String groupMemberName) { super(logInfo); this.groupName = groupName; @@ -99,7 +100,7 @@ public class AddGroupMemberAction extends GroupsAction } groupPersistence.modifyGroup(group); - List addedMembers = new ArrayList(); + List<String> addedMembers = new ArrayList<String>(); addedMembers.add(toAdd.getID()); logGroupInfo(group.getID(), null, addedMembers); return null; diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/AddUserMemberAction.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/AddUserMemberAction.java index 22e55998..3862f48e 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/AddUserMemberAction.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/AddUserMemberAction.java @@ -81,11 +81,12 @@ import java.util.Set; public class AddUserMemberAction extends GroupsAction { - private String groupName; - private String userID; - private String userIDType; + private final String groupName; + private final String userID; + private final String userIDType; - AddUserMemberAction(GroupLogInfo logInfo, String groupName, String userID, String userIDType) + AddUserMemberAction(GroupLogInfo logInfo, String groupName, String userID, + String userIDType) { super(logInfo); this.groupName = groupName; @@ -107,7 +108,7 @@ public class AddUserMemberAction extends GroupsAction } groupPersistence.modifyGroup(group); - List addedMembers = new ArrayList(); + List<String> addedMembers = new ArrayList<String>(); addedMembers.add(toAdd.getUserID().getName()); logGroupInfo(group.getID(), null, addedMembers); return null; diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/CreateGroupAction.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/CreateGroupAction.java index 16a7477a..15689805 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/CreateGroupAction.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/CreateGroupAction.java @@ -82,7 +82,7 @@ import javax.servlet.http.HttpServletResponse; public class CreateGroupAction extends GroupsAction { - private InputStream inputStream; + private final InputStream inputStream; CreateGroupAction(GroupLogInfo logInfo, InputStream inputStream) { @@ -99,10 +99,10 @@ public class CreateGroupAction extends GroupsAction this.response.setContentType("application/xml"); GroupWriter.write(newGroup, this.response.getOutputStream()); - List addedMembers = null; + List<String> addedMembers = null; if ((newGroup.getUserMembers().size() > 0) || (newGroup.getGroupMembers().size() > 0)) { - addedMembers = new ArrayList(); + addedMembers = new ArrayList<String>(); for (Group gr : newGroup.getGroupMembers()) { addedMembers.add(gr.getID()); diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/DeleteGroupAction.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/DeleteGroupAction.java index 0ea035fa..88504632 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/DeleteGroupAction.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/DeleteGroupAction.java @@ -78,7 +78,7 @@ import java.util.Set; public class DeleteGroupAction extends GroupsAction { - private String groupName; + private final String groupName; DeleteGroupAction(GroupLogInfo logInfo, String groupName) { @@ -94,7 +94,7 @@ public class DeleteGroupAction extends GroupsAction groupPersistence.deleteGroup(this.groupName); if ((deletedGroup.getUserMembers().size() > 0) || (deletedGroup.getGroupMembers().size() > 0)) { - this.logInfo.addedMembers = new ArrayList(); + this.logInfo.addedMembers = new ArrayList<String>(); for (Group gr : deletedGroup.getGroupMembers()) { this.logInfo.deletedMembers.add(gr.getID()); diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GetGroupAction.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GetGroupAction.java index d4d50f1d..9854b25d 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GetGroupAction.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GetGroupAction.java @@ -74,7 +74,7 @@ import javax.servlet.http.HttpServletResponse; public class GetGroupAction extends GroupsAction { - private String groupName; + private final String groupName; GetGroupAction(GroupLogInfo logInfo, String groupName) { diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ModifyGroupAction.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ModifyGroupAction.java index 6755d009..9e5221c4 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ModifyGroupAction.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ModifyGroupAction.java @@ -81,8 +81,8 @@ import javax.servlet.http.HttpServletResponse; public class ModifyGroupAction extends GroupsAction { - private String groupName; - private InputStream inputStream; + private final String groupName; + private final InputStream inputStream; ModifyGroupAction(GroupLogInfo logInfo, String groupName, InputStream inputStream) { @@ -100,7 +100,7 @@ public class ModifyGroupAction extends GroupsAction Group modifiedGroup = groupPersistence.modifyGroup(group); this.response.sendRedirect(modifiedGroup.getID()); - List addedMembers = new ArrayList(); + List<String> addedMembers = new ArrayList<String>(); for (User member : group.getUserMembers()) { if (!oldGroup.getUserMembers().remove(member)) @@ -119,7 +119,7 @@ public class ModifyGroupAction extends GroupsAction { addedMembers = null; } - List deletedMembers = new ArrayList(); + List<String> deletedMembers = new ArrayList<String>(); for (User member : oldGroup.getUserMembers()) { deletedMembers.add(member.getUserID().getName()); diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/RemoveGroupMemberAction.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/RemoveGroupMemberAction.java index 281f06d3..39e14891 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/RemoveGroupMemberAction.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/RemoveGroupMemberAction.java @@ -77,8 +77,8 @@ import java.util.Set; public class RemoveGroupMemberAction extends GroupsAction { - private String groupName; - private String groupMemberName; + private final String groupName; + private final String groupMemberName; RemoveGroupMemberAction(GroupLogInfo logInfo, String groupName, String groupMemberName) { @@ -99,7 +99,7 @@ public class RemoveGroupMemberAction extends GroupsAction } groupPersistence.modifyGroup(group); - List deletedMembers = new ArrayList(); + List<String> deletedMembers = new ArrayList<String>(); deletedMembers.add(toRemove.getID()); logGroupInfo(group.getID(), deletedMembers, null); return null; diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/RemoveUserMemberAction.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/RemoveUserMemberAction.java index d5aa14ae..67b34292 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/RemoveUserMemberAction.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/RemoveUserMemberAction.java @@ -77,13 +77,12 @@ import ca.nrc.cadc.auth.AuthenticationUtil; import java.security.Principal; import java.util.ArrayList; import java.util.List; -import java.util.Set; public class RemoveUserMemberAction extends GroupsAction { - private String groupName; - private String userID; - private String userIDType; + private final String groupName; + private final String userID; + private final String userIDType; RemoveUserMemberAction(GroupLogInfo logInfo, String groupName, String userID, String userIDType) { @@ -107,7 +106,7 @@ public class RemoveUserMemberAction extends GroupsAction } groupPersistence.modifyGroup(group); - List deletedMembers = new ArrayList(); + List<String> deletedMembers = new ArrayList<String>(); deletedMembers.add(toRemove.getUserID().getName()); logGroupInfo(group.getID(), deletedMembers, null); return null; diff --git a/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAOTest.java b/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAOTest.java index 7ac6defc..82132438 100644 --- a/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAOTest.java +++ b/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAOTest.java @@ -46,21 +46,50 @@ import org.junit.Test; import ca.nrc.cadc.ac.Group; import ca.nrc.cadc.ac.GroupProperty; +import ca.nrc.cadc.ac.Role; import ca.nrc.cadc.ac.User; +import ca.nrc.cadc.util.Log4jInit; +import java.util.Collection; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import static org.junit.Assert.fail; +import org.junit.BeforeClass; public class LdapGroupDAOTest { - final String groupID1 = "acs-daotest-group1-" + System.currentTimeMillis(); - final String groupID2 = "acs-daotest-group2-" + System.currentTimeMillis(); + private static final Logger log = Logger.getLogger(LdapGroupDAOTest.class); - LdapConfig config = new LdapConfig( - "199.116.235.122", -// "mach275.cadc.dao.nrc.ca", - 389, + static User<X500Principal> authtest1; + static User<X500Principal> authtest2; + static User<X500Principal> regtest1; + + static String groupID1; + static String groupID2; + + static LdapConfig config; + + @BeforeClass + public static void setUpBeforeClass() + throws Exception + { + Log4jInit.setLevel("ca.nrc.cadc.ac", Level.DEBUG); + + groupID1 = "acs-daotest-group1-" + System.currentTimeMillis(); + groupID2 = "acs-daotest-group2-" + System.currentTimeMillis(); + + authtest1 = new User<X500Principal>( + new X500Principal("cn=cadc authtest1 10627,ou=cadc,o=hia")); + authtest2 = new User<X500Principal>( + new X500Principal("cn=cadc authtest2 10635,ou=cadc,o=hia")); + regtest1 = new User<X500Principal>( + new X500Principal("CN=CADC Regtest1 10577,OU=CADC,O=HIA")); + + config = new LdapConfig("mach275.cadc.dao.nrc.ca", 389, "uid=webproxy,ou=administrators,ou=topologymanagement,o=netscaperoot", "go4it", "ou=Users,ou=ds,dc=canfar,dc=net", "ou=TestGroups,ou=ds,dc=canfar,dc=net", "ou=DeletedGroups,ou=ds,dc=canfar,dc=net"); + } LdapGroupDAO<X500Principal> getGroupDAO() { @@ -68,19 +97,11 @@ public class LdapGroupDAOTest new LdapUserDAO<X500Principal>(config)); } - @Test +// @Test public void testOneGroup() throws Exception { - - final User<X500Principal> owner = new User<X500Principal>( - new X500Principal("cn=cadc authtest1 10627,ou=cadc,o=hia")); - final User<X500Principal> authtest2 = new User<X500Principal>( - new X500Principal("CN=cadc authtest2 10635,OU=cadc,O=hia")); - final User<X500Principal> regtest1 = new User<X500Principal>( - new X500Principal("CN=CADC Regtest1 10577,OU=CADC,O=HIA")); - Subject subject = new Subject(); - subject.getPrincipals().add(owner.getUserID()); + subject.getPrincipals().add(authtest1.getUserID()); // do everything as owner Subject.doAs(subject, new PrivilegedExceptionAction<Object>() @@ -89,12 +110,12 @@ public class LdapGroupDAOTest { try { - Group expectGroup = new Group(groupID1, owner); + Group expectGroup = new Group(groupID1, authtest1); Group actualGroup = getGroupDAO().addGroup(expectGroup); assertGroupsEqual(expectGroup, actualGroup); -// Group otherGroup = new Group(groupID2, authtest2); -// otherGroup = getGroupDAO().addGroup(otherGroup); + Group otherGroup = new Group(groupID2, authtest1); + otherGroup = getGroupDAO().addGroup(otherGroup); // modify group fields // description @@ -102,30 +123,30 @@ public class LdapGroupDAOTest actualGroup = getGroupDAO().modifyGroup(expectGroup); assertGroupsEqual(expectGroup, actualGroup); -// // groupRead -// expectGroup.groupRead = otherGroup; -// actualGroup = getGroupDAO().modifyGroup(expectGroup); -// assertGroupsEqual(expectGroup, actualGroup); -// -// // groupWrite -// expectGroup.groupWrite = otherGroup; -// actualGroup = getGroupDAO().modifyGroup(expectGroup); -// assertGroupsEqual(expectGroup, actualGroup); + // groupRead + expectGroup.groupRead = otherGroup; + actualGroup = getGroupDAO().modifyGroup(expectGroup); + assertGroupsEqual(expectGroup, actualGroup); + + // groupWrite + expectGroup.groupWrite = otherGroup; + actualGroup = getGroupDAO().modifyGroup(expectGroup); + assertGroupsEqual(expectGroup, actualGroup); // publicRead expectGroup.publicRead = true; actualGroup = getGroupDAO().modifyGroup(expectGroup); assertGroupsEqual(expectGroup, actualGroup); -// // userMembers -// expectGroup.getUserMembers().add(authtest2); -// actualGroup = getGroupDAO().modifyGroup(expectGroup); -// assertGroupsEqual(expectGroup, actualGroup); -// -// // groupMembers -// expectGroup.getGroupMembers().add(otherGroup); -// actualGroup = getGroupDAO().modifyGroup(expectGroup); -// assertGroupsEqual(expectGroup, actualGroup); + // userMembers + expectGroup.getUserMembers().add(authtest2); + actualGroup = getGroupDAO().modifyGroup(expectGroup); + assertGroupsEqual(expectGroup, actualGroup); + + // groupMembers + expectGroup.getGroupMembers().add(otherGroup); + actualGroup = getGroupDAO().modifyGroup(expectGroup); + assertGroupsEqual(expectGroup, actualGroup); return null; } catch (Exception e) @@ -139,14 +160,8 @@ public class LdapGroupDAOTest // @Test public void testMultipleGroups() throws Exception { - - final User<X500Principal> owner = new User<X500Principal>( - new X500Principal("cn=cadc authtest1 10627,ou=cadc,o=hia")); - final User<X500Principal> authtest2 = new User<X500Principal>( - new X500Principal("cn=cadc authtest2 10635,ou=cadc,o=hia")); - Subject subject = new Subject(); - subject.getPrincipals().add(owner.getUserID()); + subject.getPrincipals().add(authtest1.getUserID()); // do everything as owner Subject.doAs(subject, new PrivilegedExceptionAction<Object>() @@ -155,11 +170,11 @@ public class LdapGroupDAOTest { try { - Group expectGroup = new Group(groupID1, owner); + Group expectGroup = new Group(groupID1, authtest1); Group actualGroup = getGroupDAO().addGroup(expectGroup); assertGroupsEqual(expectGroup, actualGroup); - Group otherGroup = new Group(groupID2, authtest2); + Group otherGroup = new Group(groupID2, authtest1); otherGroup = getGroupDAO().addGroup(otherGroup); // modify group fields @@ -201,6 +216,53 @@ public class LdapGroupDAOTest } }); } + + @Test + public void testGetGroups() throws Exception + { + Subject subject = new Subject(); + subject.getPrincipals().add(authtest1.getUserID()); + + // do everything as owner + Subject.doAs(subject, new PrivilegedExceptionAction<Object>() + { + public Object run() throws Exception + { + try + { + Group expectGroup = new Group(groupID1, authtest1); + Group actualGroup = getGroupDAO().addGroup(expectGroup); + assertGroupsEqual(expectGroup, actualGroup); + System.out.println("new group: " + groupID1); + + Collection<Group> groups = getGroupDAO().getGroups(authtest1, Role.OWNER); + System.out.println("# groups found: " + groups.size()); + boolean found = false; + for (Group group : groups) + { + System.out.println("found group: " + group.getID()); + if (!group.getOwner().equals(authtest1)) + { + fail("returned group with wrong owner"); + } + if (group.getID().equals(groupID1)) + { + found = true; + } + } + if (!found) + { + fail(""); + } + } + catch (Exception e) + { + throw new Exception("Problems", e); + } + return null; + } + }); + } private void assertGroupsEqual(Group gr1, Group gr2) { diff --git a/projects/cadcAccessControl/src/ca/nrc/cadc/ac/AC.java b/projects/cadcAccessControl/src/ca/nrc/cadc/ac/AC.java index 782a0529..c80bc419 100755 --- a/projects/cadcAccessControl/src/ca/nrc/cadc/ac/AC.java +++ b/projects/cadcAccessControl/src/ca/nrc/cadc/ac/AC.java @@ -69,7 +69,7 @@ package ca.nrc.cadc.ac; /** - * Holder of commonly used consts in GMS + * Holder of commonly used consts in cadcAccessControl */ public class AC { -- GitLab