/* * Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com) * Licensed under the Apache License, Version 2.0 (the "License") * $Id: TestEngineExits.java 3918 2008-04-14 17:35:35Z gbevin $ */ package com.uwyn.rife.engine; import com.meterware.httpunit.*; import com.uwyn.rife.TestCaseServerside; import com.uwyn.rife.tools.StringUtils; import com.uwyn.rife.tools.SwallowingLogFormatter; import java.util.HashMap; import java.util.logging.Formatter; import java.util.logging.Handler; import java.util.logging.Logger; public class TestEngineExits extends TestCaseServerside { public TestEngineExits(int siteType, String name) { super(siteType, name); } public void testContextIndependence() throws Exception { WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; setupSite("site/exits.xml"); request = new GetMethodWebRequest("http://localhost:8181/exits/simple/source"); response = conversation.getResponse(request); assertEquals("destination", response.getText()); setupSite("/PREFIX", "site/exits.xml"); request = new GetMethodWebRequest("http://localhost:8181/PREFIX/exits/simple/source"); response = conversation.getResponse(request); assertEquals("destination", response.getText()); } public void testExitSimple() throws Exception { setupSite("site/exits.xml"); WebConversation conversation = new WebConversation(); WebRequest request = new GetMethodWebRequest("http://localhost:8181/exits/simple/source"); WebResponse response = conversation.getResponse(request); assertEquals("destination", response.getText()); } public void testExitSelective() throws Exception { setupSite("site/exits.xml"); WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; request = new GetMethodWebRequest("http://localhost:8181/exits/selective/source"); request.setParameter("switch", "1"); response = conversation.getResponse(request); assertEquals("destination1", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/exits/selective/source"); request.setParameter("switch", "2"); response = conversation.getResponse(request); assertEquals("destination2", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/exits/selective/source"); request.setParameter("switch", "3"); response = conversation.getResponse(request); assertEquals("destination3", response.getText()); } public void testExistsDirectlink() throws Exception { setupSite("site/exits.xml"); WebConversation conversation = new WebConversation(); WebRequest request = new GetMethodWebRequest("http://localhost:8181/exits/directlink/source"); WebResponse response = conversation.getResponse(request); WebLink direct_link = response.getLinkWith("direct link"); direct_link.click(); response = conversation.getCurrentPage(); assertEquals("this isgreat", response.getText()); } public void testExitFlowlinkSpecific() throws Exception { setupSite("site/exits.xml"); WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; WebLink direct_link = null; request = new GetMethodWebRequest("http://localhost:8181/exits/flowlinkspecific/source"); request.setParameter("exitselector", "exit1"); response = conversation.getResponse(request); assertEquals("output1 value"+ "output3 value", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/exits/flowlinkspecific/source"); request.setParameter("exitselector", "exit2"); response = conversation.getResponse(request); assertEquals("output2 value"+ "output3 value", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/exits/flowlinkspecific/source"); request.setParameter("exitselector", "exit1"); request.setParameter("type", "directlink"); response = conversation.getResponse(request); direct_link = response.getLinkWith("link"); direct_link.click(); response = conversation.getCurrentPage(); assertEquals("output1 value"+ "output3 value", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/exits/flowlinkspecific/source"); request.setParameter("exitselector", "exit2"); request.setParameter("type", "directlink"); response = conversation.getResponse(request); direct_link = response.getLinkWith("link"); direct_link.click(); response = conversation.getCurrentPage(); assertEquals("output2 value"+ "output3 value", response.getText()); } public void testExitAutolink() throws Exception { setupSite("site/exits.xml"); WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; WebLink direct_link = null; request = new GetMethodWebRequest("http://localhost:8181/exits/autolink/source"); response = conversation.getResponse(request); assertEquals("output1 value,output2 value,null\n" + "stringvalue1,stringvalue2,stringvalue3,MONDAY,20070313081228000+0100\n"+ "null,null,null,null,null\n", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/exits/autolink/source"); request.setParameter("type", "directlink"); response = conversation.getResponse(request); direct_link = response.getLinkWith("link"); direct_link.click(); response = conversation.getCurrentPage(); assertEquals("output1 value,output2 value,null\n"+ "stringvalue1,stringvalue2,stringvalue3,MONDAY,20070313081228000+0100\n"+ "null,null,null,null,null\n", response.getText()); } public void testExitAutolinkAnnotations() throws Exception { setupSite("site/exits.xml"); WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; WebLink direct_link = null; request = new GetMethodWebRequest("http://localhost:8181/autolinkannotationsource"); response = conversation.getResponse(request); assertEquals("output1 value,output2 value,null\n" + "stringvalue1,stringvalue2,stringvalue3,TUESDAY,20070313082332000+0100\n"+ "null,null,null,null,null\n", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/autolinkannotationsource"); request.setParameter("type", "directlink"); response = conversation.getResponse(request); direct_link = response.getLinkWith("link"); direct_link.click(); response = conversation.getCurrentPage(); assertEquals("output1 value,output2 value,null\n"+ "stringvalue1,stringvalue2,stringvalue3,TUESDAY,20070313082332000+0100\n"+ "null,null,null,null,null\n", response.getText()); } public void testExitsGeneratedUrl() throws Exception { setupSite("site/exits.xml"); WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; request = new GetMethodWebRequest("http://localhost:8181/exits/generatedurl/source"); response = conversation.getResponse(request); WebLink exit1_link = response.getLinkWith("exit1"); response = exit1_link.click(); assertEquals("the first,the second", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/exits/generatedurl/source"); response = conversation.getResponse(request); WebLink exit2_link = response.getLinkWith("exit2"); response = exit2_link.click(); assertEquals("the second,the third", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/exits/generatedurl/source?switch=overridden"); response = conversation.getResponse(request); WebLink exit1_link_overridden = response.getLinkWith("exit1"); response = exit1_link_overridden.click(); assertEquals("the overridden first,the second", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/exits/generatedurl/source?switch=overridden"); response = conversation.getResponse(request); WebLink exit2_link_overridden = response.getLinkWith("exit2"); response = exit2_link_overridden.click(); assertEquals("the second,the overridden third", response.getText()); } public void testExitsGeneratedUrlOverflow() throws Exception { setupSite("site/exits.xml"); // setup swallowing log formatters HashMap<Handler, Formatter> formatters = new HashMap<Handler, Formatter>(); SwallowingLogFormatter formatter = new SwallowingLogFormatter(); Logger logger = Logger.getLogger(""); for (Handler handler : logger.getHandlers()) { formatters.put(handler, handler.getFormatter()); handler.setFormatter(formatter); } try { WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; request = new GetMethodWebRequest("http://localhost:8181/exits/generatedurloverflow/source"); response = conversation.getResponse(request); WebLink exit1_link = response.getLinkWith("exit1"); assertTrue(exit1_link.getURLString().startsWith("/exits/generatedurloverflow/destination;jsessionid=")); assertTrue(exit1_link.getURLString().indexOf("?stateid=") != -1); response = exit1_link.click(); assertEquals("the first,"+StringUtils.repeat("abcdefghijklmnopqrstuvwxyz", 76)+"012345678", response.getText()); assertEquals(2, formatter.getRecords().size()); String msg = "The exit 'exit1' of element '.GENERATEDURLOVERFLOW_SOURCE' generated an URL whose length of 2049 exceeds the maximum length of 2048 bytes, using session state store instead. The generated URL was '/exits/generatedurloverflow/destination?input1=the+first&input2="+StringUtils.repeat("abcdefghijklmnopqrstuvwxyz", 76)+"012345678"+"'."; assertEquals(msg, formatter.getRecords().get(0).getMessage()); assertEquals(msg, formatter.getRecords().get(1).getMessage()); } finally { // restore the previous formatters for (Handler handler : logger.getHandlers()) { handler.setFormatter(formatters.get(handler)); } } } public void testExitsGeneratedForm() throws Exception { setupSite("site/exits.xml"); WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; request = new GetMethodWebRequest("http://localhost:8181/exits/generatedform/source"); response = conversation.getResponse(request); assertEquals("<!--V 'EXIT:FORM:exit3'/-->", response.getFormWithName("test3").getAction()); WebForm exit1_form = response.getFormWithName("test1"); response = exit1_form.submit(); assertEquals("another first,another second", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/exits/generatedform/source?setoutputs=false"); response = conversation.getResponse(request); WebForm exit1_form_nooutputs = response.getFormWithName("test1"); response = exit1_form_nooutputs.submit(); assertEquals("null,null", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/exits/generatedform/source"); response = conversation.getResponse(request); WebForm exit2_form = response.getFormWithName("test2"); response = exit2_form.submit(); assertEquals("another second,another third", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/exits/generatedform/source"); response = conversation.getResponse(request); WebForm exit1_form2 = response.getFormWithName("test4"); response = exit1_form2.submit(); assertEquals("another first,another second", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/exits/generatedform/source?setoutputs=false"); response = conversation.getResponse(request); WebForm exit1_form2_nooutputs = response.getFormWithName("test4"); response = exit1_form2_nooutputs.submit(); assertEquals("null,null", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/exits/generatedform/source"); response = conversation.getResponse(request); WebForm exit2_form2 = response.getFormWithName("test5"); response = exit2_form2.submit(); assertEquals("another second,another third", response.getText()); } public void testExitSnapback() throws Exception { setupSite("site/exits.xml"); WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; request = new GetMethodWebRequest("http://localhost:8181/exits/snapback/simple"); request.setParameter("activate_exit", "1"); response = conversation.getResponse(request); assertEquals("this is the output of simple snapback passthrough"+ "the content of simple snapback source", response.getText()); } public void testExitSnapbackDatalinks() throws Exception { setupSite("site/exits.xml"); WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; request = new GetMethodWebRequest("http://localhost:8181/exits/snapback/datalinks"); request.setParameter("submission", "activate_exit"); request.setParameter("param1", "param1value"); response = conversation.getResponse(request); assertEquals("this is the output of datalinks snapback passthrough"+ "param1value"+ "the content of datalinks snapback source"+ "passthrough value 1"+ "passthrough value 2", response.getText()); } public void testExitBeanNormal() throws Exception { setupSite("site/exits.xml"); WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; request = new GetMethodWebRequest("http://localhost:8181/exits/bean/normal"); request.setParameter("selector", "first"); response = conversation.getResponse(request); assertEquals("stringvalue1,stringvalue2,stringvalue3,MONDAY,20070313083217000+0100"+ "MONDAY,20070313083217000+0100,null,null,null", response.getText()); } public void testExitBeanDifferent() throws Exception { setupSite("site/exits.xml"); WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; request = new GetMethodWebRequest("http://localhost:8181/exits/bean/different"); request.setParameter("selector", "second"); response = conversation.getResponse(request); assertEquals("null,null,null,TUESDAY,20070421083217000+0200"+ "TUESDAY,20070421083217000+0200,null,null,null", response.getText()); } public void testExitBeanSnapback() throws Exception { setupSite("site/exits.xml"); WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; request = new GetMethodWebRequest("http://localhost:8181/exits/bean/snapback"); request.setParameter("selector", "exit"); response = conversation.getResponse(request); assertEquals("stringvalue1,stringvalue2,stringvalue3,SUNDAY,20070313082712000+0100", response.getText()); } public void testExitBeanPrefixSame() throws Exception { setupSite("site/exits.xml"); WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; request = new GetMethodWebRequest("http://localhost:8181/exits/bean/prefix/same"); response = conversation.getResponse(request); assertEquals("stringvalue1,stringvalue2,stringvalue3,WEDNESDAY,20070313081324000+0100"+ "null,null,null,null,null", response.getText()); } public void testExitBeanPrefixDifferent() throws Exception { setupSite("site/exits.xml"); WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; request = new GetMethodWebRequest("http://localhost:8181/exits/bean/prefix/different"); response = conversation.getResponse(request); assertEquals("null,null,null,null,null"+ "null,null,null,null,null", response.getText()); } public void testExitRedirect() throws Exception { setupSite("site/exits.xml"); WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; request = new GetMethodWebRequest("http://localhost:8181/exits/redirect/source"); request.setParameter("switch", "intern"); response = conversation.getResponse(request); assertEquals("this is"+ "great"+ "/exits/redirect/source"+ "switch=intern", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/exits/redirect/source"); request.setParameter("switch", "redirect"); response = conversation.getResponse(request); assertEquals("this is"+ "great"+ "/exits/redirect/destination"+ "input1=this+is&input2=great", response.getText()); } }