/* * Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com> * Licensed under the Apache License, Version 2.0 (the "License") * $Id: TestEngineStateSession.java 3918 2008-04-14 17:35:35Z gbevin $ */ package com.uwyn.rife.engine; import java.io.File; import com.meterware.httpunit.*; import com.uwyn.rife.TestCaseServerside; import com.uwyn.rife.tools.FileUtils; public class TestEngineStateSession extends TestCaseServerside { public TestEngineStateSession(int siteType, String name) { super(siteType, name); } public void testSubmissionInputsPreserved() throws Exception { setupSite("site/statesession.xml"); WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; WebLink submission_link = null; WebForm submission_form = null; request = new GetMethodWebRequest("http://localhost:8181/submissions/inputspreserved"); request.setParameter("input1", "submission1input1value"); request.setParameter("input4", "submission1input4value"); try { response = conversation.getResponse(request); } catch (Throwable e) {getLogSink().getInternalException().printStackTrace();} assertTrue(isSessionResponse(response)); submission_link = response.getLinkWith("submission1"); assertTrue(isSessionLink(submission_link)); submission_link.click(); response = conversation.getCurrentPage(); assertEquals("thevalue"+ "submission1input1value"+ "null"+ "input3default", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/submissions/inputspreserved"); request.setParameter("input1", "submission2input1value"); request.setParameter("input4", "submission2input4value"); response = conversation.getResponse(request); submission_form = response.getForms()[0]; assertTrue(isSessionForm(submission_form)); submission_form.setParameter("login", "gbevin2"); response = submission_form.submit(); submission_form = response.getForms()[0]; assertTrue(isSessionForm(submission_form)); submission_form.setParameter("password", "oncemoremypassword"); response = submission_form.submit(); assertEquals("gbevin2,oncemoremypassword"+ "submission2input1value"+ "null"+ "input3default", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/submissions/inputspreserved"); request.setParameter("input1", "submission3input1value"); request.setParameter("input4", "submission3input4value"); response = conversation.getResponse(request); submission_form = response.getForms()[1]; assertTrue(isSessionForm(submission_form)); response = submission_form.submit(); submission_form = response.getForms()[1]; assertTrue(isSessionForm(submission_form)); submission_form.setParameter("login", "me"); response = submission_form.submit(); assertEquals("me,it is"+ "submission3input1value"+ "null"+ "input3default", response.getText()); request = new GetMethodWebRequest("http://localhost:8181/submissions/inputspreserved"); request.setParameter("input1", "submission4input1value"); request.setParameter("input4", "submission4input4value"); response = conversation.getResponse(request); submission_link = response.getLinkWith("submission4"); assertTrue(isSessionLink(submission_link)); submission_link.click(); response = conversation.getCurrentPage(); assertEquals("submission4"+ "submission4input1value"+ "null"+ "input3default", response.getText()); } public void testFileUploadSingleParamMultipleFiles() throws Exception { setupSite("site/statesession.xml"); WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; WebForm form = null; request = new GetMethodWebRequest("http://localhost:8181/fileupload/simple"); response = conversation.getResponse(request); assertTrue(isSessionResponse(response)); form = response.getForms()[0]; assertTrue(isSessionForm(form)); String upload1_content = "abcdefghijklmnopqrstuvwxyz"; File upload1 = File.createTempFile("rifetest", ".tmp"); String upload2_content = "oiuezroizehfkjsdgfhgizeugfizuhfksjdhfiuzhfiuzehfizeuhfziuh"; File upload2 = File.createTempFile("rifetest", ".tmp"); upload1.deleteOnExit(); FileUtils.writeString(upload1_content, upload1); upload2.deleteOnExit(); FileUtils.writeString(upload2_content, upload2); form.setParameter("purpose", "it will serve you well"); UploadFileSpec upload_spec1 = new UploadFileSpec(upload1); UploadFileSpec upload_spec2 = new UploadFileSpec(upload2); form.setParameter("doc1", new UploadFileSpec[] {upload_spec1, upload_spec2}); response = form.submit(); assertEquals(upload1_content+","+upload2_content+";no file 2;it will serve you well", response.getText()); upload1.delete(); upload2.delete(); } public void testExistsDirectlink() throws Exception { setupSite("site/statesession.xml"); WebConversation conversation = new WebConversation(); WebRequest request = new GetMethodWebRequest("http://localhost:8181/exits/directlink/source"); WebResponse response = conversation.getResponse(request); assertTrue(isSessionResponse(response)); WebLink direct_link = response.getLinkWith("direct link"); assertTrue(isSessionLink(direct_link)); direct_link.click(); response = conversation.getCurrentPage(); assertEquals("this isgreat", response.getText()); } public void testExitsGeneratedUrl() throws Exception { setupSite("site/statesession.xml"); WebConversation conversation = new WebConversation(); WebRequest request = null; WebResponse response = null; request = new GetMethodWebRequest("http://localhost:8181/exits/generatedurl/source"); response = conversation.getResponse(request); assertTrue(isSessionResponse(response)); WebLink exit1_link = response.getLinkWith("exit1"); assertTrue(isSessionLink(exit1_link)); 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"); assertTrue(isSessionLink(exit2_link)); 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"); assertTrue(isSessionLink(exit1_link_overridden)); 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"); assertTrue(isSessionLink(exit2_link_overridden)); response = exit2_link_overridden.click(); assertEquals("the second,the overridden third", response.getText()); } public void testExistsDirectlinkQuerystate() throws Exception { setupSite("site/statesession.xml"); WebConversation conversation = new WebConversation(); WebRequest request = new GetMethodWebRequest("http://localhost:8181/exits/directlink/source/querystate"); WebResponse response = conversation.getResponse(request); assertTrue(isSessionResponse(response)); WebLink direct_link = response.getLinkWith("direct link"); assertFalse(isSessionLink(direct_link)); direct_link.click(); response = conversation.getCurrentPage(); assertEquals("this isgreat", response.getText()); } public void testSubmissionSubsite() throws Exception { setupSite("site/statesession.xml"); WebConversation conversation = new WebConversation(); WebRequest request = new GetMethodWebRequest("http://localhost:8181/subsite/submission"); WebResponse response = conversation.getResponse(request); assertTrue(isSessionResponse(response)); WebForm submission_form = response.getForms()[0]; assertTrue(isSessionForm(submission_form)); submission_form.setParameter("login", "gbevin2"); submission_form.setParameter("password", "oncemoremypassword"); response = submission_form.submit(); assertEquals("gbevin2,oncemoremypassword", response.getText()); } private boolean isSessionResponse(WebResponse response) { return 1 == response.getNewCookieNames().length && "JSESSIONID".equals(response.getNewCookieNames()[0]); } private boolean isSessionLink(WebLink link) { return link.getURLString().indexOf(ReservedParameters.STATEID) != -1; } private boolean isSessionForm(WebForm form) { return form.hasParameterNamed(ReservedParameters.STATEID); } }