/*
* Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com>
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: TestEngineSubsites.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.engine;
import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.WebConversation;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;
import com.uwyn.rife.TestCaseServerside;
import java.net.InetAddress;
public class TestEngineSubsites extends TestCaseServerside
{
public TestEngineSubsites(int siteType, String name)
{
super(siteType, name);
}
public void testGlobalVarsOverriddenBySubsite()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/globalvar/overridden/globalvar");
response = conversation.getResponse(request);
assertEquals("parent1", response.getText());
request = new GetMethodWebRequest("http://localhost:8181/globalvar/overridden/globalvar");
request.setParameter("globalvar1", "request value1");
response = conversation.getResponse(request);
assertEquals("request value1|subsite value2|", response.getText());
request = new GetMethodWebRequest("http://localhost:8181/globalvar/overridden/globalvar");
request.setParameter("globalvar1", "request value1");
request.setParameter("globalvar2", "request value2");
request.setParameter("globalvar3", "request value3");
response = conversation.getResponse(request);
assertEquals("request value1|request value2|request value3", response.getText());
}
public void testGlobalVarsDefaultTriggeredChild()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/globalvar/defaulttriggeredchild/globalvar");
response = conversation.getResponse(request);
assertEquals("default value1|default value2|subsite value3", response.getText());
request = new GetMethodWebRequest("http://localhost:8181/globalvar/defaulttriggeredchild/globalvar");
request.setParameter("globalvar1", "request value1");
request.setParameter("globalvar2", "request value2");
request.setParameter("globalvar3", "request value3");
response = conversation.getResponse(request);
assertEquals("request value1|request value2|request value3", response.getText());
}
public void testGlobalVarsStraightToSubsite()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/globalvar/straight/globalvar");
response = conversation.getResponse(request);
assertEquals("default value1|default value2||subsite value4", response.getText());
request = new GetMethodWebRequest("http://localhost:8181/globalvar/straight/globalvar");
request.setParameter("globalvar1", "request value1");
request.setParameter("globalvar2", "request value2");
request.setParameter("globalvar3", "request value3");
request.setParameter("globalvar4", "request value4");
response = conversation.getResponse(request);
assertEquals("request value1|request value2|request value3|request value4", response.getText());
}
public void testGlobalDestDataLinking()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
// here data is provided to the destination through the outputs of the source
request = new GetMethodWebRequest("http://localhost:8181/globalexit/isolation/globaldestsource");
request.setParameter("globalvar1", "request value1");
request.setParameter("sourceinput1", "request value1 dest1");
response = conversation.getResponse(request);
assertEquals("globaldest1-request value1|default value2|-request value1 dest1|default input value 2|default output value 3", response.getText());
// no data is provided at all to the destination and thus only global vars are available
request = new GetMethodWebRequest("http://localhost:8181/globalexit/isolation/globaldestsource");
request.setParameter("globalvar1", "request value1");
request.setParameter("sourceinput1", "request value1 dest2");
response = conversation.getResponse(request);
assertEquals("globaldest2-request value1|default value2|-||", response.getText());
}
/**
* Test a global exit that links to a subsite with an arrival element
*/
public void testGlobalDestArrival()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
// toplevel site
request = new GetMethodWebRequest("http://localhost:8181/globalexit/arrival");
response = conversation.getResponse(request);
assertEquals(
"null"+
"null"+
"/globalexit/arrival"+
"arrival", response.getText());
// subsite
request = new GetMethodWebRequest("http://localhost:8181/globalexit/straight/globaldestsource");
request.setParameter("exitselector", "arrival");
response = conversation.getResponse(request);
assertEquals(
"null"+
"null"+
"/globalexit/straight/globaldestsource"+
"arrival", response.getText());
}
/**
* Tests a global exit that's only defined in the subsite and not in the parent
**/
public void testGlobalDestIsolation()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/globalexit/isolation/globaldestsource");
request.setParameter("globalvar1", "request value1");
request.setParameter("sourceinput1", "request value1 dest3");
response = conversation.getResponse(request);
assertEquals("globaldesttargetfirst-request value1|subsite value2|-||", response.getText());
}
// subsites aren't able to override the global exit target by defining elements with the same id
// globalvar is thus also not passed along since the target element lies in a different scope
public void testGlobalDestRemainsInitialDefinition()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/globalexit/overloading/globaldestsource");
request.setParameter("exitselector", "1");
response = conversation.getResponse(request);
assertEquals("globaldest1-default value1|default value2|-||", response.getText());
request = new GetMethodWebRequest("http://localhost:8181/globalexit/overloading/globaldestsource");
request.setParameter("exitselector", "2");
response = conversation.getResponse(request);
assertEquals("globaldest2-default value1|default value2|-||", response.getText());
}
public void testGlobalDestStraightToSubsite()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/globalexit/straight/globaldestsource");
request.setParameter("exitselector", "1");
response = conversation.getResponse(request);
assertEquals("globaldest1-default value1|default value2|-||", response.getText());
request = new GetMethodWebRequest("http://localhost:8181/globalexit/straight/globaldestsource");
request.setParameter("exitselector", "2");
response = conversation.getResponse(request);
assertEquals("globaldest2-default value1|default value2|-||", response.getText());
request = new GetMethodWebRequest("http://localhost:8181/globalexit/straight/globaldestsource");
request.setParameter("exitselector", "3");
response = conversation.getResponse(request);
assertEquals("subsite3-globaldesttarget1-default value1|default value2|", response.getText());
}
public void testAbsoluteExit()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
// globalvar4 is not passed on due to the different scopes and thus the default value is used
request = new GetMethodWebRequest("http://localhost:8181/absolute");
response = conversation.getResponse(request);
assertEquals("absolute_target:value1absolute|default value2|value3absolute|subsite value4", response.getText());
}
public void testInheritanceSingle()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
// single inheritance
request = new GetMethodWebRequest("http://localhost:8181/inheritance/single/targetchild");
response = conversation.getResponse(request);
assertEquals("parent1", response.getText());
request = new GetMethodWebRequest("http://localhost:8181/inheritance/single/targetchild");
request.setParameter("globalvar1", "request value1");
response = conversation.getResponse(request);
assertEquals("targetchild", response.getText());
}
public void testInheritanceStack()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
// inheritance stack
request = new GetMethodWebRequest("http://localhost:8181/inheritance/stack/targetchild");
response = conversation.getResponse(request);
assertEquals("parent1", response.getText());
request = new GetMethodWebRequest("http://localhost:8181/inheritance/stack/targetchild");
request.setParameter("globalvar1", "request value1");
response = conversation.getResponse(request);
assertEquals("inheritance parent 1", response.getText());
request = new GetMethodWebRequest("http://localhost:8181/inheritance/stack/targetchild");
request.setParameter("globalvar1", "request value1");
request.setParameter("globalvar_inheritance1", "request value");
response = conversation.getResponse(request);
assertEquals("targetchild", response.getText());
}
public void testInheritanceElementWithInheritanceStack()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
// inheritance from element that has its own inheritance stack
request = new GetMethodWebRequest("http://localhost:8181/inheritance/repeatedstack/targetchild");
request.setParameter("globalvar1", "request value1");
response = conversation.getResponse(request);
assertEquals("inheritance parent 2", response.getText());
request = new GetMethodWebRequest("http://localhost:8181/inheritance/repeatedstack/targetchild");
request.setParameter("globalvar1", "request value1");
request.setParameter("globalvar_inheritance2", "request value");
response = conversation.getResponse(request);
assertEquals("targetchild", response.getText());
}
public void testInheritanceParentSubsiteChildElement()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/inheritance/parent/childelement");
response = conversation.getResponse(request);
assertEquals("parent1", response.getText());
request = new GetMethodWebRequest("http://localhost:8181/inheritance/parent/childelement");
request.setParameter("globalvar1", "request value1");
response = conversation.getResponse(request);
assertEquals("parent subsite arrival", response.getText());
request = new GetMethodWebRequest("http://localhost:8181/inheritance/parent/childelement");
request.setParameter("globalvar1", "request value1");
request.setParameter("parent_subsite_trigger", "request value");
response = conversation.getResponse(request);
assertEquals("targetchild", response.getText());
}
public void testInheritanceParentSubsiteChildSubsite()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/inheritance/parent/childsubsite/targetchild");
response = conversation.getResponse(request);
assertEquals("parent1", response.getText());
request = new GetMethodWebRequest("http://localhost:8181/inheritance/parent/childsubsite/targetchild");
request.setParameter("globalvar1", "request value1");
response = conversation.getResponse(request);
assertEquals("parent subsite arrival", response.getText());
request = new GetMethodWebRequest("http://localhost:8181/inheritance/parent/childsubsite/targetchild");
request.setParameter("globalvar1", "request value1");
request.setParameter("parent_subsite_trigger", "request value");
response = conversation.getResponse(request);
assertEquals("targetchild", response.getText());
}
public void testArrivalSimple()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181");
response = conversation.getResponse(request);
assertEquals("output value 1output value 2"+
"/"+
"arrival", response.getText());
}
public void testArrivalSimpleRedirect()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/arrival_redirect");
response = conversation.getResponse(request);
assertEquals("output value 1output value 2"+
"/subsite/arrival_redirect/arrival"+
"arrival", response.getText());
}
public void testArrivalNourlRedirect()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/arrival_redirect_nourl");
response = conversation.getResponse(request);
assertEquals("output value 1output value 2"+
"/subsite/arrival_redirect_nourl/"+
"arrival", response.getText());
}
public void testArrivalExitToSubsite()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
// element with flowlink to subsite (and thus arrival element)
request = new GetMethodWebRequest("http://localhost:8181/arrival_target_subsite");
response = conversation.getResponse(request);
assertEquals(
"output value 1"+
"output value 2"+
"/arrival_target_subsite"+
"arrival", response.getText());
// direct access of subsite's url prefix (and thus arrival element)
request = new GetMethodWebRequest("http://localhost:8181/subsite/arrival");
request.setParameter("input1", "output value 1a");
request.setParameter("input2", "output value 2a");
response = conversation.getResponse(request);
assertEquals(
"output value 1a"+
"output value 2a"+
"/subsite/arrival"+
"arrival", response.getText());
// direct access of arrival element
request = new GetMethodWebRequest("http://localhost:8181/subsite/arrival/arrival");
request.setParameter("input1", "output value 1b");
request.setParameter("input2", "output value 2b");
response = conversation.getResponse(request);
assertEquals(
"output value 1b"+
"output value 2b"+
"/subsite/arrival/arrival"+
"arrival", response.getText());
}
public void testArrivalInheritance()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
// element with flowlink to subsite (and thus arrival element)
// without a child trigger
request = new GetMethodWebRequest("http://localhost:8181/arrival_inheritance");
response = conversation.getResponse(request);
assertEquals("parent1", response.getText());
// element with flowlink to subsite (and thus arrival element)
// with a valid child trigger
request = new GetMethodWebRequest("http://localhost:8181/arrival_inheritance");
request.setParameter("globalvar1", "request value1");
response = conversation.getResponse(request);
assertEquals(
"output value 1"+
"output value 2"+
"/arrival_inheritance"+
"arrival", response.getText());
// direct access of subsite's url prefix (and thus arrival element)
// without a child trigger
request = new GetMethodWebRequest("http://localhost:8181/subsite/arrival_inheritance");
request.setParameter("input1", "output value 1a");
request.setParameter("input2", "output value 2a");
response = conversation.getResponse(request);
assertEquals("parent1", response.getText());
// direct access of subsite's url prefix (and thus arrival element)
// with a valid child trigger
request = new GetMethodWebRequest("http://localhost:8181/subsite/arrival_inheritance");
request.setParameter("globalvar1", "request value1");
request.setParameter("input1", "output value 1a");
request.setParameter("input2", "output value 2a");
response = conversation.getResponse(request);
assertEquals(
"output value 1a"+
"output value 2a"+
"/subsite/arrival_inheritance"+
"arrival", response.getText());
// direct access of arrival element
// without a child trigger
request = new GetMethodWebRequest("http://localhost:8181/subsite/arrival_inheritance/arrival");
request.setParameter("input1", "output value 1a");
request.setParameter("input2", "output value 2a");
response = conversation.getResponse(request);
assertEquals("parent1", response.getText());
// direct access of arrival element
// with a valid child trigger
request = new GetMethodWebRequest("http://localhost:8181/subsite/arrival_inheritance/arrival");
request.setParameter("globalvar1", "request value1");
request.setParameter("input1", "output value 1a");
request.setParameter("input2", "output value 2a");
response = conversation.getResponse(request);
assertEquals(
"output value 1a"+
"output value 2a"+
"/subsite/arrival_inheritance/arrival"+
"arrival", response.getText());
}
public void testArrivalNoUrl()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
// element with flowlink to subsite (and thus arrival element)
request = new GetMethodWebRequest("http://localhost:8181/arrival_nourl");
response = conversation.getResponse(request);
assertEquals(
"output value 1"+
"output value 2"+
"/arrival_nourl"+
"arrival", response.getText());
// direct access of subsite's url prefix, since the arrival element has
// no url, the site url prefix doesn't refer to the actual arrival element
request = new GetMethodWebRequest("http://localhost:8181/subsite/arrival_nourl");
request.setParameter("input1", "output value 1a");
request.setParameter("input2", "output value 2a");
response = conversation.getResponse(request);
assertEquals(
"output value 1a"+
"output value 2a"+
"/subsite/arrival_nourl"+
"arrival", response.getText());
}
public void testDeparture()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/departure/source");
request.setParameter("globalvar2", "request value1");
request.setParameter("globalvar3", "request value2");
request.setParameter("globalvar_inheritance1", "request value3");
request.setParameter("globalvar_inheritance2", "request value4");
request.setParameter("globalvar_inheritance3", "request value5");
response = conversation.getResponse(request);
assertEquals(
"default value1"+
"request value1"+
"request value2"+
"source value1"+
"some"+
"another value"+
"null"+
"set by source"+
"some"+
"null", response.getText());
}
public void testArrivalStraightToSubsite()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
// access arrival directly
request = new GetMethodWebRequest("http://localhost:8181/subsite/arrival_subsite");
request.setParameter("input1", "input value 1");
request.setParameter("input2", "input value 2");
response = conversation.getResponse(request);
assertEquals(
"input value 1"+
"input value 2"+
"/subsite/arrival_subsite"+
"arrival", response.getText());
// access arrival directly with additional slash
request = new GetMethodWebRequest("http://localhost:8181/subsite/arrival_subsite/");
request.setParameter("input1", "input value 1");
request.setParameter("input2", "input value 2");
response = conversation.getResponse(request);
assertEquals(
"input value 1"+
"input value 2"+
"/subsite/arrival_subsite/"+
"arrival", response.getText());
// direct access of arrival element
request = new GetMethodWebRequest("http://localhost:8181/subsite/arrival_subsite/arrival");
request.setParameter("input1", "input value 1b");
request.setParameter("input2", "input value 2b");
response = conversation.getResponse(request);
assertEquals(
"input value 1b"+
"input value 2b"+
"/subsite/arrival_subsite/arrival"+
"arrival", response.getText());
}
public void testArrivalStraightToSubsiteTrailingSlash()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
// access arrival directly
request = new GetMethodWebRequest("http://localhost:8181/subsite/arrival_subsite_slash/");
request.setParameter("input1", "input value 1");
request.setParameter("input2", "input value 2");
response = conversation.getResponse(request);
assertEquals(
"input value 1"+
"input value 2"+
"/subsite/arrival_subsite_slash/"+
"arrival", response.getText());
// access arrival directly without the slash
request = new GetMethodWebRequest("http://localhost:8181/subsite/arrival_subsite_slash");
request.setParameter("input1", "input value 1");
request.setParameter("input2", "input value 2");
response = conversation.getResponse(request);
assertEquals(
"input value 1"+
"input value 2"+
"/subsite/arrival_subsite_slash"+
"arrival", response.getText());
// direct access of arrival element
request = new GetMethodWebRequest("http://localhost:8181/subsite/arrival_subsite_slash/arrival");
request.setParameter("input1", "input value 1b");
request.setParameter("input2", "input value 2b");
response = conversation.getResponse(request);
assertEquals(
"input value 1b"+
"input value 2b"+
"/subsite/arrival_subsite_slash/arrival"+
"arrival", response.getText());
}
public void testSubsiteMultipleSlash()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
// access arrival directly
request = new GetMethodWebRequest("http://localhost:8181/subsite/multiple_slash/simple");
response = conversation.getResponse(request);
// Get the host name
String hostname = InetAddress.getByName("127.0.0.1").getHostName();
assertEquals("Just some text 127.0.0.1:"+hostname+":.MULTIPLE_SLASH.simple_html:", response.getText());
}
public void testSubsiteNoFile()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
// access arrival directly
request = new GetMethodWebRequest("http://localhost:8181/nofile/simple");
response = conversation.getResponse(request);
// Get the host name
String hostname = InetAddress.getByName("127.0.0.1").getHostName();
assertEquals("Just some text 127.0.0.1:"+hostname+":.NOFILE.SIMPLE:", response.getText());
}
public void testArrivalDefaultTemplate()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/subsite/arrival_default_template");
response = conversation.getResponse(request);
assertEquals("arrival default template\n"+
".ARRIVAL_DEFAULT_TEMPLATE.\n"+
".ARRIVAL_DEFAULT_TEMPLATE.DefaultTemplate\n"+
"/subsite/arrival_default_template\n", response.getText());
request = new GetMethodWebRequest("http://localhost:8181/subsite/arrival_default_template/arrival");
response = conversation.getResponse(request);
assertEquals("arrival default template\n"+
".ARRIVAL_DEFAULT_TEMPLATE.DefaultTemplate\n"+
".ARRIVAL_DEFAULT_TEMPLATE.DefaultTemplate\n"+
"/subsite/arrival_default_template/arrival\n", response.getText());
}
public void testAnnotationsDestClassIdPrefix()
throws Exception
{
setupSite("site/subsites.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
// access arrival directly
request = new GetMethodWebRequest("http://localhost:8181/annotationssource");
response = conversation.getResponse(request);
assertEquals("output value 1:output value 2", response.getText());
}
}