User: starksm Date: 01/05/30 05:26:10 Modified: src/main/org/jboss/test LoginModulesTest.java Added: src/main/org/jboss/test UsersRolesLoginModuleTest.java roles.properties tst-policy.xml tst.policy users.properties Log: Update the test suite for the latest changes Revision Changes Path 1.6 +179 -15 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.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- LoginModulesTest.java 2001/04/13 20:04:54 1.5 +++ LoginModulesTest.java 2001/05/30 12:26:10 1.6 @@ -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; @@ -32,10 +37,10 @@ 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.5 $ +@version $Revision: 1.6 $ */ 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 { @@ -248,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"); @@ -354,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) { // Skip the test - System.out.println("Skipping test because org.enhydra.instantdb.jdbc.idbDriver was not found"); + 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(); @@ -375,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(); @@ -390,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); 1.1 jbosssx/src/main/org/jboss/test/UsersRolesLoginModuleTest.java Index: UsersRolesLoginModuleTest.java =================================================================== /* * JBoss, the OpenSource EJB server * * Distributable under LGPL license. * See terms of license at gnu.org. */ package org.jboss.test; import java.io.Serializable; import java.security.Principal; import java.security.acl.Group; 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.security.auth.Subject; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.login.AppConfigurationEntry; import javax.security.auth.login.Configuration; import javax.security.auth.login.LoginContext; import junit.framework.TestCase; import junit.framework.TestSuite; import org.jboss.security.SimpleGroup; import org.jboss.security.SimplePrincipal; import org.jboss.security.auth.callback.UsernamePasswordHandler; import org.jboss.security.auth.spi.UsersRolesLoginModule; /** Tests of the sample LoginModule classes. @author [EMAIL PROTECTED] @version $Revision: 1.1 $ */ public class UsersRolesLoginModuleTest extends TestCase { public UsersRolesLoginModuleTest(String testName) { super(testName); } public void testUsersRoles() throws Exception { System.out.println("testUsersRoles"); UsersRolesLoginModule lm = new UsersRolesLoginModule(); Subject subject = new Subject(); UsernamePasswordHandler handler = new UsernamePasswordHandler("scott", "echoman".toCharArray()); lm.initialize(subject, handler, new HashMap(), new HashMap()); assert(lm.login()); assert(lm.commit()); 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()); assert("CallerPrincipal is callerScott", roles.isMember(new SimplePrincipal("callerScott"))); } } lm.logout(); handler = new UsernamePasswordHandler("stark", "javaman".toCharArray()); lm = new UsersRolesLoginModule(); lm.initialize(subject, handler, new HashMap(), new HashMap()); assert(lm.login()); assert(lm.commit()); 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()); assert("CallerPrincipal is callerStark", roles.isMember(new SimplePrincipal("callerStark"))); } } lm.logout(); } public static void main(java.lang.String[] args) { System.setErr(System.out); TestSuite suite = new TestSuite(UsersRolesLoginModuleTest.class); junit.textui.TestRunner.run(suite); } } 1.1 jbosssx/src/main/org/jboss/test/roles.properties Index: roles.properties =================================================================== scott=Echo stark=Java,Coder stark.CallerPrincipal=callerStark starksm.Roles=ProjectUser starksm.CallerPrincipal=callerStarksm scott.Roles=ProjectUser scott.CallerPrincipal=callerScott 1.1 jbosssx/src/main/org/jboss/test/tst-policy.xml Index: tst-policy.xml =================================================================== <?xml version = "1.0" encoding = "UTF-8"?> <policy> <!-- A test application policy that creates a SimplePrincipal with a name of 'starksm' for testing the subject based policy permissions. --> <application-policy name = "test-domain"> <authentication> <login-module code = "org.jboss.security.plugins.samples.IdentityLoginModule" flag = "required"> <module-option name = "principal">starksm</module-option> </login-module> </authentication> <authorization> <grant> <principal code = "org.jboss.security.SimplePrincipal" name = "scott"/> <permission code = "org.jboss.test.security.test.NamespacePermission" name = "Project1" actions = "rwxd"/> <permission code = "org.jboss.test.security.test.NamespacePermission" name = "Project1/Documents/Private" actions = "rw-d"/> </grant> <grant> <principal code = "org.jboss.security.SimplePrincipal" name = "starksm"/> <permission code = "org.jboss.test.security.test.NamespacePermission" name = "Project1/Documents/Public" actions = "r---"/> </grant> </authorization> </application-policy> <!-- A application policy that specifies the SRPLoginModule + JBoss ClientLogin module for testing the secure authentication link. --> <application-policy name = "srp-login"> <authentication> <login-module code = "org.jboss.security.srp.jaas.SRPLoginModule" flag = "required"> <module-option name = "password-stacking">useFirstPass</module-option> <module-option name = "principalClassName">org.jboss.security.SimplePrincipal</module-option> <module-option name = "srpServerJndiName">SRPServerInterface</module-option> <module-option name = "debug">true</module-option> </login-module> <login-module code = "org.jboss.security.ClientLoginModule" flag = "required"> <module-option name = "password-stacking">useFirstPass</module-option> </login-module> </authentication> </application-policy> </policy> 1.1 jbosssx/src/main/org/jboss/test/tst.policy Index: tst.policy =================================================================== grant { permission java.security.AllPermission; }; 1.1 jbosssx/src/main/org/jboss/test/users.properties Index: users.properties =================================================================== scott=echoman stark=javaman _______________________________________________ Jboss-development mailing list [EMAIL PROTECTED] http://lists.sourceforge.net/lists/listinfo/jboss-development