[jboss-cvs] JBossAS SVN: r60109 - in trunk/testsuite: src/main/org/jboss/test/security/test and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Jan 29 17:11:55 EST 2007


Author: scott.stark at jboss.org
Date: 2007-01-29 17:11:54 -0500 (Mon, 29 Jan 2007)
New Revision: 60109

Added:
   trunk/testsuite/src/main/org/jboss/test/security/test/CustomPrincipalPropagationUnitTestCase.java
   trunk/testsuite/src/resources/security/custom-principal/
Modified:
   trunk/testsuite/imports/sections/security.xml
Log:
JBAS-1537, merge the custom principal tests to trunk

Modified: trunk/testsuite/imports/sections/security.xml
===================================================================
--- trunk/testsuite/imports/sections/security.xml	2007-01-29 22:08:53 UTC (rev 60108)
+++ trunk/testsuite/imports/sections/security.xml	2007-01-29 22:11:54 UTC (rev 60109)
@@ -203,6 +203,17 @@
             <include name="users.properties"/>
          </zipfileset>
       </ear>
+      <!-- Test Custom Principal Propagation -->
+      <war destfile="${build.lib}/custom-principal.war"
+         webxml="${build.resources}/security/custom-principal/WEB-INF/web.xml">
+         <webinf dir="${build.resources}/security/custom-principal/WEB-INF/">
+            <include name="jboss-web.xml"/>
+         </webinf> 
+         <fileset dir="${build.resources}/security/custom-principal">
+            <include name="**/*.html"/>
+            <include name="**/*.jsp"/>
+         </fileset>
+      </war>
 
       <!-- build security-incpt.jar -->
       <jar destfile="${build.lib}/security-incpt.jar">

Copied: trunk/testsuite/src/main/org/jboss/test/security/test/CustomPrincipalPropagationUnitTestCase.java (from rev 60107, branches/Branch_4_2/testsuite/src/main/org/jboss/test/security/test/CustomPrincipalPropagationUnitTestCase.java)
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/security/test/CustomPrincipalPropagationUnitTestCase.java	                        (rev 0)
+++ trunk/testsuite/src/main/org/jboss/test/security/test/CustomPrincipalPropagationUnitTestCase.java	2007-01-29 22:11:54 UTC (rev 60109)
@@ -0,0 +1,232 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.security.test;
+
+import java.net.HttpURLConnection;
+import java.util.HashMap;
+
+import javax.rmi.PortableRemoteObject;
+import javax.security.auth.login.AppConfigurationEntry;
+import javax.security.auth.login.Configuration;
+import javax.security.auth.login.LoginContext;
+
+import junit.extensions.TestSetup;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.commons.httpclient.Cookie;
+import org.apache.commons.httpclient.Header;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpState;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.jboss.security.auth.login.XMLLoginConfigImpl;
+import org.jboss.test.JBossTestCase;
+import org.jboss.test.JBossTestSetup;
+import org.jboss.test.security.ejb.CustomPrincipalImpl;
+import org.jboss.test.security.interfaces.CustomPrincipal;
+import org.jboss.test.security.interfaces.CustomPrincipalHome; 
+import org.jboss.test.util.AppCallbackHandler;
+
+//$Id$
+
+/**
+ *  Test propagation of Custom Principal
+ *  @author <a href="mailto:Anil.Saldhana at jboss.org">Anil Saldhana</a>
+ *  @since  Sep 22, 2006 
+ *  @version $Revision$
+ */
+public class CustomPrincipalPropagationUnitTestCase extends JBossTestCase
+{ 
+   static String username = "jduke";
+   static char[] password = "theduke".toCharArray();
+   
+   LoginContext lc;
+   boolean loggedIn;
+   
+   public CustomPrincipalPropagationUnitTestCase(String name)
+   {
+      super(name); 
+   }
+   
+   /**
+    * Custom Principal from outside the Application Server VM
+    * @throws Exception
+    */
+   public void testCustomPrincipalTransmission() throws Exception
+   {
+      Configuration.setConfiguration(new MyConfig()); 
+      login();
+      Object obj = getInitialContext().lookup("jaas.CustomPrincipalHome");
+      obj = PortableRemoteObject.narrow(obj, CustomPrincipalHome.class);
+      CustomPrincipalHome home = (CustomPrincipalHome) obj;
+      log.debug("Found CustomPrincipalHome");
+      CustomPrincipal bean = home.create();
+      log.debug("Created CustomPrincipal");
+
+      boolean isCustomType = bean.validateCallerPrincipal(CustomPrincipalImpl.class);
+      bean.remove();
+      logout();
+      assertTrue("CustomPrincipalImpl was seen", isCustomType);
+   }  
+   
+   /**
+    * A web-app has a welcome jsp (called as index.jsp). Inside this jsp,
+    * there is a call made out to an ejb
+    * 
+    * @throws Exception
+    */
+   public void testCustomPrincipalTransmissionInVM() throws Exception
+   { 
+      String baseURLNoAuth = "http://" + getServerHost() + ":" + Integer.getInteger("web.port", 8080) + "/";
+      HttpClient httpConn = new HttpClient();
+      GetMethod indexGet = new GetMethod(baseURLNoAuth + "custom-principal/");
+      int responseCode = httpConn.executeMethod(indexGet);
+      String body = indexGet.getResponseBodyAsString();
+      assertTrue("Get OK(" + responseCode + ")", responseCode == HttpURLConnection.HTTP_OK);
+      assertTrue("Redirected to login page", body.indexOf("j_security_check") > 0);
+      HttpState state = httpConn.getState();
+      Cookie[] cookies = state.getCookies();
+      String sessionID = null;
+      for (int c = 0; c < cookies.length; c++)
+      {
+         Cookie k = cookies[c];
+         if (k.getName().equalsIgnoreCase("JSESSIONID"))
+            sessionID = k.getValue();
+      }
+      getLog().debug("Saw JSESSIONID=" + sessionID);
+      // Submit the login form
+      PostMethod formPost = new PostMethod(baseURLNoAuth + "custom-principal/j_security_check");
+      formPost.addRequestHeader("Referer", baseURLNoAuth + "custom-principal/login.jsp");
+      formPost.addParameter("j_username", this.username);
+      formPost.addParameter("j_password", new String(password));
+      responseCode = httpConn.executeMethod(formPost.getHostConfiguration(), formPost, state);
+      String loginResult = formPost.getResponseBodyAsString();
+      if( loginResult.indexOf("Encountered a login error") > 0 )
+         fail("Login Failed"); 
+
+      String response = formPost.getStatusText();
+      log.debug("responseCode="+responseCode+", response="+response);
+      assertTrue("Saw HTTP_MOVED_TEMP", responseCode == HttpURLConnection.HTTP_MOVED_TEMP);
+
+      //  Follow the redirect to the index.jsp
+      Header location = formPost.getResponseHeader("Location");
+      String indexURI = location.getValue();
+      GetMethod war1Index = new GetMethod(indexURI);
+      responseCode = httpConn.executeMethod(war1Index.getHostConfiguration(),
+            war1Index, state);
+      response = war1Index.getStatusText();
+      log.debug("responseCode="+responseCode+", response="+response);
+      assertTrue("Get OK", responseCode == HttpURLConnection.HTTP_OK);
+      body = war1Index.getResponseBodyAsString();
+      log.debug("Final result obtained:"+body);
+      if( body.indexOf("j_security_check") > 0 )
+         fail("get of "+indexURI+" redirected to login page"); 
+      if( body.indexOf("Propagation Success") < 0 )
+         fail("Propagation of custom principal within VM failed");  
+   }
+
+   /** Login as user scott using the conf.name login config or
+   'jaas-test' if conf.name is not defined.
+   */
+  private void login() throws Exception
+  {
+     login(username, password);
+  }
+  private void login(String username, char[] password) throws Exception
+  {
+     if( loggedIn )
+        return;
+     
+     lc = null;
+     String confName = System.getProperty("conf.name", "jaas-test");
+     AppCallbackHandler handler = new AppCallbackHandler(username, password);
+     log.debug("Creating LoginContext("+confName+")");
+     lc = new LoginContext(confName, handler);
+     lc.login();
+     log.debug("Created LoginContext, subject="+lc.getSubject());
+     loggedIn = true;
+  }
+  private void logout() throws Exception
+  {
+     if( loggedIn )
+     {
+        loggedIn = false;
+        lc.logout();
+     }
+  }
+  
+  /**
+   * Setup the test suite.
+   */
+  public static Test suite() throws Exception
+  {
+     TestSuite suite = new TestSuite();
+     suite.addTest(new TestSuite(CustomPrincipalPropagationUnitTestCase.class));
+
+     // Create an initializer for the test suite
+     TestSetup wrapper = new JBossTestSetup(suite)
+     {
+        protected void setUp() throws Exception
+        {
+           super.setUp();
+           Configuration.setConfiguration(new XMLLoginConfigImpl());
+           deploy("security-jaas.ear");
+           flushAuthCache("jaas-test");
+           flushAuthCache("jaas-testpropagation");
+        }
+        protected void tearDown() throws Exception
+        {
+           undeploy("security-jaas.ear");
+           super.tearDown();
+        
+        }
+     };
+     return wrapper;
+  }
+  
+  static class MyConfig extends Configuration
+  {
+     AppConfigurationEntry[] entry;
+     MyConfig()
+     {
+        entry = new AppConfigurationEntry[2];
+        HashMap opt0 = new HashMap();
+        opt0.put("principal", new CustomPrincipalImpl(username));
+        opt0.put("credential", password);
+        opt0.put("password-stacking", "useFirstPass"); 
+        entry[0] = new AppConfigurationEntry("org.jboss.test.security.ejb.CustomPrincipalLoginModule", 
+              AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, opt0);
+        entry[1] = new AppConfigurationEntry("org.jboss.security.ClientLoginModule", 
+              AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, opt0);
+     }
+
+     public AppConfigurationEntry[] getAppConfigurationEntry(String appName)
+     {
+        return entry;
+     }
+     public void refresh()
+     {
+     }
+  }
+
+}

Copied: trunk/testsuite/src/resources/security/custom-principal (from rev 60107, branches/Branch_4_2/testsuite/src/resources/security/custom-principal)




More information about the jboss-cvs-commits mailing list