User: starksm 
  Date: 01/05/30 09:07:51

  Modified:    src/main/org/jboss/test Tag: Branch_2_2
                        LoginModulesTest.java
  Log:
  Update sample login modules to be trivial subclasses of the corresponding
  production versions.
  Add support for InheritableThreadLocal storage of principal information.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.3.2.3   +183 -18   jbosssx/src/main/org/jboss/test/LoginModulesTest.java
  
  Index: LoginModulesTest.java
  ===================================================================
  RCS file: /cvsroot/jboss/jbosssx/src/main/org/jboss/test/LoginModulesTest.java,v
  retrieving revision 1.3.2.2
  retrieving revision 1.3.2.3
  diff -u -r1.3.2.2 -r1.3.2.3
  --- LoginModulesTest.java     2001/04/13 04:38:02     1.3.2.2
  +++ LoginModulesTest.java     2001/05/30 16:07:51     1.3.2.3
  @@ -7,16 +7,21 @@
   package org.jboss.test;
   
   import java.lang.reflect.Method;
  +import java.io.File;
   import java.io.Serializable;
   import java.security.Principal;
   import java.security.acl.Group;
  +import java.sql.Connection;
   import java.sql.DriverManager;
  +import java.sql.SQLException;
  +import java.sql.Statement;
   import java.util.Enumeration;
   import java.util.HashMap;
   import java.util.Iterator;
   import java.util.Set;
   import java.util.Properties;
   import javax.naming.InitialContext;
  +import javax.naming.NameAlreadyBoundException;
   import javax.security.auth.Subject;
   import javax.security.auth.callback.CallbackHandler;
   import javax.security.auth.login.AppConfigurationEntry;
  @@ -29,13 +34,13 @@
   
   import org.jboss.security.SimpleGroup;
   import org.jboss.security.SimplePrincipal;
  -import org.jboss.security.auth.UsernamePasswordHandler;
  -import org.jboss.security.plugins.samples.UsernamePasswordLoginModule;
  +import org.jboss.security.auth.callback.UsernamePasswordHandler;
  +import org.jboss.security.auth.spi.UsernamePasswordLoginModule;
   
  -/** Tests of the sample LoginModule classes.
  +/** Tests of the LoginModule classes.
   
   @author [EMAIL PROTECTED]
  -@version $Revision: 1.3.2.2 $
  +@version $Revision: 1.3.2.3 $
   */
   public class LoginModulesTest extends TestCase
   {
  @@ -76,7 +81,7 @@
           }
           AppConfigurationEntry[] testLdap()
           {
  -            String name = "org.jboss.security.plugins.samples.LdapLoginModule";
  +            String name = "org.jboss.security.auth.spi.LdapLoginModule";
               HashMap options = new HashMap();
               options.put("java.naming.factory.initial", 
"com.sun.jndi.ldap.LdapCtxFactory");
               options.put("java.naming.provider.url", "ldap://siren-int/";);
  @@ -91,9 +96,10 @@
               AppConfigurationEntry[] entry = {ace};
               return entry;
           }
  +
           AppConfigurationEntry[] testIdentity()
           {
  -            String name = "org.jboss.security.plugins.samples.IdentityLoginModule";
  +            String name = "org.jboss.security.auth.spi.IdentityLoginModule";
               HashMap options = new HashMap();
               options.put("principal", "stark");
               options.put("roles", "Role3,Role4");
  @@ -104,7 +110,7 @@
           }
           AppConfigurationEntry[] testShared()
           {
  -            String name0 = "org.jboss.security.plugins.samples.IdentityLoginModule";
  +            String name0 = "org.jboss.security.auth.spi.IdentityLoginModule";
               String name1 = "org.jboss.security.plugins.samples.RolesLoginModule";
               HashMap options = new HashMap();
               options.put("principal", "stark");
  @@ -118,7 +124,7 @@
           }
           AppConfigurationEntry[] testJdbc()
           {
  -            String name = 
"org.jboss.security.plugins.samples.DatabaseServerLoginModule";
  +            String name = "org.jboss.security.auth.spi.DatabaseServerLoginModule";
               HashMap options = new HashMap();
               options.put("dsJndiName", "testJdbc");
               options.put("principalsQuery", "select Password from Principals where 
PrincipalID=?");
  @@ -130,7 +136,7 @@
           }
           AppConfigurationEntry[] testSimple()
           {
  -            String name = 
"org.jboss.security.plugins.samples.SimpleServerLoginModule";
  +            String name = "org.jboss.security.auth.spi.SimpleServerLoginModule";
               AppConfigurationEntry ace = new AppConfigurationEntry(name,
                   AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, new 
HashMap());
               AppConfigurationEntry[] entry = {ace};
  @@ -148,6 +154,14 @@
           {
               return other();
           }
  +        AppConfigurationEntry[] testUsersRoles()
  +        {
  +            String name = "org.jboss.security.auth.spi.UsersRolesLoginModule";
  +            AppConfigurationEntry ace = new AppConfigurationEntry(name,
  +                AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, new 
HashMap());
  +            AppConfigurationEntry[] entry = {ace};
  +            return entry;
  +        }
           AppConfigurationEntry[] other()
           {
               AppConfigurationEntry ace = new 
AppConfigurationEntry(TestLoginModule.class.getName(),
  @@ -175,13 +189,13 @@
       {
           public java.sql.Connection getConnection() throws java.sql.SQLException
           {
  -            String url = 
"jdbc:idb=/usr/local/src/cvsroot/jBoss/jboss/dist/conf/default/instantdb.properties";
  -            java.sql.Connection con = DriverManager.getConnection(url);
  -            return con;
  +            return getConnection("sa", "");
           }
           public java.sql.Connection getConnection(String user, String pass) throws 
java.sql.SQLException
           {
  -            return getConnection();
  +            String jdbcURL = "jdbc:HypersonicSQL:hsql://localhost:1476";
  +            java.sql.Connection con = DriverManager.getConnection(jdbcURL, user, 
pass);
  +            return con;
           }
           public java.io.PrintWriter getLogWriter() throws java.sql.SQLException
           {
  @@ -218,6 +232,7 @@
           Group roles = (Group) groups.iterator().next();
           assert("TestRole is a role", roles.isMember(new 
SimplePrincipal("TestRole")));
           assert("Role2 is a role", roles.isMember(new SimplePrincipal("Role2")));
  +
           lc.logout();
       }
       public void testJaasServer() throws Exception
  @@ -247,6 +262,64 @@
           assert("Coder is a role", roles.isMember(new SimplePrincipal("Coder")));
           lc.logout();
       }
  +    public void testUsersRoles() throws Exception
  +    {
  +        System.out.println("testUsersRoles");
  +        UsernamePasswordHandler handler = new UsernamePasswordHandler("scott", 
"echoman".toCharArray());
  +        LoginContext lc = new LoginContext("testUsersRoles", handler);
  +        lc.login();
  +        Subject subject = lc.getSubject();
  +        Set groups = subject.getPrincipals(Group.class);
  +        assert("Principals contains scott", subject.getPrincipals().contains(new 
SimplePrincipal("scott")));
  +        assert("Principals contains Roles", groups.contains(new 
SimplePrincipal("Roles")));
  +        assert("Principals contains CallerPrincipal", groups.contains(new 
SimplePrincipal("CallerPrincipal")));
  +        Group roles = (Group) groups.iterator().next();
  +        Iterator groupsIter = groups.iterator();
  +        while( groupsIter.hasNext() )
  +        {
  +            roles = (Group) groupsIter.next();
  +            if( roles.getName().equals("Roles") )
  +            {
  +                assert("Echo is a role", roles.isMember(new 
SimplePrincipal("Echo")));
  +                assert("Java is NOT a role", roles.isMember(new 
SimplePrincipal("Java")) == false);
  +                assert("Coder is NOT a role", roles.isMember(new 
SimplePrincipal("Coder")) == false);
  +            }
  +            else if( roles.getName().equals("CallerPrincipal") )
  +            {
  +                System.out.println("CallerPrincipal is 
"+roles.members().nextElement());
  +                boolean isMember = roles.isMember(new 
SimplePrincipal("callerScott"));
  +                assert("CallerPrincipal is callerScott", isMember);
  +            }
  +        }
  +        lc.logout();
  +
  +        handler = new UsernamePasswordHandler("stark", "javaman".toCharArray());
  +        lc = new LoginContext("testUsersRoles", handler);
  +        lc.login();
  +        subject = lc.getSubject();
  +        groups = subject.getPrincipals(Group.class);
  +        assert("Principals contains stark", subject.getPrincipals().contains(new 
SimplePrincipal("stark")));
  +        assert("Principals contains Roles", groups.contains(new 
SimplePrincipal("Roles")));
  +        assert("Principals contains CallerPrincipal", groups.contains(new 
SimplePrincipal("CallerPrincipal")));
  +        groupsIter = groups.iterator();
  +        while( groupsIter.hasNext() )
  +        {
  +            roles = (Group) groupsIter.next();
  +            if( roles.getName().equals("Roles") )
  +            {
  +                assert("Echo is NOT a role", roles.isMember(new 
SimplePrincipal("Echo")) == false);
  +                assert("Java is a role", roles.isMember(new 
SimplePrincipal("Java")));
  +                assert("Coder is a role", roles.isMember(new 
SimplePrincipal("Coder")));
  +            }
  +            else if( roles.getName().equals("CallerPrincipal") )
  +            {
  +                System.out.println("CallerPrincipal is 
"+roles.members().nextElement());
  +                boolean isMember = roles.isMember(new 
SimplePrincipal("callerStark"));
  +                assert("CallerPrincipal is callerStark", isMember);
  +            }
  +        }
  +        lc.logout();
  +    }
       public void testIdentity() throws Exception
       {
           System.out.println("testIdentity");
  @@ -353,20 +426,20 @@
           e INSERT INTO Roles VALUES ("stark", "caller_stark", "CallerPrincipal");
   
           c close;
  -
       */
       public void testJdbc() throws Exception
       {
           System.out.println("testJdbc");
           try
           {
  -            Class.forName("org.enhydra.instantdb.jdbc.idbDriver");
  +            Class.forName ("org.hsql.jdbcDriver");
           }
           catch(ClassNotFoundException e)
  -        {
  -            System.out.println("Skipping due to missing 
org.enhydra.instantdb.jdbc.idbDriver");
  +        {   // Skip the test
  +            System.out.println("Skipping test because org.hsql.jdbcDriver was not 
found");
               return;
           }
  +        // Create a DataSource binding
           DataSource ds = new TestDS();
           Properties env = new Properties();
           org.jnp.server.Main naming = new org.jnp.server.Main();
  @@ -374,7 +447,24 @@
           System.setProperty("java.naming.factory.initial", 
"org.jnp.interfaces.NamingContextFactory");
           System.setProperty("java.naming.provider.url", "localhost");
           InitialContext ctx = new InitialContext(System.getProperties());
  -        ctx.bind("testJdbc", ds);
  +        try
  +        {
  +            ctx.bind("testJdbc", ds);
  +        }
  +        catch(NameAlreadyBoundException e)
  +        {
  +            // Ignore
  +        }
  +
  +        // Start database and setup tables
  +        startHsql();
  +        Connection conn = ds.getConnection("sa", "");
  +        Statement statement = conn.createStatement();
  +        createPrincipalsTable(statement);
  +        createRolesTable(statement);
  +        statement.close();
  +        conn.close();
  +
           UsernamePasswordHandler handler = new UsernamePasswordHandler("stark", 
"javaman".toCharArray());
           LoginContext lc = new LoginContext("testJdbc", handler);
           lc.login();
  @@ -389,6 +479,81 @@
           lc.logout();
       }
   
  +    static void startHsql()
  +    {
  +        // Start DB in new thread, or else it will block us
  +        Thread runner = new Thread(new Runnable()
  +        {
  +            public void run()
  +            {
  +                File dbDir = new File("hypersonic");
  +                dbDir.mkdir();
  +                File dbName = new File(dbDir, "DBLogin");
  +                // Create startup arguments
  +                String[] args = new String[]
  +                {
  +                    "-database", dbName.toString(),
  +                    "-port", "1476",
  +                    "-silent", "true",
  +                    "-trace", "false"
  +                };
  +                // Start server
  +                org.hsql.Server.main(args);
  +            }
  +        });
  +
  +        runner.start();
  +        System.out.println("HSQL database started");
  +    }
  +
  +    static void createPrincipalsTable(Statement statement) throws SQLException
  +    {
  +        try
  +        {
  +            statement.execute("DROP TABLE Principals");
  +        }
  +        catch(SQLException e)
  +        {
  +            // Ok, assume table does not exist
  +        }
  +        boolean result = statement.execute("CREATE TABLE Principals ("
  +            + "PrincipalID VARCHAR(64) PRIMARY KEY,"
  +            + "Password VARCHAR(64) )"
  +        );
  +        System.out.println("Created Principals table, result="+result);
  +        result = statement.execute("INSERT INTO Principals VALUES ('scott', 
'echoman')");
  +        System.out.println("INSERT INTO Principals VALUES ('scott', 'echoman'), 
result="+result);
  +        result = statement.execute("INSERT INTO Principals VALUES ('stark', 
'javaman')");
  +        System.out.println("INSERT INTO Principals VALUES ('stark', 'javaman'), 
result="+result);
  +    }
  +
  +    static void createRolesTable(Statement statement) throws SQLException
  +    {
  +        try
  +        {
  +            statement.execute("DROP TABLE Roles");
  +        }
  +        catch(SQLException e)
  +        {
  +            // Ok, assume table does not exist
  +        }
  +        boolean result = statement.execute("CREATE TABLE Roles ("
  +            + "PrincipalID   VARCHAR(64),"
  +            + "Role  VARCHAR(64),"
  +            + "RoleGroup VARCHAR(64) )"
  +        );
  +        System.out.println("Created Roles table, result="+result);
  +        result = statement.execute("INSERT INTO Roles VALUES ('scott', 'Echo', 
'Roles')");
  +        System.out.println("INSERT INTO Roles VALUES ('scott', 'Echo', 'Roles'), 
result="+result);
  +        result = statement.execute("INSERT INTO Roles VALUES ('scott', 
'callerScott', 'CallerPrincipal')");
  +        System.out.println("INSERT INTO Roles VALUES ('scott', 'callerScott', 
'CallerPrincipal'), result="+result);
  +        result = statement.execute("INSERT INTO Roles VALUES ('stark', 'Java', 
'Roles')");
  +        System.out.println("INSERT INTO Roles VALUES ('stark', 'Java', 'Roles'), 
result="+result);
  +        result = statement.execute("INSERT INTO Roles VALUES ('stark', 'Coder', 
'Roles')");
  +        System.out.println("INSERT INTO Roles VALUES ('stark', 'Coder', 'Roles'), 
result="+result);
  +        result = statement.execute("INSERT INTO Roles VALUES ('stark', 
'callerStark', 'CallerPrincipal')");
  +        System.out.println("INSERT INTO Roles VALUES ('stark', 'callerStark', 
'CallerPrincipal'), result="+result);
  +    }
       public static void main(java.lang.String[] args)
       {
           System.setErr(System.out);
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to