Author: anil.saldhana(a)jboss.com
Date: 2009-10-29 14:17:54 -0400 (Thu, 29 Oct 2009)
New Revision: 885
Added:
identity-federation/trunk/jboss-identity-bindings/src/test/java/org/jboss/test/identity/federation/bindings/workflow/SAML2PostTomcatWorkflowUnitTestCase.java
Modified:
identity-federation/trunk/jboss-identity-bindings/src/test/java/org/jboss/test/identity/federation/bindings/mock/MockCatalinaResponse.java
identity-federation/trunk/parent/pom.xml
Log:
add mock test
Modified:
identity-federation/trunk/jboss-identity-bindings/src/test/java/org/jboss/test/identity/federation/bindings/mock/MockCatalinaResponse.java
===================================================================
---
identity-federation/trunk/jboss-identity-bindings/src/test/java/org/jboss/test/identity/federation/bindings/mock/MockCatalinaResponse.java 2009-10-28
22:21:18 UTC (rev 884)
+++
identity-federation/trunk/jboss-identity-bindings/src/test/java/org/jboss/test/identity/federation/bindings/mock/MockCatalinaResponse.java 2009-10-29
18:17:54 UTC (rev 885)
@@ -22,6 +22,7 @@
package org.jboss.test.identity.federation.bindings.mock;
import java.io.IOException;
+import java.io.PrintWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
@@ -39,7 +40,7 @@
private int status;
public String redirectString;
@SuppressWarnings("unused")
- private Writer mywriter;
+ private PrintWriter mywriter;
@Override
public void setCharacterEncoding(String charset)
@@ -78,6 +79,28 @@
public void setWriter(Writer w)
{
- this.mywriter = w;
- }
+ this.mywriter = (PrintWriter) w;
+ }
+
+
+ @Override
+ public PrintWriter getWriter() throws IOException
+ {
+ return this.mywriter;
+ }
+
+ @Override
+ public void setContentLength(int length)
+ {
+ }
+
+ @Override
+ public void setContentType(String arg0)
+ {
+ }
+
+ @Override
+ public void recycle()
+ {
+ }
}
\ No newline at end of file
Added:
identity-federation/trunk/jboss-identity-bindings/src/test/java/org/jboss/test/identity/federation/bindings/workflow/SAML2PostTomcatWorkflowUnitTestCase.java
===================================================================
---
identity-federation/trunk/jboss-identity-bindings/src/test/java/org/jboss/test/identity/federation/bindings/workflow/SAML2PostTomcatWorkflowUnitTestCase.java
(rev 0)
+++
identity-federation/trunk/jboss-identity-bindings/src/test/java/org/jboss/test/identity/federation/bindings/workflow/SAML2PostTomcatWorkflowUnitTestCase.java 2009-10-29
18:17:54 UTC (rev 885)
@@ -0,0 +1,200 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, 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.identity.federation.bindings.workflow;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.PrintWriter;
+import java.net.URL;
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpSessionEvent;
+
+import junit.framework.TestCase;
+
+import org.apache.catalina.deploy.LoginConfig;
+import org.apache.catalina.realm.GenericPrincipal;
+import org.jboss.identity.federation.api.saml.v2.request.SAML2Request;
+import org.jboss.identity.federation.api.saml.v2.response.SAML2Response;
+import org.jboss.identity.federation.api.util.Base64;
+import org.jboss.identity.federation.bindings.tomcat.idp.IDPWebBrowserSSOValve;
+import org.jboss.identity.federation.bindings.tomcat.sp.SPPostFormAuthenticator;
+import org.jboss.identity.federation.core.saml.v2.common.IDGenerator;
+import org.jboss.identity.federation.core.saml.v2.util.DocumentUtil;
+import org.jboss.identity.federation.saml.v2.protocol.AuthnRequestType;
+import org.jboss.identity.federation.saml.v2.protocol.ResponseType;
+import org.jboss.identity.federation.web.constants.GeneralConstants;
+import org.jboss.identity.federation.web.core.IdentityServer;
+import org.jboss.identity.federation.web.util.PostBindingUtil;
+import org.jboss.test.identity.federation.bindings.mock.MockCatalinaContext;
+import org.jboss.test.identity.federation.bindings.mock.MockCatalinaContextClassLoader;
+import org.jboss.test.identity.federation.bindings.mock.MockCatalinaRealm;
+import org.jboss.test.identity.federation.bindings.mock.MockCatalinaRequest;
+import org.jboss.test.identity.federation.bindings.mock.MockCatalinaResponse;
+import org.jboss.test.identity.federation.bindings.mock.MockCatalinaSession;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+/**
+ * @author Anil.Saldhana(a)redhat.com
+ * @since Oct 29, 2009
+ */
+public class SAML2PostTomcatWorkflowUnitTestCase extends TestCase
+{
+ private String profile = "saml2/post";
+ private ClassLoader tcl = Thread.currentThread().getContextClassLoader();
+
+ private String employee = "http://localhost:8080/employee/";
+ private String identity = "http://localhost:8080/idp/";
+
+ public void testSAML2Post() throws Exception
+ {
+ String id = IDGenerator.create("ID_");
+ SAML2Request saml2Request = new SAML2Request();
+ AuthnRequestType art = saml2Request.createAuthnRequestType(id,
+ employee, identity, employee);
+
+ MockCatalinaContext servletContext = new MockCatalinaContext();
+
+ //First we go to the employee application
+ MockCatalinaContextClassLoader mclSPEmp = setupTCL(profile +
"/sp/employee");
+ Thread.currentThread().setContextClassLoader(mclSPEmp);
+ SPPostFormAuthenticator spEmpl = new SPPostFormAuthenticator();
+
+ MockCatalinaContext context = new MockCatalinaContext();
+ spEmpl.setContainer(context);
+ spEmpl.testStart();
+
+ MockCatalinaRequest catalinaRequest = new MockCatalinaRequest();
+
+ MockCatalinaResponse catalinaResponse = new MockCatalinaResponse();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ catalinaResponse.setWriter(new PrintWriter(baos));
+
+ LoginConfig loginConfig = new LoginConfig();
+ spEmpl.authenticate(catalinaRequest, catalinaResponse, loginConfig);
+
+ String spResponse = new String(baos.toByteArray());
+ Document spHTMLResponse = DocumentUtil.getDocument(spResponse);
+ NodeList nodes = spHTMLResponse.getElementsByTagName("INPUT");
+ Element inputElement = (Element)nodes.item(0);
+ String idpResponse = inputElement.getAttributeNode("VALUE").getValue();
+ @SuppressWarnings("unused")
+ String relayState = null;
+ if(nodes.getLength() > 1)
+ relayState =
((Element)nodes.item(1)).getAttributeNode("VALUE").getValue();
+
+ //Lets call the IDPServlet
+
+ MockCatalinaSession session = new MockCatalinaSession();
+ servletContext = new MockCatalinaContext();
+ session.setServletContext(servletContext);
+ IdentityServer server = this.getIdentityServer(session);
+ servletContext.setAttribute("IDENTITY_SERVER", server);
+
+
+ MockCatalinaContextClassLoader mclIDP = setupTCL(profile + "/idp");
+ Thread.currentThread().setContextClassLoader(mclIDP);
+
+ MockCatalinaRequest request = new MockCatalinaRequest();
+ request.addHeader("Referer",
"http://localhost:8080/employee/");
+
+ request.setParameter(GeneralConstants.USERNAME_FIELD, "anil");
+ request.setParameter(GeneralConstants.PASS_FIELD, "anil");
+
+
+ MockCatalinaResponse response = new MockCatalinaResponse();
+ baos = new ByteArrayOutputStream();
+ response.setWriter(new PrintWriter(baos));
+
+ context = new MockCatalinaContext();
+ IDPWebBrowserSSOValve idp = new IDPWebBrowserSSOValve();
+ idp.setContainer(context);
+ idp.setSignOutgoingMessages(false);
+ idp.start();
+
+ String samlAuth = DocumentUtil.getDocumentAsString(saml2Request.convert(art));
+
+ String samlMessage = Base64.encodeBytes(samlAuth.getBytes());
+
+ MockCatalinaRealm realm = new MockCatalinaRealm("anil", "test",
new Principal()
+ {
+ public String getName()
+ {
+ return "anil";
+ }
+ });
+
+ List<String> roles = new ArrayList<String>();
+ roles.add("manager");
+ roles.add("employee");
+
+ request = new MockCatalinaRequest();
+ request.setRemoteAddr(employee);
+ request.setSession(session);
+ request.setParameter("SAMLRequest", samlMessage);
+ request.setUserPrincipal(new GenericPrincipal(realm, "anil",
"test", roles) );
+ request.setMethod("POST");
+
+ //Lets start the workflow with post
+ idp.invoke(request, response);
+
+ String idpResponseString = new String(baos.toByteArray());
+ Document idpHTMLResponse = DocumentUtil.getDocument(idpResponseString);
+ nodes = idpHTMLResponse.getElementsByTagName("INPUT");
+ inputElement = (Element)nodes.item(0);
+ idpResponse = inputElement.getAttributeNode("VALUE").getValue();
+ relayState = null;
+ if(nodes.getLength() > 1)
+ relayState =
((Element)nodes.item(1)).getAttributeNode("VALUE").getValue();
+
+ byte[] samlIDPResponse = PostBindingUtil.base64Decode(idpResponse);
+
+ SAML2Response saml2Response = new SAML2Response();
+ ResponseType rt = saml2Response.getResponseType(new
ByteArrayInputStream(samlIDPResponse));
+
+ assertEquals("Match Identity URL:" , this.identity,
rt.getIssuer().getValue());
+ }
+
+ private MockCatalinaContextClassLoader setupTCL(String resource)
+ {
+ URL[] urls = new URL[] {tcl.getResource(resource)};
+
+ MockCatalinaContextClassLoader mcl = new MockCatalinaContextClassLoader(urls);
+ mcl.setDelegate(tcl);
+ mcl.setProfile(resource);
+ return mcl;
+ }
+
+
+ //Get the Identity server
+ private IdentityServer getIdentityServer(HttpSession session)
+ {
+ IdentityServer server = new IdentityServer();
+ server.sessionCreated(new HttpSessionEvent(session));
+ return server;
+ }
+}
Modified: identity-federation/trunk/parent/pom.xml
===================================================================
--- identity-federation/trunk/parent/pom.xml 2009-10-28 22:21:18 UTC (rev 884)
+++ identity-federation/trunk/parent/pom.xml 2009-10-29 18:17:54 UTC (rev 885)
@@ -134,7 +134,7 @@
<dependency>
<groupId>org.jboss.security</groupId>
<artifactId>jbossxacml</artifactId>
- <version>2.0.4.SP1</version>
+ <version>2.0.4</version>
</dependency>
<dependency>
<groupId>org.openid4java</groupId>