svn commit: r1430328 - /lenya/branches/BRANCH_2_1_X/src/modules-core/ac/java/test/org/apache/lenya/ac/file/Issue44035Test.java

[email protected] Tue, 08 Jan 2013 15:40:56 -0000
Newsgroups gmane.comp.cms.lenya.cvs
Message-ID <[email protected]>
Author: andreas
Date: Tue Jan  8 15:40:56 2013
New Revision: 1430328

URL: http://svn.apache.org/viewvc?rev=1430328&view=rev
Log:
Add test case for issue 44035.

Added:
    lenya/branches/BRANCH_2_1_X/src/modules-core/ac/java/test/org/apache/lenya/ac/file/Issue44035Test.java

Added: lenya/branches/BRANCH_2_1_X/src/modules-core/ac/java/test/org/apache/lenya/ac/file/Issue44035Test.java
URL: http://svn.apache.org/viewvc/lenya/branches/BRANCH_2_1_X/src/modules-core/ac/java/test/org/apache/lenya/ac/file/Issue44035Test.java?rev=1430328&view=auto
==============================================================================
--- lenya/branches/BRANCH_2_1_X/src/modules-core/ac/java/test/org/apache/lenya/ac/file/Issue44035Test.java (added)
+++ lenya/branches/BRANCH_2_1_X/src/modules-core/ac/java/test/org/apache/lenya/ac/file/Issue44035Test.java Tue Jan  8 15:40:56 2013
@@ -0,0 +1,103 @@
+package org.apache.lenya.ac.file;
+
+import java.text.DecimalFormat;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.avalon.framework.container.ContainerUtil;
+import org.apache.lenya.ac.AccessControlException;
+import org.apache.lenya.ac.Group;
+import org.apache.lenya.ac.User;
+import org.apache.lenya.ac.UserType;
+import org.apache.lenya.ac.impl.AbstractAccessControlTest;
+
+/**
+ * https://issues.apache.org/bugzilla/show_bug.cgi?id=44035
+ */
+public class Issue44035Test extends AbstractAccessControlTest {
+
+    private final String ADMIN_GROUP = "adminGroup";
+    private final String EDITOR_GROUP = "editorGroup";
+
+    /**
+     * Create and save a user
+     * 
+     * @param userName The user name
+     * @return a <code>FileUser</code>
+     * @throws AccessControlException if an error occurs
+     */
+    final public FileUser createAndSaveUser(String userName) throws AccessControlException {
+
+        final FileUser user = new FileUser(getAccreditableManager().getUserManager(), getLogger(),
+                userName, "Henry Hamster", "[email protected]", "foobar");
+        ContainerUtil.enableLogging(user, getLogger());
+
+        for (final String groupName : new String[] { ADMIN_GROUP, EDITOR_GROUP }) {
+            final FileGroup group = new FileGroup(getAccreditableManager().getGroupManager(),
+                    getLogger(), groupName);
+            ContainerUtil.enableLogging(group, getLogger());
+            group.add(user);
+            group.save();
+        }
+
+        user.save();
+
+        final FileUserManager _manager = getUserManager();
+        _manager.add(user);
+
+        return user;
+    }
+
+    /**
+     * Returns the file user manager.
+     * @return A file user manager.
+     * @throws AccessControlException if an error occurs.
+     */
+    protected FileUserManager getUserManager() throws AccessControlException {
+        final UserType[] userTypes = { FileAccreditableManager.getDefaultUserType() };
+        return FileUserManager.instance(getAccreditableManager(), getAccreditablesDirectory(),
+                userTypes, getLogger());
+    }
+
+    public void testIssue44035() throws Exception {
+        final int numRuns = 1;
+        final int numUsers = 10;
+        final Set<User> users = new HashSet<User>();
+        try {
+            for (int i = 0; i < numUsers; i++) {
+                final User user = createAndSaveUser(username(i));
+                users.add(user);
+            }
+            for (int n = 0; n < numRuns; n++) {
+                final FileUserManager mgr = createUserManager();
+                for (int i = 0; i < numUsers; i++) {
+                    final User user = mgr.getUser(username(i));
+                    final Set<String> groupIds = new HashSet<String>();
+                    for (final Group group : user.getGroups()) {
+                        groupIds.add(group.getId());
+                    }
+                    assertTrue(groupIds.contains(ADMIN_GROUP));
+                    assertTrue(groupIds.contains(EDITOR_GROUP));
+                }
+            }
+        } finally {
+            for (final User user : users) {
+                getUserManager().remove(user);
+                user.delete();
+            }
+        }
+    }
+
+    protected String username(int i) {
+        return "user_" + new DecimalFormat("000").format(i);
+    }
+
+    protected FileUserManager createUserManager() throws AccessControlException {
+        final UserType[] userTypes = { FileAccreditableManager.getDefaultUserType() };
+        final FileUserManager manager = new FileUserManager(getAccreditableManager(), userTypes);
+        manager.enableLogging(getLogger());
+        manager.configure(getAccreditablesDirectory());
+        return manager;
+    }
+
+}