You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by sm...@apache.org on 2018/08/25 17:30:08 UTC

directory-fortress-core git commit: FC-239 - Some Abac test cases...

Repository: directory-fortress-core
Updated Branches:
  refs/heads/master ea563c774 -> 2bcd1b3d9


FC-239 - Some Abac test cases...


Project: http://git-wip-us.apache.org/repos/asf/directory-fortress-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-fortress-core/commit/2bcd1b3d
Tree: http://git-wip-us.apache.org/repos/asf/directory-fortress-core/tree/2bcd1b3d
Diff: http://git-wip-us.apache.org/repos/asf/directory-fortress-core/diff/2bcd1b3d

Branch: refs/heads/master
Commit: 2bcd1b3d9048710b47d27a7c0288a49214fbfa2f
Parents: ea563c7
Author: Shawn McKinney <sm...@apache.org>
Authored: Sat Aug 25 11:56:58 2018 -0500
Committer: Shawn McKinney <sm...@apache.org>
Committed: Sat Aug 25 11:56:58 2018 -0500

----------------------------------------------------------------------
 .../fortress/core/impl/AdminMgrImplTest.java    | 221 ++++++++++++++++---
 .../fortress/core/impl/FortressJUnitTest.java   |   5 +-
 .../fortress/core/impl/PermTestData.java        | 180 +++++++++++++++
 .../fortress/core/impl/RoleTestData.java        | 177 +++++++++++++++
 .../fortress/core/impl/UserTestData.java        |  95 +++++++-
 5 files changed, 639 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/2bcd1b3d/src/test/java/org/apache/directory/fortress/core/impl/AdminMgrImplTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/directory/fortress/core/impl/AdminMgrImplTest.java b/src/test/java/org/apache/directory/fortress/core/impl/AdminMgrImplTest.java
index 82a7b75..6b87cb6 100755
--- a/src/test/java/org/apache/directory/fortress/core/impl/AdminMgrImplTest.java
+++ b/src/test/java/org/apache/directory/fortress/core/impl/AdminMgrImplTest.java
@@ -123,6 +123,7 @@ public class AdminMgrImplTest extends TestCase
         addUsers( "ADD-USRS TU19 TR7_ASC", UserTestData.USERS_TU19U_TR7_ASC, true );
         addUsers( "ADD-USRS TU20 TR5_HIER", UserTestData.USERS_TU20U_TR5B, true );
         addUsers( "ADD-USRS TU21 DSD_BRUNO", UserTestData.USERS_TU21_DSD_BRUNO, true );
+        addUsers( "ADD-USRS TU22 ABAC", UserTestData.USERS_TU22_ABAC, true );
     }
 
 
@@ -269,6 +270,7 @@ public class AdminMgrImplTest extends TestCase
         deleteUsers( "FDEL-USRS TU19_TR7_ASC", UserTestData.USERS_TU19U_TR7_ASC, true, true );
         deleteUsers( "FDEL-USRS TU20_TR5_HIER", UserTestData.USERS_TU20U_TR5B, true, true );
         deleteUsers( "FDEL-USRS TU21 DSD_BRUNO", UserTestData.USERS_TU21_DSD_BRUNO, true, true );
+        deleteUsers( "DEL-USRS TU22_ABAC", UserTestData.USERS_TU22_ABAC, true, true );
     }
 
 
@@ -464,7 +466,9 @@ public class AdminMgrImplTest extends TestCase
         addRoles( "ADD-RLS ROLES_TR10_DSD", RoleTestData.ROLES_TR10_DSD );
         addRoles( "ADD-RLS ROLES_TR16_SD", RoleTestData.ROLES_TR16_SD );
         addRoles( "ADD-RLS ROLES_TR17_DSD_BRUNO", RoleTestData.ROLES_TR17_DSD_BRUNO );
-
+        addRoles( "ADD-RLS ROLES_ABAC_WASHERS", RoleTestData.ROLES_ABAC_WASHERS );
+        addRoles( "ADD-RLS ROLES_ABAC_TELLERS", RoleTestData.ROLES_ABAC_TELLERS );
+        addRoles( "ADD-RLS ROLES_ABAC_USERS", RoleTestData.ROLES_ABAC_USERS );
     }
 
 
@@ -510,6 +514,9 @@ public class AdminMgrImplTest extends TestCase
         deleteRoles( "DEL-RLS ROLES_TR10_DSD", RoleTestData.ROLES_TR10_DSD );
         deleteRoles( "DEL-RLS ROLES_TR16_SD", RoleTestData.ROLES_TR16_SD );
         deleteRoles( "DEL-RLS ROLES_TR17_DSD_BRUNO", RoleTestData.ROLES_TR17_DSD_BRUNO );
+        deleteRoles( "DEL-RLS ROLES_ABAC_WASHERS", RoleTestData.ROLES_ABAC_WASHERS );
+        deleteRoles( "DEL-RLS ROLES_ABAC_TELLERS", RoleTestData.ROLES_ABAC_TELLERS );
+        deleteRoles( "DEL-RLS ROLES_ABAC_USERS", RoleTestData.ROLES_ABAC_USERS );
     }
 
 
@@ -1005,6 +1012,7 @@ public class AdminMgrImplTest extends TestCase
         createDsdSet( "ADD-DSD T5", RoleTestData.DSD_T5 );
         createDsdSet( "ADD-DSD T6", RoleTestData.DSD_T6 );
         createDsdSet( "ADD-DSD T8 BRUNO", RoleTestData.DSD_T8_BRUNO );
+        createDsdSet( "ADD-DSD TR18 ABAC6", RoleTestData.DSD_TR18_ABAC );
     }
 
 
@@ -1083,6 +1091,7 @@ public class AdminMgrImplTest extends TestCase
         deleteDsdSet( "DEL-DSD T5", RoleTestData.DSD_T5 );
         deleteDsdSet( "DEL-DSD T6", RoleTestData.DSD_T6 );
         deleteDsdSet( "DEL-DSD T8", RoleTestData.DSD_T7 );
+        deleteDsdSet( "DEL-DSD TR18 ABAC6", RoleTestData.DSD_TR18_ABAC );
     }
 
 
@@ -1404,6 +1413,9 @@ public class AdminMgrImplTest extends TestCase
         assignUsers( "ASGN-USRS TU1 TR1", UserTestData.USERS_TU1, RoleTestData.ROLES_TR1, false );
         assignUsers( "ASGN-USRS TU4 TR2", UserTestData.USERS_TU4, RoleTestData.ROLES_TR2, true );
         assignUsers( "ASGN-USRS TU3 TR3", UserTestData.USERS_TU3, RoleTestData.ROLES_TR3, true );
+        assignUsers( "ASGN-USERS TU22 ABAC WASHERS", UserTestData.USERS_TU22_ABAC, RoleTestData.ROLES_ABAC_WASHERS, true, false );
+        assignUsers( "ASGN-USERS TU22 ABAC TELLERS", UserTestData.USERS_TU22_ABAC, RoleTestData.ROLES_ABAC_TELLERS, true, false );
+        assignUsers( "ASGN-USERS TU22 ABAC USERS", UserTestData.USERS_TU22_ABAC, RoleTestData.ROLES_ABAC_USERS, true, false );
         assignUsersH( "ASGN-USRS_H TU7 HIER TR5 HIER", UserTestData.USERS_TU7_HIER, RoleTestData.ROLES_TR5_HIER, true );
         assignUsersH( "ASGN-USRS_H TU20 TR5B HIER", UserTestData.USERS_TU20U_TR5B, RoleTestData.ROLES_TR5B, true );
         assignUsersSSD( "ASGN-USRS_SSDT1 TU8 SSD_T1", UserTestData.USERS_TU8_SSD, RoleTestData.SSD_T1 );
@@ -1421,13 +1433,20 @@ public class AdminMgrImplTest extends TestCase
     }
 
 
+    public static void assignUsers( String msg, String[][] uArray, String[][] rArray, boolean setTemporal )
+    {
+        assignUsers( msg, uArray, rArray, setTemporal, true );
+    }
+
     /**
+     * Assign the list of users to the list of roles. Perform some rudimentary testing to verify the assignments worked.
+     *
      * @param msg
      * @param uArray
      * @param rArray
      * @param setTemporal
      */
-    public static void assignUsers( String msg, String[][] uArray, String[][] rArray, boolean setTemporal )
+    private static void assignUsers( String msg, String[][] uArray, String[][] rArray, boolean setTemporal, boolean performListCheck )
     {
         LogUtil.logIt( msg );
         try
@@ -1453,15 +1472,19 @@ public class AdminMgrImplTest extends TestCase
                     adminMgr.assignUser( uRole );
                     LOG.debug( "assignUsers user [" + user.getUserId() + "] role [" + uRole.getName()
                         + "] successful" );
-                    // Let's double check the number of users not associated with role:
-                    // This one retrieves the collection of all "roleOccupant" attributes associated with the role node:
-                    List<String> users = reviewMgr.assignedUsers( RoleTestData.getRole( rle ), rArray.length );
-                    // This one searches across all Users and pull back list of type "User":
-                    List<User> users2 = reviewMgr.authorizedUsers( RoleTestData.getRole( rle ) );
-                    assertNotNull( users );
-                    assertNotNull( users2 );
-                    assertTrue( CLS_NM + ".assignUsers list size check", i == users.size() );
-                    assertTrue( CLS_NM + ".assignUsers list2 size check", i == users2.size() );
+
+                    if(performListCheck)
+                    {
+                        // Let's double check the number of users not associated with role:
+                        // This one retrieves the collection of all "roleOccupant" attributes associated with the role node:
+                        List<String> users = reviewMgr.assignedUsers( RoleTestData.getRole( rle ), rArray.length );
+                        // This one searches across all Users and pull back list of type "User":
+                        List<User> users2 = reviewMgr.authorizedUsers( RoleTestData.getRole( rle ) );
+                        assertNotNull( users );
+                        assertNotNull( users2 );
+                        assertTrue( CLS_NM + ".assignUsers list size check", i == users.size() );
+                        assertTrue( CLS_NM + ".assignUsers list2 size check", i == users2.size() );
+                    }
                 }
             }
         }
@@ -1595,10 +1618,10 @@ public class AdminMgrImplTest extends TestCase
                     }
                     catch ( SecurityException ex )
                     {
-                        LOG.error( "assignUsersDSD caught SecurityException rc=" + ex.getErrorId() + ", msg="
-                            + ex.getMessage(), ex );
-                        fail( CLS_NM + "assignUsersDSD user [" + user.getUserId() + "] role [" + role + "] dsd ["
-                            + dsd.getName() + "] failed" );
+                        LOG.error( "assignUsersDSD caught SecurityException rc=" + ex.getErrorId() + ", msg=" + ex
+                            .getMessage(), ex );
+                        fail( CLS_NM + "assignUsersDSD user [" + user.getUserId() + "] role [" + role + "] dsd [" +
+                            dsd.getName() + "] failed" );
                     }
                 }
             }
@@ -1612,24 +1635,52 @@ public class AdminMgrImplTest extends TestCase
         }
     }
 
-
     public void testDeassignUser()
     {
         //     public void deassignUser(User user, Role role)
         //deassignUsers( "DEASGN-USRS TU1 TR1", UserTestData.USERS_TU1, RoleTestData.ROLES_TR1 );
         deassignUsers( "DEASGN-USRS TU4 TR2", UserTestData.USERS_TU4, RoleTestData.ROLES_TR2 );
         deassignUsers( "DEASGN-USRS TU3 TR3", UserTestData.USERS_TU3, RoleTestData.ROLES_TR3 );
+        deassignUsers( "DEASGN-USERS TU22 ABAC WASHERS", UserTestData.USERS_TU22_ABAC, RoleTestData
+            .ROLES_ABAC_WASHERS, false );
+        deassignUsers( "DEASGN-USERS TU22 ABAC TELLERS", UserTestData.USERS_TU22_ABAC, RoleTestData.ROLES_ABAC_TELLERS, false );
+        deassignUsers( "DEASGN-USERS TU22 ABAC USERS", UserTestData.USERS_TU22_ABAC, RoleTestData.ROLES_ABAC_USERS, false );
         deassignUsersH( "DEASGN-USRS_H TU7 TR5 HIER", UserTestData.USERS_TU7_HIER, RoleTestData.ROLES_TR5_HIER );
         deassignUsersH( "DEASGN-USRS_H TU20 TR5B HIER", UserTestData.USERS_TU20U_TR5B, RoleTestData.ROLES_TR5B );
     }
 
 
+/*
+    public void testDeassignUser2()
+    {
+        //     public void deassignUser(User user, Role role)
+        //deassignUsers( "DEASGN-USRS TU1 TR1", UserTestData.USERS_TU1, RoleTestData.ROLES_TR1 );
+        deassignUsers( "DEASGN-USRS TU4 TR2", UserTestData.USERS_TU4, RoleTestData.ROLES_TR2 );
+        deassignUsers( "DEASGN-USRS TU3 TR3", UserTestData.USERS_TU3, RoleTestData.ROLES_TR3 );
+        deassignUsers( "DEASGN-USERS TU7 TR5 HIER", UserTestData.USERS_TU7_HIER, RoleTestData.ROLES_TR5_HIER, false );
+
+
+        deassignUsers( "DEASGN-USERS TU22 ABAC WASHERS", UserTestData.USERS_TU22_ABAC, RoleTestData
+            .ROLES_ABAC_WASHERS, false );
+        deassignUsers( "DEASGN-USERS TU22 ABAC TELLERS", UserTestData.USERS_TU22_ABAC, RoleTestData.ROLES_ABAC_TELLERS, false );
+        deassignUsers( "DEASGN-USERS TU22 ABAC USERS", UserTestData.USERS_TU22_ABAC, RoleTestData.ROLES_ABAC_USERS, false );
+        deassignUsersH( "DEASGN-USRS_H TU7 TR5 HIER", UserTestData.USERS_TU7_HIER, RoleTestData.ROLES_TR5_HIER );
+        deassignUsersH( "DEASGN-USRS_H TU20 TR5B HIER", UserTestData.USERS_TU20U_TR5B, RoleTestData.ROLES_TR5B );
+    }
+*/
+
+
+    void deassignUsers( String msg, String[][] uArray, String[][] rArray )
+    {
+        deassignUsers( msg, uArray, rArray, true );
+    }
+
     /**
      * @param msg
      * @param uArray
      * @param rArray
      */
-    void deassignUsers( String msg, String[][] uArray, String[][] rArray )
+    private void deassignUsers( String msg, String[][] uArray, String[][] rArray, boolean performListCheck )
     {
         LogUtil.logIt( msg );
         try
@@ -1646,24 +1697,28 @@ public class AdminMgrImplTest extends TestCase
                     adminMgr.deassignUser( uRole );
                     LOG.debug( "deassignUsers user [" + uRole.getUserId() + "] role [" + uRole.getName()
                         + "] successful" );
-                    // Double check the number of users associated with role:
-                    // This one retrieves the collection of all "roleOccupant" attributes associated with the role node:                    
-                    List<String> users = reviewMgr.assignedUsers( RoleTestData.getRole( rle ), rArray.length );
-                    // This one searches across all Users and pull back list of type "User":
-                    List<User> users2 = reviewMgr.authorizedUsers( RoleTestData.getRole( rle ) );
-                    assertNotNull( users );
-                    assertNotNull( users2 );
-
-                    // If this is the last user deassigned from role, both lists will be returned empty:
-                    if ( i == uArray.length )
-                    {
-                        assertTrue( users.size() == 0 );
-                        assertTrue( users2.size() == 0 );
-                    }
-                    else
+
+                    if(performListCheck)
                     {
-                        assertTrue( CLS_NM + "deassignUsers list size check", ( rArray.length - i ) == users.size() );
-                        assertTrue( CLS_NM + "deassignUsers list2 size check", ( rArray.length - i ) == users2.size() );
+                        // Double check the number of users associated with role:
+                        // This one retrieves the collection of all "roleOccupant" attributes associated with the role node:
+                        List<String> users = reviewMgr.assignedUsers( RoleTestData.getRole( rle ), rArray.length );
+                        // This one searches across all Users and pull back list of type "User":
+                        List<User> users2 = reviewMgr.authorizedUsers( RoleTestData.getRole( rle ) );
+                        assertNotNull( users );
+                        assertNotNull( users2 );
+
+                        // If this is the last user deassigned from role, both lists will be returned empty:
+                        if ( i == uArray.length )
+                        {
+                            assertTrue( users.size() == 0 );
+                            assertTrue( users2.size() == 0 );
+                        }
+                        else
+                        {
+                            assertTrue( CLS_NM + "deassignUsers list size check", ( rArray.length - i ) == users.size() );
+                            assertTrue( CLS_NM + "deassignUsers list2 size check", ( rArray.length - i ) == users2.size() );
+                        }
                     }
                 }
             }
@@ -1710,6 +1765,68 @@ public class AdminMgrImplTest extends TestCase
     }
 
 
+    public void testAssignUserRoleConstraints()
+    {
+        assignUserRoleConstraints( "ASSGN-USER-ROLE-CONSTRAINTS TR18 ABAC", RoleTestData.ROLE_CONSTRAINTS_TR18_ABAC );
+    }
+
+
+    public static void assignUserRoleConstraints( String msg, String[][] urArray )
+    {
+        LogUtil.logIt( msg );
+        try
+        {
+            AdminMgr adminMgr = getManagedAdminMgr();
+            //ReviewMgr reviewMgr = ReviewMgrImplTest.getManagedReviewMgr();
+            for ( String[] urConstraint : urArray )
+            {
+                UserRole uRole = RoleTestData.getUserRoleConstraintAbac( urConstraint );
+                RoleConstraint rConstraint = uRole.getConstraints().get( 0 );
+                RoleConstraint out = adminMgr.addRoleConstraint( uRole, rConstraint );
+                assertNotNull( out );
+            }
+        }
+        catch ( SecurityException ex )
+        {
+            LOG.error(
+                "assignUserRoleConstraints caught SecurityException rc=" + ex.getErrorId() + ", msg="
+                    + ex.getMessage(), ex );
+            fail( ex.getMessage() );
+        }
+    }
+
+
+    public void testDeassignUserRoleConstraints()
+    {
+        deassignUserRoleConstraints( "DEASSGN-USER-ROLE-CONSTRAINTS TR18 ABAC", RoleTestData
+            .ROLE_CONSTRAINTS_TR18_ABAC );
+    }
+
+
+    public static void deassignUserRoleConstraints( String msg, String[][] urArray )
+    {
+        LogUtil.logIt( msg );
+        try
+        {
+            AdminMgr adminMgr = getManagedAdminMgr();
+            //ReviewMgr reviewMgr = ReviewMgrImplTest.getManagedReviewMgr();
+            for ( String[] urConstraint : urArray )
+            {
+                UserRole uRole = RoleTestData.getUserRoleConstraintAbac( urConstraint );
+                RoleConstraint rConstraint = uRole.getConstraints().get( 0 );
+                adminMgr.removeRoleConstraint( uRole, rConstraint );
+            }
+        }
+        catch ( SecurityException ex )
+        {
+            LOG.error(
+                "deassignUserRoleConstraints caught SecurityException rc=" + ex.getErrorId() + ", msg="
+                    + ex.getMessage(), ex );
+            fail( ex.getMessage() );
+        }
+    }
+
+
     public void testAddPermissionOp()
     {
         //     public PermObj addPermObj(PermObj pObj)
@@ -1718,6 +1835,11 @@ public class AdminMgrImplTest extends TestCase
         addPermOps( "ADD-OPS TOB3 TOP3", PermTestData.OBJS_TOB3, PermTestData.OPS_TOP3, true, false );
         addPermOps( "ADD-OPS TOB4 TOP4", PermTestData.OBJS_TOB4, PermTestData.OPS_TOP4, true, false );
         addPermOps( "ADD-OPS TOB6 TOP5", PermTestData.OBJS_TOB6, PermTestData.OPS_TOP5, true, false );
+        addPermOps( "ADD-OPS ABAC WASHER", PermTestData.ABAC_WASHER_OBJS, PermTestData.ABAC_WASHER_OPS, true, false );
+        addPermOps( "ADD-OPS ABAC TELLER", PermTestData.ABAC_TELLER_OBJS, PermTestData.ABAC_TELLER_OPS, true, false );
+        addPermOps( "ADD-OPS ABAC ACCOUNT", PermTestData.ABAC_ACCOUNT_OBJS, PermTestData.ABAC_ACCOUNT_OPS, true, false );
+        addPermOps( "ADD-OPS ABAC CURRENCY", PermTestData.ABAC_CURRENCY_OBJS, PermTestData.ABAC_CURRENCY_OPS, true, false );
+        addPermOps( "ADD-OPS ABAC BRANCH", PermTestData.ABAC_BRANCH_OBJS, PermTestData.ABAC_BRANCH_OPS, true, false );
     }
 
 
@@ -1772,9 +1894,15 @@ public class AdminMgrImplTest extends TestCase
         addPermObjs( "ADD-OBS TOB3", PermTestData.OBJS_TOB3, true, false );
         addPermObjs( "ADD-OBS TOB4", PermTestData.OBJS_TOB4, true, false );
         addPermObjs( "ADD-OBS TOB6", PermTestData.OBJS_TOB6, true, false );
+        addPermObjs( "ADD-OBS ABAC WASHER", PermTestData.ABAC_WASHER_OBJS, true, false );
+        addPermObjs( "ADD-OBS ABAC TELLER", PermTestData.ABAC_TELLER_OBJS, true, false );
+        addPermObjs( "ADD-OBS ABAC ACCOUNT", PermTestData.ABAC_ACCOUNT_OBJS, true, false );
+        addPermObjs( "ADD-OBS ABAC CURRENCY", PermTestData.ABAC_CURRENCY_OBJS, true, false );
+        addPermObjs( "ADD-OBS ABAC BRANCH", PermTestData.ABAC_BRANCH_OBJS, true, false );
     }
 
 
+
     /**
      * @param objArray
      */
@@ -2047,6 +2175,12 @@ public class AdminMgrImplTest extends TestCase
         delPermOps( "DEL-OPS TOB3 TOP4", PermTestData.OBJS_TOB3, PermTestData.OPS_TOP3, true, false );
         delPermOps( "DEL-OPS TOB4 TOP4", PermTestData.OBJS_TOB4, PermTestData.OPS_TOP4, true, false );
         delPermOps( "DEL-OPS TOB6 TOP5", PermTestData.OBJS_TOB6, PermTestData.OPS_TOP5, true, false );
+        delPermOps( "DEL-OPS ABAC WASHER", PermTestData.ABAC_WASHER_OBJS, PermTestData.ABAC_WASHER_OPS, true, false );
+        delPermOps( "DEL-OPS ABAC TELLER", PermTestData.ABAC_TELLER_OBJS, PermTestData.ABAC_TELLER_OPS, true, false );
+        delPermOps( "DEL-OPS ABAC ACCOUNT", PermTestData.ABAC_ACCOUNT_OBJS, PermTestData.ABAC_ACCOUNT_OPS, true, false );
+        delPermOps( "DEL-OPS ABAC CURRENCY", PermTestData.ABAC_CURRENCY_OBJS, PermTestData.ABAC_CURRENCY_OPS, true,
+            false );
+        delPermOps( "DEL-OPS ABAC BRANCH", PermTestData.ABAC_BRANCH_OBJS, PermTestData.ABAC_BRANCH_OPS, true, false );
     }
 
 
@@ -2101,6 +2235,11 @@ public class AdminMgrImplTest extends TestCase
         delPermObjs( "DEL-OBJS TOB3", PermTestData.OBJS_TOB3, true );
         delPermObjs( "DEL-OBJS TOB4", PermTestData.OBJS_TOB4, true );
         delPermObjs( "DEL-OBJS TOB6", PermTestData.OBJS_TOB6, true );
+        delPermObjs( "DEL-OBS ABAC WASHER", PermTestData.ABAC_WASHER_OBJS, true );
+        delPermObjs( "DEL-OBS ABAC TELLER", PermTestData.ABAC_TELLER_OBJS, true );
+        delPermObjs( "DEL-OBS ABAC ACCOUNT", PermTestData.ABAC_ACCOUNT_OBJS, true );
+        delPermObjs( "DEL-OBS ABAC CURRENCY", PermTestData.ABAC_CURRENCY_OBJS, true );
+        delPermObjs( "DEL-OBS ABAC BRANCH", PermTestData.ABAC_BRANCH_OBJS, true );
     }
 
 
@@ -2239,6 +2378,11 @@ public class AdminMgrImplTest extends TestCase
             PermTestData.OPS_TOP2, true, false );
         addRoleGrants( "GRNT-PRMS TR3 TOB3 TOP3", RoleTestData.ROLES_TR3, PermTestData.OBJS_TOB3,
             PermTestData.OPS_TOP3, true, false );
+        addRoleGrants( "GRNT-PRMS ABAC WASHER", RoleTestData.ROLES_ABAC_WASHERS, PermTestData.ABAC_WASHER_OBJS, PermTestData.ABAC_WASHER_OPS, true, false );
+        addRoleGrants( "GRNT-PRMS ABAC WASHER CURRENCY", RoleTestData.ROLES_ABAC_WASHERS, PermTestData.ABAC_CURRENCY_OBJS, PermTestData.ABAC_CURRENCY_OPS, true, false );
+        addRoleGrants( "GRNT-PRMS ABAC TELLER", RoleTestData.ROLES_ABAC_TELLERS, PermTestData.ABAC_TELLER_OBJS, PermTestData.ABAC_TELLER_OPS, true, false );
+        addRoleGrants( "GRNT-PRMS ABAC TELLER ACCOUNT", RoleTestData.ROLES_ABAC_TELLERS, PermTestData.ABAC_ACCOUNT_OBJS, PermTestData.ABAC_ACCOUNT_OPS, true, false );
+        addRoleGrants( "GRNT-PRMS ABAC BANK USERS", RoleTestData.ROLES_ABAC_USERS, PermTestData.ABAC_BRANCH_OBJS, PermTestData.ABAC_BRANCH_OPS, true, false );
         addRoleGrantsH( "GRNT-PRMS_H ROLES_TR5_HIER TOB4 TOP4", RoleTestData.ROLES_TR5_HIER, PermTestData.OBJS_TOB4,
             PermTestData.OPS_TOP4 );
         addRoleGrantsHB( "GRNT-PRMS_HB USERS TU20 ROLES_TR5B TOB6 TOP5", UserTestData.USERS_TU20U_TR5B,
@@ -2404,6 +2548,15 @@ public class AdminMgrImplTest extends TestCase
             PermTestData.OPS_TOP2, true );
         delRoleGrants( "REVK-PRMS TR3 TOB3 TOP3", RoleTestData.ROLES_TR3, PermTestData.OBJS_TOB3,
             PermTestData.OPS_TOP3, true );
+        delRoleGrants( "REVK-PRMS ABAC WASHER", RoleTestData.ROLES_ABAC_WASHERS, PermTestData.ABAC_WASHER_OBJS, PermTestData.ABAC_WASHER_OPS, true );
+        delRoleGrants( "REVK-PRMS ABAC WASHER CURRENCY", RoleTestData.ROLES_ABAC_WASHERS, PermTestData
+            .ABAC_CURRENCY_OBJS, PermTestData.ABAC_CURRENCY_OPS, true );
+        delRoleGrants( "REVK-PRMS ABAC TELLER", RoleTestData.ROLES_ABAC_TELLERS, PermTestData.ABAC_TELLER_OBJS,
+            PermTestData.ABAC_TELLER_OPS, true );
+        delRoleGrants( "REVK-PRMS ABAC TELLER ACCOUNT", RoleTestData.ROLES_ABAC_TELLERS, PermTestData
+            .ABAC_ACCOUNT_OBJS, PermTestData.ABAC_ACCOUNT_OPS, true );
+        delRoleGrants( "GRNT-PRMS ABAC BANK USERS", RoleTestData.ROLES_ABAC_USERS, PermTestData.ABAC_BRANCH_OBJS,
+            PermTestData.ABAC_BRANCH_OPS, true );
         delRoleGrantsH( "REVK-PRMS_H ROLES_TR5_HIER TOB4 TOP4", RoleTestData.ROLES_TR5_HIER, PermTestData.OBJS_TOB4,
             PermTestData.OPS_TOP4 );
         delRoleGrantsHB( "REVK-PRMS_H USERS TU20 ROLES_TR5B TOB6 TOP5", UserTestData.USERS_TU20U_TR5B,

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/2bcd1b3d/src/test/java/org/apache/directory/fortress/core/impl/FortressJUnitTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/directory/fortress/core/impl/FortressJUnitTest.java b/src/test/java/org/apache/directory/fortress/core/impl/FortressJUnitTest.java
index 35e58e4..f0d2451 100755
--- a/src/test/java/org/apache/directory/fortress/core/impl/FortressJUnitTest.java
+++ b/src/test/java/org/apache/directory/fortress/core/impl/FortressJUnitTest.java
@@ -123,6 +123,7 @@ public class FortressJUnitTest extends TestCase
             suite.addTest( new AdminMgrImplTest( "testDeletePermissionOp" ) );
             suite.addTest( new AdminMgrImplTest( "testDeletePermissionObj" ) );
             suite.addTest( new AdminMgrImplTest( "testDeletePermissionAttributeSets" ) );
+            suite.addTest( new AdminMgrImplTest( "testDeassignUserRoleConstraints" ) );
             suite.addTest( new AdminMgrImplTest( "testDeassignUser" ) );
             suite.addTest( new AdminMgrImplTest( "testDeleteUser" ) );
             suite.addTest( new AdminMgrImplTest( "testForceDeleteUser" ) );
@@ -176,7 +177,6 @@ public class FortressJUnitTest extends TestCase
         suite.addTest( new DelegatedMgrImplTest( "testAddAdminRoleDescendant" ) );
         suite.addTest( new DelegatedMgrImplTest( "testAddAdminRoleAscendants" ) );
         suite.addTest( new DelegatedMgrImplTest( "testAddAdminRoleInheritance" ) );
-
         suite.addTest( new DelegatedMgrImplTest( "testAddUser" ) );
         suite.addTest( new DelegatedMgrImplTest( "testAddPermission" ) );
         suite.addTest( new DelegatedMgrImplTest( "testAssignAdminUser" ) );
@@ -201,17 +201,16 @@ public class FortressJUnitTest extends TestCase
             suite.addTest( new PswdPolicyMgrImplTest( "testUpdatePasswordPolicy" ) );
         }
         suite.addTest( new AdminMgrImplTest( "testAssignUser" ) );
+        suite.addTest( new AdminMgrImplTest( "testAssignUserRoleConstraints" ) );
         suite.addTest( new AdminMgrImplTest( "testAddPermissionObj" ) );
         suite.addTest( new AdminMgrImplTest( "testUpdatePermissionObj" ) );
         suite.addTest( new AdminMgrImplTest( "testAddPermissionOp" ) );
         suite.addTest( new AdminMgrImplTest( "testUpdatePermissionOp" ) );
         suite.addTest( new AdminMgrImplTest( "testGrantPermissionRole" ) );
         suite.addTest( new AdminMgrImplTest( "testGrantPermissionUser" ) );
-
         suite.addTest( new AdminMgrImplTest( "testAddPermissionAttributeSet" ) );
         suite.addTest( new AdminMgrImplTest( "testAddPermissionAttributeToSet" ) );
         suite.addTest( new AdminMgrImplTest( "testAddPASetToPermission" ) );
-        
         suite.addTest( new AdminMgrImplTest( "testAddUserRoleConstraint" ) );
         suite.addTest( new AdminMgrImplTest( "testRemoveUserRoleConstraint" ) );
         

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/2bcd1b3d/src/test/java/org/apache/directory/fortress/core/impl/PermTestData.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/directory/fortress/core/impl/PermTestData.java b/src/test/java/org/apache/directory/fortress/core/impl/PermTestData.java
index d18398c..f5007cd 100755
--- a/src/test/java/org/apache/directory/fortress/core/impl/PermTestData.java
+++ b/src/test/java/org/apache/directory/fortress/core/impl/PermTestData.java
@@ -2739,6 +2739,186 @@ public class PermTestData extends TestCase
 },
     };
 
+
+    public static final String[][] ABAC_TELLER_OBJS =
+        {
+            {
+                "TellersPage",
+                "Used by Tellers", /* DESC_COL */
+                "APP0", /* ORG_COL */
+                "TST", /* TYPE_COL */
+                "", /* PROPS_COL */
+                "F" /* IS_ADMIN_COL */
+            },
+        };
+
+    public static final String[][] ABAC_WASHER_OBJS =
+        {
+            {
+                "WashersPage",
+                "Used by Washers", /* DESC_COL */
+                "APP0", /* ORG_COL */
+                "TST", /* TYPE_COL */
+                "", /* PROPS_COL */
+                "F" /* IS_ADMIN_COL */
+            },
+        };
+
+    public static final String[][] ABAC_ACCOUNT_OBJS =
+        {
+            {
+                "Account",
+                "Things we can do with Customer Accounts", /* DESC_COL */
+                "APP0", /* ORG_COL */
+                "TST", /* TYPE_COL */
+                "", /* PROPS_COL */
+                "F" /* IS_ADMIN_COL */
+            },
+        };
+
+    public static final String[][] ABAC_CURRENCY_OBJS =
+        {
+            {
+                "Currency",
+                "Things we can do with currency", /* DESC_COL */
+                "APP0", /* ORG_COL */
+                "TST", /* TYPE_COL */
+                "", /* PROPS_COL */
+                "F" /* IS_ADMIN_COL */
+            },
+        };
+
+    public static final String[][] ABAC_BRANCH_OBJS =
+        {
+            {
+                "Branch",
+                "Functions corresponds with a particular branch", /* DESC_COL */
+                "APP0", /* ORG_COL */
+                "TST", /* TYPE_COL */
+                "", /* PROPS_COL */
+                "F" /* IS_ADMIN_COL */
+            },
+        };
+
+    /**
+     * Test Case ABAC1:
+     */
+    public static final String[][] ABAC_TELLER_OPS =
+        {
+            {
+                "link", /* NAME_COL */
+                "Tellers will view this link",/* DESC_COL */
+                "", /* OBJ_ID_COL */
+                "TST", /* TYPE_COL */
+                "", /* PROPS_COL */
+                "", /* ROLES_COL */
+                "", /* USERS_COL */
+                "", /* GROUPS_COL */
+                "F" /* IS_ADMIN_COL */
+            },
+        };
+    public static final String[][] ABAC_WASHER_OPS =
+        {
+            {
+                "link", /* NAME_COL */
+                "Washers will view this link",/* DESC_COL */
+                "", /* OBJ_ID_COL */
+                "TST", /* TYPE_COL */
+                "", /* PROPS_COL */
+                "", /* ROLES_COL */
+                "", /* USERS_COL */
+                "", /* GROUPS_COL */
+                "F" /* IS_ADMIN_COL */
+            },
+        };
+    public static final String[][] ABAC_ACCOUNT_OPS =
+        {
+            {
+                "deposit", /* NAME_COL */
+                "account.deposit function",/* DESC_COL */
+                "", /* OBJ_ID_COL */
+                "TST", /* TYPE_COL */
+                "", /* PROPS_COL */
+                "", /* ROLES_COL */
+                "", /* USERS_COL */
+                "", /* GROUPS_COL */
+                "F" /* IS_ADMIN_COL */
+            },
+            {
+                "withdrawal", /* NAME_COL */
+                "dccount.withdrawal function",/* DESC_COL */
+                "", /* OBJ_ID_COL */
+                "TST", /* TYPE_COL */
+                "", /* PROPS_COL */
+                "", /* ROLES_COL */
+                "", /* USERS_COL */
+                "", /* GROUPS_COL */
+                "F" /* IS_ADMIN_COL */
+            },
+            {
+                "inquiry", /* NAME_COL */
+                "account.inquiry function",/* DESC_COL */
+                "", /* OBJ_ID_COL */
+                "TST", /* TYPE_COL */
+                "", /* PROPS_COL */
+                "", /* ROLES_COL */
+                "", /* USERS_COL */
+                "", /* GROUPS_COL */
+                "F" /* IS_ADMIN_COL */
+            },
+        };
+    public static final String[][] ABAC_CURRENCY_OPS =
+        {
+            {
+                "soak", /* NAME_COL */
+                "Currency.soak function",/* DESC_COL */
+                "", /* OBJ_ID_COL */
+                "TST", /* TYPE_COL */
+                "", /* PROPS_COL */
+                "", /* ROLES_COL */
+                "", /* USERS_COL */
+                "", /* GROUPS_COL */
+                "F" /* IS_ADMIN_COL */
+            },
+            {
+                "rinse", /* NAME_COL */
+                "Currency.rinse function",/* DESC_COL */
+                "", /* OBJ_ID_COL */
+                "TST", /* TYPE_COL */
+                "", /* PROPS_COL */
+                "", /* ROLES_COL */
+                "", /* USERS_COL */
+                "", /* GROUPS_COL */
+                "F" /* IS_ADMIN_COL */
+            },
+            {
+                "dry", /* NAME_COL */
+                "Currency.dry function",/* DESC_COL */
+                "", /* OBJ_ID_COL */
+                "TST", /* TYPE_COL */
+                "", /* PROPS_COL */
+                "", /* ROLES_COL */
+                "", /* USERS_COL */
+                "", /* GROUPS_COL */
+                "F" /* IS_ADMIN_COL */
+            },
+        };
+    public static final String[][] ABAC_BRANCH_OPS =
+        {
+            {
+                "login", /* NAME_COL */
+                "ability to login to branch web app",/* DESC_COL */
+                "", /* OBJ_ID_COL */
+                "TST", /* TYPE_COL */
+                "", /* PROPS_COL */
+                "", /* ROLES_COL */
+                "", /* USERS_COL */
+                "", /* GROUPS_COL */
+                "F" /* IS_ADMIN_COL */
+            },
+        };
+
+
     /**
      * The Fortress test data for junit uses 2-dimensional arrays.
      * These are the columns used for Fortress Object Test Data:

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/2bcd1b3d/src/test/java/org/apache/directory/fortress/core/impl/RoleTestData.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/directory/fortress/core/impl/RoleTestData.java b/src/test/java/org/apache/directory/fortress/core/impl/RoleTestData.java
index 0d892be..3ba6fa3 100755
--- a/src/test/java/org/apache/directory/fortress/core/impl/RoleTestData.java
+++ b/src/test/java/org/apache/directory/fortress/core/impl/RoleTestData.java
@@ -32,6 +32,7 @@ import junit.framework.TestCase;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.directory.fortress.core.model.Role;
+import org.apache.directory.fortress.core.model.RoleConstraint;
 import org.apache.directory.fortress.core.model.SDSet;
 import org.apache.directory.fortress.core.model.UserRole;
 import org.slf4j.Logger;
@@ -39,6 +40,8 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.directory.fortress.core.model.Constraint;
 
+import javax.crypto.spec.RC2ParameterSpec;
+
 
 /**
  * Description of the Class
@@ -3922,4 +3925,178 @@ public class RoleTestData extends TestCase
                 "oamT17DSD1,oamT17DSD3", /* RELATIONSHIP_COL */
 }
     };
+
+
+    public static final String[][] ROLES_ABAC_WASHERS =
+        {
+            {
+                "Washers", /* NAME_COL */
+                "May wash currency", /* DESC_COL */
+                "30", /* TIMEOUT_COL */
+                "0000", /* BTIME_COL */
+                "0000", /* ETIME_COL */
+                "20090101", /* BDATE_COL */
+                "21000101", /* EDATE_COL */
+                "20500101", /* BLOCKDATE_COL */
+                "20500115", /* ELOCKDATE_COL */
+                "1234567" /* DAYMASK_COL */
+            },
+        };
+
+    public static final String[][] ROLES_ABAC_TELLERS =
+        {
+            {
+                "Tellers", /* NAME_COL */
+                "May transact on customer accounts", /* DESC_COL */
+                "30", /* TIMEOUT_COL */
+                "0000", /* BTIME_COL */
+                "0000", /* ETIME_COL */
+                "20090101", /* BDATE_COL */
+                "21000101", /* EDATE_COL */
+                "20500101", /* BLOCKDATE_COL */
+                "20500115", /* ELOCKDATE_COL */
+                "1234567" /* DAYMASK_COL */
+            },
+        };
+
+    public static final String[][] ROLES_ABAC_USERS =
+        {
+            {
+                "Bank_Users", /* NAME_COL */
+                "Basic rights to log into the web app", /* DESC_COL */
+                "0", /* TIMEOUT_COL */
+                "0000", /* BTIME_COL */
+                "0000", /* ETIME_COL */
+                "20090101", /* BDATE_COL */
+                "21000101", /* EDATE_COL */
+                "20500101", /* BLOCKDATE_COL */
+                "20500115", /* ELOCKDATE_COL */
+                "1234567" /* DAYMASK_COL */
+            },
+        };
+
+    public static final String[][] DSD_TR18_ABAC =
+        {
+            {
+                "BankSafe", /* NAME_COL */
+                "User may only activate one of these roles", /* DESC_COL */
+                "2", /* CARDINALITY */
+                "Tellers,Washers", /* RELATIONSHIP_COL */
+            }
+        };
+
+    /**
+     * The Fortress test data for junit uses 2-dimensional arrays.
+     */
+    private final static int C_UID_COL = 0;
+    private final static int C_ROLE_COL = 1;
+    private final static int C_KEY_COL = 2;
+    private final static int C_VALUE_COL = 3;
+    private final static int C_TYPE_COL = 4;
+
+    public static String getConstraintUserid( String[] rle )
+    {
+        return rle[C_UID_COL];
+    }
+    public static String getConstraintRole( String[] rle )
+    {
+        return rle[C_ROLE_COL];
+    }
+    public static String getConstraintKey( String[] rle )
+    {
+        return rle[C_KEY_COL];
+    }
+    public static String getConstraintValue( String[] rle )
+    {
+        return rle[C_VALUE_COL];
+    }
+    public static String getConstraintType( String[] rle )
+    {
+        return rle[C_TYPE_COL];
+    }
+
+    public static UserRole getUserRoleConstraintAbac( String[] constraint )
+    {
+        UserRole uRole = new UserRole();
+        uRole.setUserId( getConstraintUserid( constraint ) );
+        uRole.setName( getConstraintRole( constraint ) );
+        RoleConstraint rConstraint = new RoleConstraint();
+        rConstraint.setTypeName( getConstraintType( constraint ) );
+        rConstraint.setKey( getConstraintKey( constraint ) );
+        rConstraint.setValue( getConstraintValue( constraint ) );
+        List<RoleConstraint> constraints = new ArrayList();
+        constraints.add( rConstraint );
+        uRole.setRoleConstraints( constraints );
+        return uRole;
+    }
+
+
+    public static final String[][] ROLE_CONSTRAINTS_TR18_ABAC =
+        {
+            {
+                "curly", /* USERID */
+                "tellers", /* ROLE NAME */
+                "locale", /* KEY */
+                "east", /* VALUE */
+                "USER" /* TYPE */
+            },
+            {
+                "curly", /* USERID */
+                "washers", /* ROLE NAME */
+                "locale", /* KEY */
+                "north", /* VALUE */
+                "USER" /* TYPE */
+            },
+            {
+                "curly", /* USERID */
+                "washers", /* ROLE NAME */
+                "locale", /* KEY */
+                "south", /* VALUE */
+                "USER" /* TYPE */
+            },
+            {
+                "moe", /* USERID */
+                "tellers", /* ROLE NAME */
+                "locale", /* KEY */
+                "north", /* VALUE */
+                "USER" /* TYPE */
+            },
+            {
+                "moe", /* USERID */
+                "washers", /* ROLE NAME */
+                "locale", /* KEY */
+                "east", /* VALUE */
+                "USER" /* TYPE */
+            },
+            {
+                "moe", /* USERID */
+                "washers", /* ROLE NAME */
+                "locale", /* KEY */
+                "south", /* VALUE */
+                "USER" /* TYPE */
+            },
+            {
+                "larry", /* USERID */
+                "tellers", /* ROLE NAME */
+                "locale", /* KEY */
+                "south", /* VALUE */
+                "USER" /* TYPE */
+            },
+            {
+                "larry", /* USERID */
+                "washers", /* ROLE NAME */
+                "locale", /* KEY */
+                "north", /* VALUE */
+                "USER" /* TYPE */
+            },
+            {
+                "larry", /* USERID */
+                "washers", /* ROLE NAME */
+                "locale", /* KEY */
+                "east", /* VALUE */
+                "USER" /* TYPE */
+            },
+        };
+
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/directory-fortress-core/blob/2bcd1b3d/src/test/java/org/apache/directory/fortress/core/impl/UserTestData.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/directory/fortress/core/impl/UserTestData.java b/src/test/java/org/apache/directory/fortress/core/impl/UserTestData.java
index fe66625..519c15b 100755
--- a/src/test/java/org/apache/directory/fortress/core/impl/UserTestData.java
+++ b/src/test/java/org/apache/directory/fortress/core/impl/UserTestData.java
@@ -6227,10 +6227,10 @@ public class UserTestData extends TestCase
                 "Permanent", /* EMPLOYEE_TYPE_COL */
                 "FALSE", /* SYSTEM USER */
                 "p2.jpeg", /* JPEGPHOTO_COL  */
-}
+        }
     };
 
-    // Test Case TU12:
+    // Test Case TU21:
     @MyAnnotation(name = "USERS_TU21_DSD_BRUNO", value = "USR TU21_DSD_BRUNO")
     public static final String[][] USERS_TU21_DSD_BRUNO =
         {
@@ -6264,6 +6264,97 @@ public class UserTestData extends TestCase
         }
     };
 
+
+    // Test Case TU21:
+    @MyAnnotation(name = "USERS_TU22_ABAC", value = "USR TU22 ABAC")
+    public static final String[][] USERS_TU22_ABAC =
+        {
+            {
+                "curly", /* USERID_COL */
+                "password", /* PASSWORD_COL */
+                "Test1", /* PW POLICY ATTR */
+                "Head Teller of the East, Coin Washer in North and South", /* DESC_COL */
+                "Curly Howrowitz", /* CN_COL */
+                "Horowitz", /* SN_COL */
+                "curly.horowitz@stooge.com", /* EMAILS_COL */
+                "", /* PROPS_COL */
+                "0000", /* BTIME_COL */
+                "0000", /* ETIME_COL */
+                "20091001", /* BDATE_COL */
+                "21000101", /* EDATE_COL */
+                "20300101", /* BLOCKDATE_COL */
+                "20300115", /* ELOCKDATE_COL */
+                "1234567", /* DAYMASK_COL */
+                "DEV1", /* ORG_COL */
+                "0", /* TIMEOUT_COL */
+                "", /* ASSGND_ROLES_COL */
+                "", /* AUTHZ_ROLES_COL */
+                "Lawrence,KS,66045,Strong Hall,Computer Science,222",/* ADDRESS_COL */
+                "888-888-8888,777-777-7777",/* PHONES_COL */
+                "555-555-5555,444-444-4444",/* MOBILES_COL */
+                "Tester", /* TITLE_COL */
+                "Permanent", /* EMPLOYEE_TYPE_COL */
+                "FALSE", /* SYSTEM USER */
+                "p1.jpeg", /* JPEGPHOTO_COL  */
+            },
+            {
+                "moe", /* USERID_COL */
+                "password", /* PASSWORD_COL */
+                "Test1", /* PW POLICY ATTR */
+                "Head Teller of the North, Coin Washer in East and South", /* DESC_COL */
+                "Moe Howard", /* CN_COL */
+                "Howard", /* SN_COL */
+                "moe.howard@stooge.com", /* EMAILS_COL */
+                "", /* PROPS_COL */
+                "0000", /* BTIME_COL */
+                "0000", /* ETIME_COL */
+                "20091001", /* BDATE_COL */
+                "21000101", /* EDATE_COL */
+                "20300101", /* BLOCKDATE_COL */
+                "20300115", /* ELOCKDATE_COL */
+                "1234567", /* DAYMASK_COL */
+                "DEV1", /* ORG_COL */
+                "0", /* TIMEOUT_COL */
+                "", /* ASSGND_ROLES_COL */
+                "", /* AUTHZ_ROLES_COL */
+                "Lawrence,KS,66045,Strong Hall,Computer Science,222",/* ADDRESS_COL */
+                "888-888-8888,777-777-7777",/* PHONES_COL */
+                "555-555-5555,444-444-4444",/* MOBILES_COL */
+                "Tester", /* TITLE_COL */
+                "Permanent", /* EMPLOYEE_TYPE_COL */
+                "FALSE", /* SYSTEM USER */
+                "p1.jpeg", /* JPEGPHOTO_COL  */
+            },
+            {
+                "larry", /* USERID_COL */
+                "password", /* PASSWORD_COL */
+                "Test1", /* PW POLICY ATTR */
+                "Head Teller of the South, Coin Washer in North and East", /* DESC_COL */
+                "Larry Fine", /* CN_COL */
+                "Fine", /* SN_COL */
+                "larry.fine@stooge.com", /* EMAILS_COL */
+                "", /* PROPS_COL */
+                "0000", /* BTIME_COL */
+                "0000", /* ETIME_COL */
+                "20091001", /* BDATE_COL */
+                "21000101", /* EDATE_COL */
+                "20300101", /* BLOCKDATE_COL */
+                "20300115", /* ELOCKDATE_COL */
+                "1234567", /* DAYMASK_COL */
+                "DEV1", /* ORG_COL */
+                "0", /* TIMEOUT_COL */
+                "", /* ASSGND_ROLES_COL */
+                "", /* AUTHZ_ROLES_COL */
+                "Lawrence,KS,66045,Strong Hall,Computer Science,222",/* ADDRESS_COL */
+                "888-888-8888,777-777-7777",/* PHONES_COL */
+                "555-555-5555,444-444-4444",/* MOBILES_COL */
+                "Tester", /* TITLE_COL */
+                "Permanent", /* EMPLOYEE_TYPE_COL */
+                "FALSE", /* SYSTEM USER */
+                "p3.jpeg", /* JPEGPHOTO_COL  */
+            },
+        };
+
     /**
     * The Fortress test data for junit uses 2-dimensional arrays.
     */