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