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