/* * Atricore IDBus * * Copyright (c) 2009, Atricore Inc. * * 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.atricore.idbus.capabilities.josso.test; import org.apache.camel.ContextTestSupport; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.impl.JndiRegistry; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.xbean.spring.context.ClassPathXmlApplicationContext; import java.net.URL; /** * @author <a href=mailto:ajadzinsky@atricore.org>Alejandro Jadzinsky</a> * User: ajadzinsky * Date: May 20, 2009 */ public class JOSSO11WebSelfservicesTest extends ContextTestSupport { private ClassPathXmlApplicationContext applicationContext; private String lostPasswordEndpoint = "http://localhost:9191/JOSSO11/selfservices/lostpassword"; protected void setUp () throws Exception { applicationContext = new ClassPathXmlApplicationContext( new String[]{"/org/atricore/idbus/capabilities/josso/test/josso-test-selfservices.xml"} ); super.setUp(); } protected JndiRegistry createRegistry () throws Exception { JndiRegistry jndi = super.createRegistry(); jndi.bind( "applicationContext", applicationContext ); return jndi; } public void tearDown () throws Exception { if ( System.getProperty( "block.test" ) != null && Boolean.parseBoolean( System.getProperty( "block.test" ) ) ) { log.info( "BLOCKING TEST ..." ); synchronized (this) { try { wait(); } catch ( InterruptedException e ) { /**/} } } super.tearDown(); if ( applicationContext != null ) { applicationContext.close(); } } @Override protected RouteBuilder createRouteBuilder () throws Exception { return new RouteBuilder() { @Override public void configure () throws Exception { from( "jetty:" + lostPasswordEndpoint + "?sessionSupport=true" ) .to( "josso-binding:LostPasswordRecovery?channelRef=josso11-sp-binding" ); } }; } public void testSelfservices() throws Exception { HttpClient client = new HttpClient(); initLostPasswordProcess( client ); followLostPasswordProcess( client ); } private void initLostPasswordProcess (HttpClient client) throws Exception { log.debug( "******************************************************************************" ); log.debug( "initLostPasswordProcess" ); log.debug( "******************************************************************************" ); GetMethod get = new GetMethod( lostPasswordEndpoint + "?josso_cmd=lostPwd" ); get.setFollowRedirects( false ); int status = client.executeMethod( get ); get.getResponseBodyAsString(); assert status == HttpStatus.SC_MOVED_TEMPORARILY : "status code spected " + HttpStatus.SC_MOVED_TEMPORARILY + " found [" + status + "]"; Header h = get.getResponseHeader( "Location" ); assert h != null : "No Location found"; URL url = new URL( h.getValue() ); assert url.getQuery() != null && url.getQuery().contains( "artifactId" ) : "No artifactId found"; } private void followLostPasswordProcess (HttpClient client) throws Exception { log.debug( "******************************************************************************" ); log.debug( "followLostPasswordProcess" ); log.debug( "******************************************************************************" ); /* TODO: email-password-distributor and spring-mailsender should be configured for this specific context PostMethod post = new PostMethod( lostPasswordEndpoint ); NameValuePair challenge = new NameValuePair( "email", "ajadzinsky@atricore.org"); post.setRequestBody( new NameValuePair[]{ challenge } ); post.setFollowRedirects( false ); int status = client.executeMethod( post ); assert status == HttpStatus.SC_MOVED_TEMPORARILY : "status code spected " + HttpStatus.SC_MOVED_TEMPORARILY + " found [" + status + "]"; Header h = post.getResponseHeader( "Location" ); assert h != null : "No Location found"; URL url = new URL( h.getFormat() ); assert url.getQuery() != null && url.getQuery().contains( "artifactId" ) : "No artifactId found"; */ } }