You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ca...@apache.org on 2006/09/01 22:27:02 UTC

svn commit: r439463 - /maven/shared/trunk/maven-user/maven-user-model/src/test/java/org/apache/maven/user/model/impl/DefaultUserManagerTest.java

Author: carlos
Date: Fri Sep  1 13:27:01 2006
New Revision: 439463

URL: http://svn.apache.org/viewvc?rev=439463&view=rev
Log:
Add tests for password validation

Modified:
    maven/shared/trunk/maven-user/maven-user-model/src/test/java/org/apache/maven/user/model/impl/DefaultUserManagerTest.java

Modified: maven/shared/trunk/maven-user/maven-user-model/src/test/java/org/apache/maven/user/model/impl/DefaultUserManagerTest.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-model/src/test/java/org/apache/maven/user/model/impl/DefaultUserManagerTest.java?rev=439463&r1=439462&r2=439463&view=diff
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-model/src/test/java/org/apache/maven/user/model/impl/DefaultUserManagerTest.java (original)
+++ maven/shared/trunk/maven-user/maven-user-model/src/test/java/org/apache/maven/user/model/impl/DefaultUserManagerTest.java Fri Sep  1 13:27:01 2006
@@ -25,10 +25,16 @@
 import javax.jdo.PersistenceManager;
 import javax.jdo.PersistenceManagerFactory;
 
+import org.apache.maven.user.model.PasswordRuleViolationException;
 import org.apache.maven.user.model.Permission;
 import org.apache.maven.user.model.User;
 import org.apache.maven.user.model.UserGroup;
 import org.apache.maven.user.model.UserManager;
+import org.apache.maven.user.model.rules.AlphaPasswordRule;
+import org.apache.maven.user.model.rules.CharacterLengthPasswordRule;
+import org.apache.maven.user.model.rules.MustHavePasswordRule;
+import org.apache.maven.user.model.rules.NumericalPasswordRule;
+import org.apache.maven.user.model.rules.ReusePasswordRule;
 import org.codehaus.plexus.PlexusTestCase;
 import org.codehaus.plexus.jdo.ConfigurableJdoFactory;
 import org.codehaus.plexus.jdo.DefaultConfigurableJdoFactory;
@@ -220,10 +226,7 @@
 
     public void testAddGetUserGroupByName()
     {
-        assertNotNull( getUserManager() );
-
-        assertEquals( "New UserManager should contain no users.", 0, getUserManager().getUsers().size() ); //$NON-NLS-1$
-        assertEquals( "New UserManager should contain no groups.", 0, getUserManager().getUserGroups().size() ); //$NON-NLS-1$
+        assertCleanUserManager();
 
         UserGroup british = new UserGroup();
         british.setName( "raf" ); //$NON-NLS-1$
@@ -245,10 +248,7 @@
 
     public void testAddGetUserGroupById()
     {
-        assertNotNull( getUserManager() );
-
-        assertEquals( "New UserManager should contain no users.", 0, getUserManager().getUsers().size() ); //$NON-NLS-1$
-        assertEquals( "New UserManager should contain no groups.", 0, getUserManager().getUserGroups().size() ); //$NON-NLS-1$
+        assertCleanUserManager();
 
         UserGroup british = new UserGroup();
         british.setName( "raf" ); //$NON-NLS-1$
@@ -276,10 +276,7 @@
 
     public void testUpdateUserGroup()
     {
-        assertNotNull( getUserManager() );
-
-        assertEquals( "New UserManager should contain no users.", 0, getUserManager().getUsers().size() ); //$NON-NLS-1$
-        assertEquals( "New UserManager should contain no groups.", 0, getUserManager().getUserGroups().size() ); //$NON-NLS-1$
+        assertCleanUserManager();
 
         UserGroup british = new UserGroup();
         british.setName( "raf" ); //$NON-NLS-1$
@@ -302,10 +299,7 @@
 
     public void testGetUserGroups()
     {
-        assertNotNull( getUserManager() );
-
-        assertEquals( "New UserManager should contain no users.", 0, getUserManager().getUsers().size() ); //$NON-NLS-1$
-        assertEquals( "New UserManager should contain no groups.", 0, getUserManager().getUserGroups().size() ); //$NON-NLS-1$
+        assertCleanUserManager();
 
         UserGroup british = new UserGroup();
         british.setName( "raf" ); //$NON-NLS-1$
@@ -326,10 +320,7 @@
 
     public void testRemoveUserGroup()
     {
-        assertNotNull( getUserManager() );
-
-        assertEquals( "New UserManager should contain no users.", 0, getUserManager().getUsers().size() ); //$NON-NLS-1$
-        assertEquals( "New UserManager should contain no groups.", 0, getUserManager().getUserGroups().size() ); //$NON-NLS-1$
+        assertCleanUserManager();
 
         UserGroup british = new UserGroup();
         british.setName( "raf" ); //$NON-NLS-1$
@@ -367,10 +358,7 @@
 
     public void testGetSetUserGroupInUserLoose() throws Exception
     {
-        assertNotNull( getUserManager() );
-
-        assertEquals( "New UserManager should contain no users.", 0, getUserManager().getUsers().size() ); //$NON-NLS-1$
-        assertEquals( "New UserManager should contain no groups.", 0, getUserManager().getUserGroups().size() ); //$NON-NLS-1$
+        assertCleanUserManager();
 
         UserGroup british = new UserGroup();
         british.setName( "raf" ); //$NON-NLS-1$
@@ -399,10 +387,7 @@
 
     public void testGetSetUserGroupInUserPreloaded() throws Exception
     {
-        assertNotNull( getUserManager() );
-
-        assertEquals( "New UserManager should contain no users.", 0, getUserManager().getUsers().size() ); //$NON-NLS-1$
-        assertEquals( "New UserManager should contain no groups.", 0, getUserManager().getUserGroups().size() ); //$NON-NLS-1$
+        assertCleanUserManager();
 
         UserGroup british = new UserGroup();
         british.setName( "raf" ); //$NON-NLS-1$
@@ -435,10 +420,7 @@
 
     public void testGetSetPermissions()
     {
-        assertNotNull( getUserManager() );
-
-        assertEquals( "New UserManager should contain no users.", 0, getUserManager().getUsers().size() ); //$NON-NLS-1$
-        assertEquals( "New UserManager should contain no groups.", 0, getUserManager().getUserGroups().size() ); //$NON-NLS-1$
+        assertCleanUserManager();
 
         Permission canFly = new Permission();
         canFly.setName( "can_fly" ); //$NON-NLS-1$
@@ -475,11 +457,7 @@
     public void testPolicyLoginFailureLock()
         throws Exception
     {
-        assertNotNull( getUserManager() );
-
-        assertEquals( "New UserManager should contain no users.", 0, getUserManager().getUsers().size() ); //$NON-NLS-1$
-        assertEquals( "New UserManager should contain no groups.", 0, getUserManager().getUserGroups().size() ); //$NON-NLS-1$
-        assertNotNull( "New UserManager should have a Security Policy", getUserManager().getSecurityPolicy() ); //$NON-NLS-1$
+        assertCleanUserManager();
 
         User rattenborough = new User();
         rattenborough.setUsername( "rattenborough" ); //$NON-NLS-1$
@@ -505,5 +483,241 @@
 
         assertFalse( getUserManager().login( "rattenborough", "big x" ) );
         assertTrue( getUserManager().getUser( "rattenborough" ).isLocked() );
+    }
+    
+    public void testAlphaPasswordRuleValidation()
+    {
+        assertCleanUserManager();
+
+        AlphaPasswordRule alphaRule = new AlphaPasswordRule();
+        alphaRule.setMinimumCount( 3 );
+        getUserManager().getSecurityPolicy().addPasswordRule( alphaRule );
+        try
+        {
+            User validPwd = new User();
+            validPwd.setUsername( "validPwd" );
+            validPwd.setPassword( "a1a2a34567890~!@#$%^&*()_+-=[]{|\\/?<>,.:;\"'" );
+            getUserManager().addUser( validPwd );
+            assertEquals( 1, getUserManager().getUsers().size() );
+            
+            getUserManager().removeUser( "validPwd" );
+            assertEquals( 0, getUserManager().getUsers().size() );
+        }
+        catch( PasswordRuleViolationException e )
+        {
+            fail("Should NOT throw a PasswordRuleViolationException! " + e.getMessage());
+        }
+        
+        try
+        {
+            User notEnoughAlpha1 = new User();
+            notEnoughAlpha1.setUsername( "notEnoughAlpha" );
+            notEnoughAlpha1.setPassword( "1a2a34567890~!@#$%^&*()_+-=[]{|\\/?<>,.:;\"'" );
+            getUserManager().addUser( notEnoughAlpha1 );
+            fail("Password with less than minimum alpha-numeric chars. Should throw a PasswordRuleViolationException!");
+        }
+        catch( PasswordRuleViolationException e )
+        {
+        }
+    }
+        
+    public void testCharacterLengthPasswordRuleValidation()
+    {
+        assertCleanUserManager();
+
+        CharacterLengthPasswordRule charLengthRule = new CharacterLengthPasswordRule();
+        charLengthRule.setMinimumCharacters( 3 );
+        charLengthRule.setMaximumCharacters( 9 );
+        getUserManager().getSecurityPolicy().getPasswordRules().clear();
+        getUserManager().getSecurityPolicy().addPasswordRule( charLengthRule );
+        try
+        {
+            User minLengthPwd = new User();
+            minLengthPwd.setUsername( "minLengthPwd" );
+            minLengthPwd.setPassword( "123" );
+            getUserManager().addUser( minLengthPwd );
+            assertEquals( 1, getUserManager().getUsers().size() );
+            
+            User midLengthPwd = new User();
+            midLengthPwd.setUsername( "midLengthPwd" );
+            midLengthPwd.setPassword( "12345" );
+            getUserManager().addUser( midLengthPwd );
+            assertEquals( 2, getUserManager().getUsers().size() );
+            
+            User maxLengthPwd = new User();
+            maxLengthPwd.setUsername( "maxLengthPwd" );
+            maxLengthPwd.setPassword( "123456789" );
+            getUserManager().addUser( maxLengthPwd );
+            assertEquals( 3, getUserManager().getUsers().size() );
+
+            getUserManager().removeUser( "minLengthPwd" );
+            getUserManager().removeUser( "midLengthPwd" );
+            getUserManager().removeUser( "maxLengthPwd" );
+            assertEquals( 0, getUserManager().getUsers().size() );
+        }
+        catch( PasswordRuleViolationException e )
+        {
+            fail("Should NOT throw a PasswordRuleViolationException! " + e.getMessage());
+        }
+
+        try
+        {
+            User tooShortPwd = new User();
+            tooShortPwd.setUsername( "tooShortPwd" );
+            tooShortPwd.setPassword( "12" );
+            getUserManager().addUser( tooShortPwd );
+            fail("Password less than minimum length. Should throw a PasswordRuleViolationException!");
+        }
+        catch( PasswordRuleViolationException e )
+        {
+        }
+        
+        try
+        {
+            User tooLongPwd = new User();
+            tooLongPwd.setPassword( "passwordTooLong" );
+            getUserManager().addUser( tooLongPwd );
+            fail("Password exceeds maximum length. Should throw a PasswordRuleViolationException!");
+        }
+        catch( PasswordRuleViolationException e )
+        {
+        }
+    }
+        
+    public void testMustHavePasswordRuleValidation()
+    {
+        assertCleanUserManager();
+
+        MustHavePasswordRule mustHaveRule = new MustHavePasswordRule();
+        getUserManager().getSecurityPolicy().addPasswordRule( mustHaveRule );
+        try
+        {
+            User nonEmptyPwd = new User();
+            nonEmptyPwd.setUsername( "nonEmptyPwd" );
+            nonEmptyPwd.setPassword( "1" );
+            getUserManager().addUser( nonEmptyPwd );
+            assertEquals( 1, getUserManager().getUsers().size() );
+
+            getUserManager().removeUser( "nonEmptyPwd" );
+            assertEquals( 0, getUserManager().getUsers().size() );
+        }
+        catch( PasswordRuleViolationException e )
+        {
+            fail("Should NOT throw a PasswordRuleViolationException! " + e.getMessage());
+        }
+
+        try
+        {
+            User emptyPwd = new User();
+            emptyPwd.setUsername( "emptyPwd" );
+            emptyPwd.setPassword( "" );
+            getUserManager().addUser( emptyPwd );
+            fail("Password is empty. Should throw a PasswordRuleViolationException!");
+        }
+        catch( PasswordRuleViolationException e )
+        {
+        }
+
+        try
+        {
+            User nullPwd = new User();
+            nullPwd.setUsername( "nullPwd" );
+            nullPwd.setPassword( null );
+            getUserManager().addUser( nullPwd );
+            fail("Password is null. Should throw a PasswordRuleViolationException!");
+        }
+        catch( PasswordRuleViolationException e )
+        {
+        }
+    }
+
+    public void testNumericalPasswordRuleValidation()
+    {
+        assertCleanUserManager();
+        
+        NumericalPasswordRule numRule = new NumericalPasswordRule();
+        numRule.setMinimumCount( 3 );
+        getUserManager().getSecurityPolicy().addPasswordRule( numRule );
+        try
+        {
+            User validPwd = new User();
+            validPwd.setUsername( "validPwd" );
+            validPwd.setPassword( "a1b23cdefghijklmnopqrstuvwxyz~!@#$%^&*()_+-=[]{|\\/?<>,.:;\"'" );
+            getUserManager().addUser( validPwd );
+            assertEquals( 1, getUserManager().getUsers().size() );
+
+            getUserManager().removeUser( "validPwd" );
+            assertEquals( 0, getUserManager().getUsers().size() );
+        }
+        catch( PasswordRuleViolationException e )
+        {
+            fail("Should NOT throw a PasswordRuleViolationException! " + e.getMessage());
+        }
+        
+        try
+        {
+            User notEnoughNum = new User();
+            notEnoughNum.setUsername( "notEnoughNum" );
+            notEnoughNum.setPassword( "12abcdefghijklmnopqrstuvwxyz~!@#$%^&*()_+-=[]{|\\/?<>,.:;\"'" );
+            getUserManager().addUser( notEnoughNum );
+            fail("Password with less than minimum numeric chars. Should throw a PasswordRuleViolationException!");
+        }
+        catch( PasswordRuleViolationException e )
+        {
+        }
+    }
+    
+    //TODO Someone please check if this test satifies the use case.
+    public void testReusePasswordRuleValidation()
+    {
+        assertCleanUserManager();
+        
+        ReusePasswordRule reuseRule = new ReusePasswordRule();
+        getUserManager().getSecurityPolicy().addPasswordRule( reuseRule );
+        
+        try
+        {
+            User user = new User();
+            user.setUsername( "user" );
+            user.setPassword( "oldPassword" );
+            getUserManager().addUser( user );
+            assertEquals( 1, getUserManager().getUsers().size() );
+            
+            User fetch1 = getUserManager().getUser( "user" ); 
+            fetch1.setPassword( "newPassword1" );
+            getUserManager().updateUser( fetch1 );
+            
+            User fetch2 = getUserManager().getUser( "user" ); 
+            fetch2.setPassword( "newPassword2" );
+            getUserManager().updateUser( fetch2 );
+        }
+        catch( PasswordRuleViolationException e )
+        {
+            fail("Should NOT throw a PasswordRuleViolationException! " + e.getMessage());
+        }
+        
+        try
+        {
+            User fetch3 = getUserManager().getUser( "user" );
+            //reuse old password
+            fetch3.setPassword( "oldPassword" );
+            getUserManager().updateUser( fetch3 );
+            fail("Password is being reused. Should throw a PasswordRuleViolationException!");
+        }
+        catch( PasswordRuleViolationException e )
+        {
+        }
+        
+        getUserManager().removeUser( "user" );
+        assertEquals( 0, getUserManager().getUsers().size() );
+    }
+        
+    private void assertCleanUserManager()
+    {
+        assertNotNull( getUserManager() );
+        
+        assertEquals( "New UserManager should contain no users.", 0, getUserManager().getUsers().size() );
+        assertEquals( "New UserManager should contain no groups.", 0, getUserManager().getUserGroups().size() );
+        assertNotNull( "New UserManager should have a Security Policy", getUserManager().getSecurityPolicy() );
     }
 }