align package names.
[utils] / security / impl / src / test / java / org / wamblee / security / authentication / InMemoryGroupSetTest.java
diff --git a/security/impl/src/test/java/org/wamblee/security/authentication/InMemoryGroupSetTest.java b/security/impl/src/test/java/org/wamblee/security/authentication/InMemoryGroupSetTest.java
new file mode 100644 (file)
index 0000000..9ff7a4a
--- /dev/null
@@ -0,0 +1,211 @@
+/*
+ * Copyright 2005-2010 the original author or authors.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */ 
+package org.wamblee.security.authentication;
+
+import java.util.Set;
+
+import org.wamblee.security.authentication.Group;
+import org.wamblee.security.authentication.GroupSet;
+import org.wamblee.security.authentication.InMemoryGroupSet;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests the inmemory group set. Intended to be subclassed for other
+ * implementations of group set.
+ */
+public class InMemoryGroupSetTest extends TestCase {
+    private GroupSet groups;
+
+    /**
+     * This method must be overriden in subclasses.
+     * 
+     * @return New group set object.
+     */
+    protected GroupSet createGroupSet() {
+        return new InMemoryGroupSet();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.wamblee.test.SpringTestCase#setUp()
+     */
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        groups = createGroupSet();
+        checkGroupCount(0);
+    }
+
+    /**
+     * Additional check to be implemented by a subclass.
+     * 
+     * @param aGroup
+     *            Group to check for existence.
+     * 
+     */
+    protected void checkGroupExists(String aGroup) throws Exception {
+        // Empty
+    }
+
+    /**
+     * Additional check to be implemented by a subclass.
+     * 
+     * @param aGroup
+     *            Group to check for non-existence.
+     * 
+     */
+    protected void checkGroupNotExists(String aGroup) throws Exception {
+        // Empty
+    }
+
+    /**
+     * Additional check to be implemented by a subclass.
+     * 
+     * @param aSize
+     *            Expected number of groups.
+     * 
+     */
+    protected void checkGroupCount(int aSize) throws Exception {
+        assertEquals(aSize, groups.size());
+    }
+
+    /**
+     * Adds a group and verifies that the group is added using find(), list(),
+     * and contains().
+     * 
+     */
+    public void testAdd() throws Exception {
+        Group group = new Group("group1");
+        assertTrue(groups.add(group));
+        checkGroupExists(group.getName());
+        checkGroupCount(1);
+
+        Group group2 = groups.find("group1");
+        assertNotNull(group2);
+        assertEquals(group.getName(), group2.getName());
+
+        Set<Group> set = groups.list();
+        assertEquals(1, set.size());
+        assertTrue(set.contains(group));
+    }
+
+    /**
+     * Tries to find a non-existing group. Verifies that null is returned.
+     * 
+     */
+    public void testFindUnknownGroup() throws Exception {
+        Group group1 = new Group("group1");
+        Group group2 = new Group("group2");
+        groups.add(group1);
+        groups.add(group2);
+        checkGroupExists(group1.getName());
+        checkGroupExists(group2.getName());
+
+        assertNull(groups.find("group3"));
+        checkGroupNotExists("group3");
+    }
+
+    /**
+     * Adds duplicate group. Verifies that the existing group is left untouched.
+     * 
+     */
+    public void testAddDuplicateGroup() throws Exception {
+        Group group1 = new Group("group1");
+        groups.add(group1);
+
+        assertEquals(1, groups.list().size());
+        assertTrue(groups.contains(group1));
+        group1 = new Group("group1");
+        assertFalse(groups.add(group1));
+        assertEquals(1, groups.list().size());
+
+        checkGroupExists(group1.getName());
+        checkGroupCount(1);
+    }
+
+    /**
+     * Removes a group. Verifies that the group is removed and the return value
+     * is true.
+     * 
+     */
+    public void testRemoveGroup() throws Exception {
+        Group group1 = new Group("group1");
+        groups.add(group1);
+        assertTrue(groups.contains(group1));
+        checkGroupCount(1);
+
+        assertTrue(groups.remove(group1));
+        assertFalse(groups.contains(group1));
+        assertNull(groups.find(group1.getName()));
+        assertEquals(0, groups.list().size());
+        checkGroupCount(0);
+    }
+
+    /**
+     * Removes a non-existing group. Verifies that no groups are removed an that
+     * the return value is true.
+     * 
+     */
+    public void testRemoveNonExistingGroup() throws Exception {
+        Group group1 = new Group("group1");
+        groups.add(group1);
+        checkGroupCount(1);
+
+        Group nonExistingGroup = new Group("group2");
+        assertFalse(groups.remove(nonExistingGroup));
+        assertTrue(groups.contains(group1));
+        assertEquals(1, groups.list().size());
+        checkGroupCount(1);
+    }
+
+    /**
+     * Adds a number of groups to the set and verifies that list() returns them
+     * all.
+     * 
+     */
+    public void testList() throws Exception {
+        Group group1 = new Group("group1");
+        Group group2 = new Group("group2");
+        Group group3 = new Group("group3");
+        assertTrue(groups.add(group1));
+        assertTrue(groups.add(group2));
+        assertTrue(groups.add(group3));
+
+        checkGroupExists(group1.getName());
+        checkGroupExists(group2.getName());
+        checkGroupExists(group3.getName());
+
+        Set<Group> set = groups.list();
+        assertTrue(set.contains(group1));
+        assertTrue(set.contains(group2));
+        assertTrue(set.contains(group3));
+
+        checkGroupCount(3);
+    }
+    
+    public void testRenameGroupTwice() { 
+        Group group = new Group("x"); 
+        groups.add(group); 
+        groups.groupModified(group);
+        group.setName("y");
+        groups.groupModified(group);
+        Group g = groups.find("y");
+        assertNotNull(g);
+        groups.groupModified(group);
+    }
+}