1 4 5 package com.tctest.spring.integrationtests.tests; 6 7 import com.meterware.httpunit.WebConversation; 8 import com.meterware.httpunit.WebResponse; 9 import com.tctest.spring.bean.WebFlowBean; 10 import com.tctest.spring.integrationtests.framework.AbstractTwoServerDeploymentTest; 11 import com.tctest.spring.integrationtests.framework.Deployment; 12 import com.tctest.spring.integrationtests.framework.ServerTestSetup; 13 import com.tctest.spring.integrationtests.framework.WebApplicationServer; 14 15 import java.util.Collections ; 16 17 import junit.framework.Test; 18 19 20 38 public class WebFlowTest extends AbstractTwoServerDeploymentTest { 39 40 public WebFlowTest() { 41 } 43 44 protected void tearDown() throws Exception { 45 super.tearDown(); 46 stopAllWebServers(); 47 } 48 49 public static Test suite() { 50 return new WebFlowTestSetup(); 51 } 52 53 public void testDefaultFlowExecution() throws Exception { 54 checkWebFlow("webflow2.htm", false); 55 } 56 57 public void testSingleKeyFlowExecution() throws Exception { 58 checkWebFlow("webflow3.htm", false); 59 } 60 61 public void testContinuationFlowExecution() throws Exception { 62 checkWebFlow("webflow.htm", true); 63 } 64 65 66 private void checkWebFlow(String controller, boolean withStepBack) throws Exception { 67 server1.start(); 68 69 WebConversation webConversation1 = new WebConversation(); 70 71 Response response1 = request(server1, webConversation1, null, null, controller); 72 assertTrue("Expecting non-empty flow execution key; "+response1, response1.flowExecutionKey.length()>0); 73 assertEquals("", response1.result); 74 75 server2.start(); 76 77 Response response2 = request(server2, webConversation1, response1.flowExecutionKey, "valueA", controller); 78 assertTrue("Expecting non-empty flow execution key; "+response2, response2.flowExecutionKey.length()>0); 79 assertEquals("Invalid state; "+response2, WebFlowBean.STATEB, response2.result); 80 assertEquals("valueA", response2.valueA); 81 82 Response response3 = request(server1, webConversation1, response2.flowExecutionKey, "valueB", controller); 83 assertTrue("Expecting non-empty flow execution key; "+response3, response3.flowExecutionKey.length()>0); 84 assertEquals("Invalid state; "+response3, WebFlowBean.STATEC, response3.result); 85 assertEquals("Invalid value; "+response3, "valueB", response3.valueB); 86 87 server1.stop(); 88 server2.stop(); 90 server1.start(); 91 92 if(withStepBack) { 93 Response response3a = request(server1, webConversation1, response2.flowExecutionKey, "valueB1", controller); 95 assertTrue("Expecting non-empty flow execution key; "+response3a, response3a.flowExecutionKey.length()>0); 96 assertEquals("Invalid state; "+response3a, WebFlowBean.STATEC, response3a.result); 97 assertEquals("Invalid value; "+response3a, "valueB1", response3a.valueB); 98 } 99 100 Response response4 = request(server1, webConversation1, response3.flowExecutionKey, "valueC", controller); 102 assertTrue("Expecting non-empty flow execution key; "+response4, response4.flowExecutionKey.length()>0); 103 assertEquals("Invalid state; "+response4, WebFlowBean.STATED, response4.result); 104 assertEquals("Invalid value; "+response4, "valueC", response4.valueC); 105 106 server2.start(); 107 108 Response response5 = request(server2, webConversation1, response4.flowExecutionKey, "valueD", controller); 109 assertEquals("Invalid state; "+response5, WebFlowBean.COMPLETE, response5.result); 111 assertEquals("Invalid value; "+response5, "valueD", response5.valueD); 112 } 113 114 private Response request(WebApplicationServer server, WebConversation conversation, String flowExecutionKey, String value, String controllerName) throws Exception { 115 String params = "_eventId=submit"; 116 if(value!=null) { 117 params += "&value="+value; 118 } 119 if(flowExecutionKey!=null) { 120 params += "&_flowExecutionKey="+flowExecutionKey.trim(); 121 } else { 122 params += "&_flowId=webflow"; 123 } 124 125 WebResponse response = server.ping("/webflow/" + controllerName + "?"+params, conversation); 126 return new Response(response.getText().trim()); 127 } 128 129 130 162 175 176 private static class WebFlowTestSetup extends ServerTestSetup { 177 178 public WebFlowTestSetup() { 179 super(WebFlowTest.class); 180 } 181 182 protected void setUp() throws Exception { 183 try { 184 super.setUp(); 185 186 206 Deployment deployment2 = makeDeploymentBuilder("webflow.war") 207 .addDirectoryOrJARContainingClass(WebFlowTestSetup.class) 208 .addDirectoryContainingResource("/tc-config-files/webflow-tc-config.xml") 209 210 .addDirectoryOrJARContainingClass(org.apache.taglibs.standard.Version.class) .addDirectoryOrJARContainingClass(javax.servlet.jsp.jstl.core.Config.class) .addDirectoryOrJARContainingClass(org.springframework.webflow.engine.builder.xml.XmlFlowRegistryFactoryBean.class) .addDirectoryOrJARContainingClass(org.springframework.binding.convert.Converter.class) .addDirectoryOrJARContainingClass(org.apache.commons.codec.StringDecoder.class) .addDirectoryOrJARContainingClass(ognl.Ognl.class) .addDirectoryOrJARContainingClass(EDU.oswego.cs.dl.util.concurrent.ReentrantLock.class) 219 .addResource("/web-resources", "webflow.jsp", "WEB-INF") 220 .addResource("/com/tctest/spring", "webflow.xml", "WEB-INF") 221 .addResource("/com/tctest/spring", "webflow-beans.xml", "WEB-INF") 222 .addResource("/com/tctest/spring", "webflow-servlet.xml", "WEB-INF") 223 .addResource("/web-resources", "weblogic.xml", "WEB-INF") 224 225 .addServlet("webflow", "*.htm", org.springframework.web.servlet.DispatcherServlet.class, 226 Collections.singletonMap("contextConfigLocation", "/WEB-INF/webflow-servlet.xml"), true) 227 .makeDeployment(); 228 229 server1 = createServer() 230 .addWarDeployment(deployment2, "webflow"); 232 233 server2 = createServer() 234 .addWarDeployment(deployment2, "webflow"); 236 } catch (Exception ex) { 237 ex.printStackTrace(); 238 } 239 } 240 241 private WebApplicationServer createServer() throws Exception { 242 return sm.makeWebApplicationServer("/tc-config-files/webflow-tc-config.xml"); 243 } 244 245 } 246 247 248 private static class Response { 249 public final String text; 250 public final String flowExecutionKey; 251 public final String result; 252 public final String valueA; 253 public final String valueB; 254 public final String valueC; 255 public final String valueD; 256 257 public Response(String text) { 258 this.text = text; 259 260 String [] values = text.split(";"); 261 assertTrue("Expected at least two parameters; "+text, values.length>1); 262 263 this.result = values[0]; 264 this.flowExecutionKey = values[1]; 265 this.valueA = values.length>2 ? values[2] : null; 266 this.valueB = values.length>3 ? values[3] : null; 267 this.valueC = values.length>4 ? values[4] : null; 268 this.valueD = values.length>5 ? values[5] : null; 269 } 270 271 public String toString() { 272 return text; 273 } 274 275 } 276 277 } 278 279 | Popular Tags |