You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ol...@apache.org on 2012/04/06 11:59:32 UTC

svn commit: r1310268 [42/42] - in /archiva/redback/redback-core/trunk: ./ redback-authentication/ redback-authentication/redback-authentication-api/ redback-authentication/redback-authentication-api/src/ redback-authentication/redback-authentication-ap...

Added: archiva/redback/redback-core/trunk/redback-users/redback-users-tests/src/main/java/org/codehaus/plexus/redback/users/provider/test/AbstractUserManagerTestCase.java
URL: http://svn.apache.org/viewvc/archiva/redback/redback-core/trunk/redback-users/redback-users-tests/src/main/java/org/codehaus/plexus/redback/users/provider/test/AbstractUserManagerTestCase.java?rev=1310268&view=auto
==============================================================================
--- archiva/redback/redback-core/trunk/redback-users/redback-users-tests/src/main/java/org/codehaus/plexus/redback/users/provider/test/AbstractUserManagerTestCase.java (added)
+++ archiva/redback/redback-core/trunk/redback-users/redback-users-tests/src/main/java/org/codehaus/plexus/redback/users/provider/test/AbstractUserManagerTestCase.java Fri Apr  6 09:58:14 2012
@@ -0,0 +1,609 @@
+package org.codehaus.plexus.redback.users.provider.test;
+
+/*
+ * Copyright 2001-2006 The Codehaus.
+ *
+ * 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.
+ */
+
+import junit.framework.TestCase;
+import org.codehaus.plexus.redback.policy.UserSecurityPolicy;
+import org.codehaus.plexus.redback.users.PermanentUserException;
+import org.codehaus.plexus.redback.users.User;
+import org.codehaus.plexus.redback.users.UserManager;
+import org.codehaus.plexus.redback.users.UserNotFoundException;
+import org.codehaus.plexus.redback.users.UserQuery;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import javax.inject.Inject;
+import java.util.List;
+
+/**
+ * AbstractUserManagerTestCase 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+@RunWith( SpringJUnit4ClassRunner.class )
+@ContextConfiguration( locations = {"classpath*:/META-INF/spring-context.xml","classpath*:/spring-context.xml"} )
+public class AbstractUserManagerTestCase
+    extends TestCase
+{
+    /**
+     * This value is set by the sub classes of this test case.
+     * They should override .setUp() and inject this value via
+     * the {@link #setUserManager(UserManager)} method call.
+     */
+    private UserManager userManager;
+
+    @Inject
+    private UserSecurityPolicy securityPolicy;
+    
+    private UserManagerEventTracker eventTracker;
+
+    public UserManager getUserManager()
+    {
+        return userManager;
+    }
+
+    public void setUserManager( UserManager um )
+    {
+        this.userManager = um;
+        if ( this.userManager != null )
+        {
+            this.eventTracker = new UserManagerEventTracker();
+            this.userManager.addUserManagerListener( this.eventTracker );
+        }
+    }
+
+    public void setUp()
+        throws Exception
+    {
+        super.setUp();
+    }
+
+    public void tearDown()
+        throws Exception
+    {
+        super.tearDown();
+    }
+
+    protected void assertCleanUserManager()
+    {
+
+        getUserManager().eraseDatabase();
+        getEventTracker().userManagerInit( true );
+        assertNotNull( getUserManager() );
+
+        assertEquals( "New UserManager should contain no users. " + userManager.getUsers(), 0, userManager.getUsers().size() );
+    }
+
+    @Test
+    public void testFindUserByNullPrincipal()
+    {
+        try
+        {
+            Object obj = null;
+            getUserManager().findUser( obj );
+            fail( "findUser() with null Object Should have thrown a UserNotFoundException." );
+        }
+        catch ( UserNotFoundException e )
+        {
+            // Expected Path.
+        }
+    }
+
+    @Test
+    public void testFindUserByEmptyUsername()
+    {
+        try
+        {
+            String username = null;
+            getUserManager().findUser( username );
+            fail( "findUser() with null username Should have thrown a UserNotFoundException." );
+        }
+        catch ( UserNotFoundException e )
+        {
+            // Expected Path.
+        }
+        
+        try
+        {
+            String username = "";
+            getUserManager().findUser( username );
+            fail( "findUser() with empty username Should have thrown a UserNotFoundException." );
+        }
+        catch ( UserNotFoundException e )
+        {
+            // Expected Path.
+        }
+        
+        try
+        {
+            String username = "   ";
+            getUserManager().findUser( username );
+            fail( "findUser() with all whitespace username Should have thrown a UserNotFoundException." );
+        }
+        catch ( UserNotFoundException e )
+        {
+            // Expected Path.
+        }
+    }
+
+    @Test
+    public void testAddFindUserByPrincipal()
+        throws UserNotFoundException
+    {
+        assertCleanUserManager();
+        securityPolicy.setEnabled( false );
+
+        User smcqueen = getUserManager().createUser( "smcqueen", "Steve McQueen", "the cooler king" );
+
+        /* Keep a reference to the object that was added.
+         * Since it has the actual principal that was managed by jpox/jdo.
+         */
+        User added = userManager.addUser( smcqueen );
+
+        assertEquals( 1, userManager.getUsers().size() );
+
+        /* Fetch user from userManager using principal returned earlier */
+        User actual = userManager.findUser( added.getPrincipal() );
+        assertEquals( added, actual );
+        
+        /* Check into the event tracker. */
+        assertEquals( 1, getEventTracker().countInit );
+        assertNotNull( getEventTracker().lastDbFreshness );
+        assertTrue( getEventTracker().lastDbFreshness.booleanValue() );
+        
+        assertEquals( 1, getEventTracker().addedUsernames.size() );
+        assertEquals( 0, getEventTracker().removedUsernames.size() );
+        assertEquals( 0, getEventTracker().updatedUsernames.size() );
+    }
+
+    @Test
+    public void testAddFindUserLockedStatus() throws UserNotFoundException {
+		assertCleanUserManager();
+		securityPolicy.setEnabled(false);
+
+		User smcqueen = getUserManager().createUser("smcqueen", "Steve McQueen", "the cooler king");
+
+		smcqueen.setLocked( true );
+		
+		/*
+		 * Keep a reference to the object that was added. Since it has the
+		 * actual principal that was managed by jpox/jdo.
+		 */
+		User added = userManager.addUser( smcqueen );
+
+		assertTrue( added.isLocked() );
+		
+		assertEquals(1, userManager.getUsers().size());
+
+		/* Fetch user from userManager using principal returned earlier */
+		User actual = userManager.findUser(added.getPrincipal());
+		assertEquals(added, actual);
+
+		assertTrue( actual.isLocked() );
+		
+		/* Check into the event tracker. */
+		assertEquals(1, getEventTracker().countInit);
+		assertNotNull(getEventTracker().lastDbFreshness);
+		assertTrue(getEventTracker().lastDbFreshness.booleanValue());
+
+		assertEquals(1, getEventTracker().addedUsernames.size());
+		assertEquals(0, getEventTracker().removedUsernames.size());
+		assertEquals(0, getEventTracker().updatedUsernames.size());
+	}
+
+    @Test
+    public void testAddFindUserByUsername()
+        throws UserNotFoundException
+    {
+        assertCleanUserManager();
+        securityPolicy.setEnabled( false );
+
+        User smcqueen = getUserManager().createUser( "smcqueen", "Steve McQueen", "the cooler king" );
+
+        User added = userManager.addUser( smcqueen );
+
+        assertEquals( 1, userManager.getUsers().size() );
+
+        User actual = userManager.findUser( "smcqueen" );
+        assertEquals( added, actual );
+        
+        /* Check into the event tracker. */
+        assertEquals( 1, getEventTracker().countInit );
+        assertNotNull( getEventTracker().lastDbFreshness );
+        assertTrue( getEventTracker().lastDbFreshness.booleanValue() );
+        
+        assertEquals( 1, getEventTracker().addedUsernames.size() );
+        assertEquals( 0, getEventTracker().removedUsernames.size() );
+        assertEquals( 0, getEventTracker().updatedUsernames.size() );
+    }
+
+    @Test
+    public void testCreateUser()
+        throws Exception
+    {
+        assertCleanUserManager();
+        securityPolicy.setEnabled( false );
+
+        UserManager um = getUserManager();
+        User user = um.createUser( "admin", "Administrator", "admin@somedomain.com" );
+        user.setPassword( "adminpass" );
+        um.addUser( user );
+
+        assertEquals( 1, um.getUsers().size() );
+        
+        /* Check into the event tracker. */
+        assertEquals( 1, getEventTracker().countInit );
+        assertNotNull( getEventTracker().lastDbFreshness );
+        assertTrue( getEventTracker().lastDbFreshness.booleanValue() );
+        
+        assertEquals( 1, getEventTracker().addedUsernames.size() );
+        assertEquals( 0, getEventTracker().removedUsernames.size() );
+        assertEquals( 0, getEventTracker().updatedUsernames.size() );
+    }
+
+    @Test
+    public void testAddUser()
+        throws Exception
+    {
+        assertCleanUserManager();
+        securityPolicy.setEnabled( false );
+
+        UserManager um = getUserManager();
+        assertNotNull( um.getUsers() );
+        assertEquals( 0, um.getUsers().size() );
+
+        User user = um.createUser( "tommy123", "Tommy Traddles", "tommy.traddles@somedomain.com" );
+        user.setPassword( "hillybilly" );
+        um.addUser( user );
+
+        assertNotNull( um.getUsers() );
+        assertEquals( 1, um.getUsers().size() );
+        
+        /* Check into the event tracker. */
+        assertEquals( 1, getEventTracker().countInit );
+        assertNotNull( getEventTracker().lastDbFreshness );
+        assertTrue( getEventTracker().lastDbFreshness.booleanValue() );
+        
+        assertEquals( 1, getEventTracker().addedUsernames.size() );
+        assertEquals( 0, getEventTracker().removedUsernames.size() );
+        assertEquals( 0, getEventTracker().updatedUsernames.size() );
+    }
+
+    @Test
+    public void testDeleteUser()
+        throws Exception
+    {
+        assertCleanUserManager();
+        securityPolicy.setEnabled( false );
+
+        UserManager um = getUserManager();
+        User user = um.createUser( "admin", "Administrator", "admin@somedomain.com" );
+        user.setPassword( "adminpass" );
+        um.addUser( user );
+
+        assertEquals( 1, um.getUsers().size() );
+
+        um.deleteUser( user.getPrincipal() );
+        assertEquals( 0, um.getUsers().size() );
+
+        // attempt finding a non-existent user
+        try
+        {
+            um.findUser( "admin" );
+            fail( "Expected UserNotFoundException!" );
+        }
+        catch ( UserNotFoundException e )
+        {
+            // do nothing, expected!
+        }
+        
+        /* Check into the event tracker. */
+        assertEquals( 1, getEventTracker().countInit );
+        assertNotNull( getEventTracker().lastDbFreshness );
+        assertTrue( getEventTracker().lastDbFreshness.booleanValue() );
+        
+        assertEquals( 1, getEventTracker().addedUsernames.size() );
+        assertEquals( 1, getEventTracker().removedUsernames.size() );
+        assertEquals( 0, getEventTracker().updatedUsernames.size() );
+    }
+
+    @Test
+    public void testFindUser()
+        throws Exception
+    {
+        assertCleanUserManager();
+        securityPolicy.setEnabled( false );
+
+        UserManager um = getUserManager();
+
+        // create and add a few users
+        User u1 = um.createUser( "admin", "Administrator", "admin@somedomain.com" );
+        u1.setPassword( "adminpass" );
+        um.addUser( u1 );
+
+        u1 = um.createUser( "administrator", "Administrator User", "administrator@somedomain.com" );
+        u1.setPassword( "password" );
+        um.addUser( u1 );
+
+        u1 = um.createUser( "root", "Root User", "root@somedomain.com" );
+        u1.setPassword( "rootpass" );
+        um.addUser( u1 );
+
+        assertEquals( 3, um.getUsers().size() );
+
+        // find an existing user
+        User user = um.findUser( "root" );
+        assertNotNull( user );
+        assertEquals( "root@somedomain.com", user.getEmail() );
+        assertEquals( "root", user.getPrincipal() );
+        assertEquals( "Root User", user.getFullName() );
+        // test if the plain string password is encoded and NULL'ified
+        assertNull( user.getPassword() );
+        // test if encoded password was as expected 
+        assertTrue( securityPolicy.getPasswordEncoder().isPasswordValid( user.getEncodedPassword(), "rootpass" ) );
+
+        // attempt finding a non-existent user
+        try
+        {
+            um.findUser( "non-existent" );
+            fail( "Expected UserNotFoundException!" );
+        }
+        catch ( UserNotFoundException e )
+        {
+            // do nothing, expected!
+        }
+        
+        /* Check into the event tracker. */
+        assertEquals( 1, getEventTracker().countInit );
+        assertNotNull( getEventTracker().lastDbFreshness );
+        assertTrue( getEventTracker().lastDbFreshness.booleanValue() );
+        
+        assertEquals( 3, getEventTracker().addedUsernames.size() );
+        assertEquals( 0, getEventTracker().removedUsernames.size() );
+        assertEquals( 0, getEventTracker().updatedUsernames.size() );
+    }
+
+    @Test
+    public void testFindUsersByQuery()
+    {
+        assertCleanUserManager();
+        securityPolicy.setEnabled( false );
+
+        UserManager um = getUserManager();
+
+        // create and add a few users
+        User u1 = um.createUser( "admin", "Administrator", "admin@somedomain.com" );
+        u1.setPassword( "adminpass" );
+        um.addUser( u1 );
+
+        u1 = um.createUser( "administrator", "Administrator User", "administrator@somedomain.com" );
+        u1.setPassword( "password" );
+        um.addUser( u1 );
+
+        u1 = um.createUser( "root", "Root User", "root@somedomain.com" );
+        u1.setPassword( "rootpass" );
+        um.addUser( u1 );
+
+        assertEquals( 3, um.getUsers().size() );
+
+        // Query by username
+        UserQuery query = um.createUserQuery();
+        query.setUsername( "Admin" );
+        assertEquals( 2, um.findUsersByQuery( query ).size() );
+
+        // Query by full name
+        query = um.createUserQuery();
+        query.setFullName( "Admin" );
+        assertEquals( 2, um.findUsersByQuery( query ).size() );
+
+        query = um.createUserQuery();
+        query.setFullName( "Administrator" );
+        assertEquals( 2, um.findUsersByQuery( query ).size() );
+
+        query = um.createUserQuery();
+        query.setFullName( "r User" );
+        assertEquals( 1, um.findUsersByQuery( query ).size() );
+
+        // Query by user name
+        query = um.createUserQuery();
+        query.setEmail( "somedomain" );
+        assertEquals( 3, um.findUsersByQuery( query ).size() );
+
+        // Query by email
+        query = um.createUserQuery();
+        query.setEmail( "root@" );
+        assertEquals( 1, um.findUsersByQuery( query ).size() );
+
+        // Query by illegal property
+        query = um.createUserQuery();
+        try
+        {
+            query.setOrderBy( "unknownString" );
+            fail( "Expected IllegalArgumentException" );
+        }
+        catch ( IllegalArgumentException e )
+        {
+
+        }
+
+        // Query with default ordering ascending
+        query = um.createUserQuery();
+        query.setOrderBy( UserQuery.ORDER_BY_EMAIL );
+        List<User> users = um.findUsersByQuery( query );
+        assertEquals( 3, users.size() );
+        assertEquals( "admin@somedomain.com", ( (User) users.get( 0 ) ).getEmail() );
+
+        // Query with ordering ascending
+        query = um.createUserQuery();
+        query.setOrderBy( UserQuery.ORDER_BY_EMAIL );
+        query.setAscending( false );
+        users = um.findUsersByQuery( query );
+        assertEquals( 3, users.size() );
+        assertEquals( "root@somedomain.com", ( (User) users.get( 0 ) ).getEmail() );
+
+        // Query with ordering descending, max 2 results
+        query = um.createUserQuery();
+        query.setOrderBy( UserQuery.ORDER_BY_EMAIL );
+        query.setAscending( false );
+        query.setMaxResults( 2 );
+        users = um.findUsersByQuery( query );
+        assertEquals( 2, users.size() );
+        assertEquals( "root@somedomain.com", ( (User) users.get( 0 ) ).getEmail() );
+
+        // Query with ordering ascending, max 2 results, first result = 2 so only one result
+        query = um.createUserQuery();
+        query.setOrderBy( UserQuery.ORDER_BY_EMAIL );
+        query.setAscending( false );
+        query.setMaxResults( 2 );
+        query.setFirstResult( 2 );
+        users = um.findUsersByQuery( query );
+        assertEquals( 1, users.size() );
+        assertEquals( "admin@somedomain.com", ( (User) users.get( 0 ) ).getEmail() );
+
+        // Query on more than one field
+        query = um.createUserQuery();
+        query.setOrderBy( UserQuery.ORDER_BY_EMAIL );
+        query.setFullName( "admin" );
+        query.setEmail( "admin@" );
+        users = um.findUsersByQuery( query );
+        assertEquals( 1, users.size() );
+        assertEquals( "admin@somedomain.com", ( (User) users.get( 0 ) ).getEmail() );
+    }
+
+    @Test
+    public void testUserExists()
+        throws Exception
+    {
+        assertCleanUserManager();
+        securityPolicy.setEnabled( false );
+
+        UserManager um = getUserManager();
+
+        // create and add a few users
+        User u1 = um.createUser( "admin", "Administrator", "admin@somedomain.com" );
+        u1.setPassword( "adminpass" );
+        um.addUser( u1 );
+
+        assertTrue( um.userExists( "admin" ) );
+        assertFalse( um.userExists( "voodoohatrack" ) );
+
+        /* Check into the event tracker. */
+        assertEquals( 1, getEventTracker().countInit );
+        assertNotNull( getEventTracker().lastDbFreshness );
+        assertTrue( getEventTracker().lastDbFreshness.booleanValue() );
+        
+        assertEquals( 1, getEventTracker().addedUsernames.size() );
+        assertEquals( 0, getEventTracker().removedUsernames.size() );
+        assertEquals( 0, getEventTracker().updatedUsernames.size() );
+    }
+
+    @Test
+    public void testUpdateUser()
+        throws Exception
+    {
+        assertCleanUserManager();
+        securityPolicy.setEnabled( false );
+
+        UserManager um = getUserManager();
+
+        // create and add a user
+        User u1 = um.createUser( "root", "Root User", "root@somedomain.com" );
+        u1.setPassword( "rootpass" );
+        u1 = um.addUser( u1 );
+
+        // find user
+        User user = um.findUser( "root" );
+        assertNotNull( user );
+        assertEquals( u1, user );
+
+        user.setEmail( "superuser@somedomain.com" );
+        user.setPassword( "superpass" );
+        user.setFullName( "Super User" );
+
+        um.updateUser( user );
+
+        // find updated user
+        user = um.findUser( "root" );
+        assertNotNull( user );
+        assertEquals( "superuser@somedomain.com", user.getEmail() );
+        assertEquals( "Super User", user.getFullName() );
+        assertTrue( securityPolicy.getPasswordEncoder().isPasswordValid( user.getEncodedPassword(), "superpass" ) );
+        
+        /* Check into the event tracker. */
+        assertEquals( 1, getEventTracker().countInit );
+        assertNotNull( getEventTracker().lastDbFreshness );
+        assertTrue( getEventTracker().lastDbFreshness.booleanValue() );
+        
+        assertEquals( 1, getEventTracker().addedUsernames.size() );
+        assertEquals( 0, getEventTracker().removedUsernames.size() );
+        assertEquals( 1, getEventTracker().updatedUsernames.size() );
+    }
+
+    @Test
+    public void testDeletePermanentUser()
+        throws UserNotFoundException
+    {
+        assertCleanUserManager();
+        securityPolicy.setEnabled( false );
+
+        UserManager um = getUserManager();
+        User user = um.createUser( "admin", "Administrator", "admin@somedomain.com" );
+        user.setPassword( "adminpass" );
+        user.setPermanent( true );
+        user = um.addUser( user );
+
+        assertEquals( 1, um.getUsers().size() );
+
+        try
+        {
+            um.deleteUser( user.getPrincipal() );
+            fail("Deleting permanent user shold throw PermanentUserException.");
+        } catch( PermanentUserException e )
+        {
+            // do nothing, expected route.
+        }
+        
+        assertEquals( 1, um.getUsers().size() );
+
+        // attempt to finding user
+        User admin = um.findUser( "admin" );
+        assertNotNull( admin );
+        assertEquals( user.getEmail(), admin.getEmail() );
+        assertEquals( user.getFullName(), admin.getFullName() );
+        
+        /* Check into the event tracker. */
+        assertEquals( 1, getEventTracker().countInit );
+        assertNotNull( getEventTracker().lastDbFreshness );
+        assertTrue( getEventTracker().lastDbFreshness.booleanValue() );
+        
+        assertEquals( 1, getEventTracker().addedUsernames.size() );
+        assertEquals( 0, getEventTracker().removedUsernames.size() );
+        assertEquals( 0, getEventTracker().updatedUsernames.size() );    }
+
+    public UserManagerEventTracker getEventTracker()
+    {
+        return eventTracker;
+    }
+
+    public void setEventTracker( UserManagerEventTracker eventTracker )
+    {
+        this.eventTracker = eventTracker;
+    }
+}

Propchange: archiva/redback/redback-core/trunk/redback-users/redback-users-tests/src/main/java/org/codehaus/plexus/redback/users/provider/test/AbstractUserManagerTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: archiva/redback/redback-core/trunk/redback-users/redback-users-tests/src/main/java/org/codehaus/plexus/redback/users/provider/test/AbstractUserManagerTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: archiva/redback/redback-core/trunk/redback-users/redback-users-tests/src/main/java/org/codehaus/plexus/redback/users/provider/test/UserManagerEventTracker.java
URL: http://svn.apache.org/viewvc/archiva/redback/redback-core/trunk/redback-users/redback-users-tests/src/main/java/org/codehaus/plexus/redback/users/provider/test/UserManagerEventTracker.java?rev=1310268&view=auto
==============================================================================
--- archiva/redback/redback-core/trunk/redback-users/redback-users-tests/src/main/java/org/codehaus/plexus/redback/users/provider/test/UserManagerEventTracker.java (added)
+++ archiva/redback/redback-core/trunk/redback-users/redback-users-tests/src/main/java/org/codehaus/plexus/redback/users/provider/test/UserManagerEventTracker.java Fri Apr  6 09:58:14 2012
@@ -0,0 +1,72 @@
+package org.codehaus.plexus.redback.users.provider.test;
+
+/*
+ * Copyright 2001-2006 The Codehaus.
+ *
+ * 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.
+ */
+
+import org.codehaus.plexus.redback.users.User;
+import org.codehaus.plexus.redback.users.UserManagerListener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * UserManagerEventTracker 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class UserManagerEventTracker
+    implements UserManagerListener
+{
+    public long countInit = 0;
+
+    public Boolean lastDbFreshness;
+
+    public List<String> addedUsernames = new ArrayList<String>();
+
+    public List<String> removedUsernames = new ArrayList<String>();
+
+    public List<String> updatedUsernames = new ArrayList<String>();
+
+    public void userManagerInit( boolean freshDatabase )
+    {
+        countInit++;
+        lastDbFreshness = Boolean.valueOf( freshDatabase );
+    }
+
+    private void addUniqueUsername( List<String> list, User user )
+    {
+        if ( !list.contains( user.getUsername() ) )
+        {
+            list.add( user.getUsername() );
+        }
+    }
+
+    public void userManagerUserAdded( User user )
+    {
+        addUniqueUsername( addedUsernames, user );
+    }
+
+    public void userManagerUserRemoved( User user )
+    {
+        addUniqueUsername( removedUsernames, user );
+    }
+
+    public void userManagerUserUpdated( User user )
+    {
+        addUniqueUsername( updatedUsernames, user );
+    }
+}

Propchange: archiva/redback/redback-core/trunk/redback-users/redback-users-tests/src/main/java/org/codehaus/plexus/redback/users/provider/test/UserManagerEventTracker.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: archiva/redback/redback-core/trunk/redback-users/redback-users-tests/src/main/java/org/codehaus/plexus/redback/users/provider/test/UserManagerEventTracker.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: archiva/redback/redback-core/trunk/src/site/site.xml
URL: http://svn.apache.org/viewvc/archiva/redback/redback-core/trunk/src/site/site.xml?rev=1310268&view=auto
==============================================================================
--- archiva/redback/redback-core/trunk/src/site/site.xml (added)
+++ archiva/redback/redback-core/trunk/src/site/site.xml Fri Apr  6 09:58:14 2012
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!--
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * 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.
+ */
+-->
+
+<project name="Redback">
+  <bannerLeft>
+    <name>Redback</name>
+    <href>http://redback.codehaus.org</href>
+  </bannerLeft>
+  <!--
+  <bannerRight>
+    <name>The Codehaus</name>
+    <href>http://codehaus.org</href>
+    <src>http://media.codehaus.org/images/unity-codehaus-logo.png</src>
+  </bannerRight>
+  -->
+  <skin>
+    <groupId>org.apache.maven.skins</groupId>
+    <artifactId>maven-fluido-skin</artifactId>
+    <version>1.1</version>
+  </skin>
+
+  <publishDate format="yyyy-MM-dd" position="left" />
+  <version position="left" />
+ 
+  <body>
+    <links>
+      <item name="The Codehaus" href="http://codehaus.org" />
+      <item name="Redback" href="http://redback.codehaus.org"/>
+      <item name="Redback Components" href="http://redback.codehaus.org/components"/>
+    </links>
+
+    <menu ref="reports" />
+    <menu ref="modules" />
+
+  </body>
+</project>

Propchange: archiva/redback/redback-core/trunk/src/site/site.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: archiva/redback/redback-core/trunk/src/site/site.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision