/*
* Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com)
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: TestReloadDeclarations.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.engine;
import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.HttpNotFoundException;
import com.meterware.httpunit.WebConversation;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;
import com.uwyn.rife.TestCaseServerside;
import com.uwyn.rife.config.RifeConfig;
import com.uwyn.rife.resources.ResourceFinder;
import com.uwyn.rife.resources.ResourceFinderClasspath;
import com.uwyn.rife.tools.ExceptionUtils;
import com.uwyn.rife.tools.FileUtils;
import java.io.File;
import java.net.InetAddress;
import java.net.URL;
public class TestReloadDeclarations extends TestCaseServerside
{
public TestReloadDeclarations(int siteType, String name)
{
super(siteType, name);
}
public void testReloadElementDeclaration()
throws Exception
{
try
{
// setup the temporary directory
String site_dir = RifeConfig.Global.getTempPath()+File.separator+"reloadsite";
File site_dir_file = new File(site_dir);
site_dir_file.mkdirs();
String element_dir = RifeConfig.Global.getTempPath()+File.separator+"reloadelement";
File element_dir_file = new File(element_dir);
element_dir_file.mkdirs();
// setup the site xml file
ResourceFinder resource_finder = null;
URL resource = null;
File site_file = null;
File element_file = null;
resource_finder = ResourceFinderClasspath.getInstance();
// create the site xml file
site_file = new File(site_dir + File.separator + "site.xml");
site_file.delete();
element_file = new File(element_dir + File.separator + "simple.xml");
element_file.delete();
resource = resource_finder.getResource("site/reload_element_blueprint.xml");
FileUtils.copy(resource.openStream(), site_file);
// create the first element xml file
resource = resource_finder.getResource("element/engine/simple_plain.xml");
FileUtils.copy(resource.openStream(), element_file);
// test the site
setupSite("reloadsite/site.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/reloadtest");
// get the host name
String hostname = InetAddress.getByName("127.0.0.1").getHostName();
// get the content of the first element
response = conversation.getResponse(request);
assertEquals("text/plain", response.getContentType());
assertEquals("Just some text 127.0.0.1:"+hostname+":.SIMPLE:", response.getText());
RifeConfig.Global.setAutoReloadDelay(3000);
// wait a second
Thread.sleep(1000);
// overwrite the element file with new content
resource = resource_finder.getResource("element/engine/simple_html.xml");
FileUtils.copy(resource.openStream(), element_file);
// wait a second
Thread.sleep(1000);
// get the content of the first element
response = conversation.getResponse(request);
assertEquals("text/plain", response.getContentType());
assertEquals("Just some text 127.0.0.1:"+hostname+":.SIMPLE:", response.getText());
// wait two seconds
Thread.sleep(2000);
// get the content of the new element
response = conversation.getResponse(request);
assertEquals("text/html", response.getContentType());
assertEquals("Just some text 127.0.0.1:"+hostname+":.SIMPLE:", response.getText());
// clean up the copied files
element_file.delete();
site_file.delete();
}
catch (Throwable e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
return;
}
finally
{
RifeConfig.Global.setAutoReloadDelay(0);
}
}
public void testReloadSiteDeclaration()
throws Exception
{
try
{
// setup the temporary directory
String site_dir = RifeConfig.Global.getTempPath()+File.separator+"reloadsite";
File site_dir_file = new File(site_dir);
site_dir_file.mkdirs();
String element_dir = RifeConfig.Global.getTempPath()+File.separator+"reloadelement";
File element_dir_file = new File(element_dir);
element_dir_file.mkdirs();
// setup the site xml file
ResourceFinder resource_finder = null;
URL resource = null;
File site_file = null;
File element_file = null;
resource_finder = ResourceFinderClasspath.getInstance();
site_file = new File(site_dir + File.separator + "site.xml");
site_file.delete();
element_file = new File(element_dir + File.separator + "simple.xml");
element_file.delete();
// create the site xml file
resource = resource_finder.getResource("site/reload_element_blueprint.xml");
FileUtils.copy(resource.openStream(), site_file);
// create the first element xml file
resource = resource_finder.getResource("element/engine/simple_html.xml");
FileUtils.copy(resource.openStream(), element_file);
// test the site
setupSite("reloadsite/site.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
// Get the host name
String hostname = InetAddress.getByName("127.0.0.1").getHostName();
request = new GetMethodWebRequest("http://localhost:8181/reloadtest");
// get the content of the first element
response = conversation.getResponse(request);
assertEquals("Just some text 127.0.0.1:"+hostname+":.SIMPLE:", response.getText());
RifeConfig.Global.setAutoReloadDelay(2000);
// wait a second
Thread.sleep(1000);
// overwrite the element file with new content
resource = resource_finder.getResource("site/reload_site_blueprint.xml");
FileUtils.copy(resource.openStream(), site_file);
// get the content of the first element
response = conversation.getResponse(request);
assertEquals("Just some text 127.0.0.1:"+hostname+":.SIMPLE:", response.getText());
// wait two seconds and a half
Thread.sleep(2500);
// get the content of the new element
try
{
response = conversation.getResponse(request);
fail();
}
catch (HttpNotFoundException e)
{
assertTrue(true);
}
request = new GetMethodWebRequest("http://localhost:8181/newurl");
response = conversation.getResponse(request);
assertEquals("Just some text 127.0.0.1:"+hostname+":.SIMPLE:", response.getText());
// clean up the copied files
element_file.delete();
site_file.delete();
}
catch (Throwable e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
return;
}
finally
{
RifeConfig.Global.setAutoReloadDelay(0);
}
}
public void testReloadSubsiteDeclaration()
throws Exception
{
try
{
// setup the temporary directory
String site_dir = RifeConfig.Global.getTempPath()+File.separator+"reloadsite";
File site_dir_file = new File(site_dir);
site_dir_file.mkdirs();
String element_dir = RifeConfig.Global.getTempPath()+File.separator+"reloadelement";
File element_dir_file = new File(element_dir);
element_dir_file.mkdirs();
// setup the site xml file
ResourceFinder resource_finder = null;
URL resource = null;
File site_file = null;
File subsite_file = null;
File element_file = null;
resource_finder = ResourceFinderClasspath.getInstance();
site_file = new File(site_dir + File.separator + "site.xml");
site_file.delete();
subsite_file = new File(site_dir + File.separator + "subsite.xml");
subsite_file.delete();
element_file = new File(element_dir + File.separator + "simple.xml");
element_file.delete();
// create the site xml file
resource = resource_finder.getResource("site/reload_subsite_blueprint.xml");
FileUtils.copy(resource.openStream(), site_file);
// create the site xml file
resource = resource_finder.getResource("site/reload_element_blueprint.xml");
FileUtils.copy(resource.openStream(), subsite_file);
// create the first element xml file
resource = resource_finder.getResource("element/engine/simple_html.xml");
FileUtils.copy(resource.openStream(), element_file);
// test the site
setupSite("reloadsite/site.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
// Get the host name
String hostname = InetAddress.getByName("127.0.0.1").getHostName();
request = new GetMethodWebRequest("http://localhost:8181/subsite/reloadtest");
// get the content of the first element
response = conversation.getResponse(request);
assertEquals("Just some text 127.0.0.1:"+hostname+":.SUBSITE.SIMPLE:", response.getText());
RifeConfig.Global.setAutoReloadDelay(2000);
// wait a second
Thread.sleep(1000);
// overwrite the element file with new content
resource = resource_finder.getResource("site/reload_site_blueprint.xml");
FileUtils.copy(resource.openStream(), subsite_file);
// get the content of the first element
response = conversation.getResponse(request);
assertEquals("Just some text 127.0.0.1:"+hostname+":.SUBSITE.SIMPLE:", response.getText());
// wait two seconds and a half
Thread.sleep(2500);
// get the content of the new element
try
{
response = conversation.getResponse(request);
fail();
}
catch (HttpNotFoundException e)
{
assertTrue(true);
}
request = new GetMethodWebRequest("http://localhost:8181/subsite/newurl");
response = conversation.getResponse(request);
assertEquals("Just some text 127.0.0.1:"+hostname+":.SUBSITE.SIMPLE:", response.getText());
// clean up the copied files
element_file.delete();
subsite_file.delete();
site_file.delete();
}
catch (Throwable e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
return;
}
finally
{
RifeConfig.Global.setAutoReloadDelay(0);
}
}
public void testMoveElementDeclaration()
throws Exception
{
try
{
// setup the temporary directory
String site_dir = RifeConfig.Global.getTempPath()+File.separator+"movesite";
File site_dir_file = new File(site_dir);
site_dir_file.mkdirs();
String element_dir = RifeConfig.Global.getTempPath()+File.separator+"moveelement";
File element_dir_file = new File(element_dir);
element_dir_file.mkdirs();
// setup the site xml file
ResourceFinder resource_finder = null;
URL resource = null;
File site_file = null;
File element_file = null;
resource_finder = ResourceFinderClasspath.getInstance();
site_file = new File(site_dir + File.separator + "site.xml");
site_file.delete();
element_file = new File(element_dir + File.separator + "simple1.xml");
element_file.delete();
// create the site xml file
resource = resource_finder.getResource("site/move_element_blueprint1.xml");
FileUtils.copy(resource.openStream(), site_file);
// create the first element xml file
resource = resource_finder.getResource("element/engine/simple_plain.xml");
FileUtils.copy(resource.openStream(), element_file);
// test the site
setupSite("movesite/site.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/movetest");
// Get the host name
String hostname = InetAddress.getByName("127.0.0.1").getHostName();
// get the content of the first element
response = conversation.getResponse(request);
assertEquals("text/plain", response.getContentType());
assertEquals("Just some text 127.0.0.1:"+hostname+":.SIMPLE:", response.getText());
RifeConfig.Global.setAutoReloadDelay(2000);
// wait a second
Thread.sleep(1000);
// overwrite the site declaration file with new content to reference the new name of the element
resource = resource_finder.getResource("site/move_element_blueprint2.xml");
FileUtils.copy(resource.openStream(), site_file);
// move the element
File new_element_file = new File(element_dir + File.separator + "simple2.xml");
new_element_file.delete();
element_file.renameTo(new_element_file);
// get the content of the first element
response = conversation.getResponse(request);
assertEquals("text/plain", response.getContentType());
assertEquals("Just some text 127.0.0.1:"+hostname+":.SIMPLE:", response.getText());
// wait two seconds and a half
Thread.sleep(2500);
// get the content of the moved element
response = conversation.getResponse(request);
assertEquals("text/plain", response.getContentType());
assertEquals("Just some text 127.0.0.1:"+hostname+":.SIMPLE:", response.getText());
// clean up the copied files
element_file.delete();
site_file.delete();
}
catch (Throwable e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
return;
}
finally
{
RifeConfig.Global.setAutoReloadDelay(0);
}
}
public void testMoveSubsiteDeclaration()
throws Exception
{
try
{
// setup the temporary directory
String site_dir = RifeConfig.Global.getTempPath()+File.separator+"movesite";
File site_dir_file = new File(site_dir);
site_dir_file.mkdirs();
String element_dir = RifeConfig.Global.getTempPath()+File.separator+"moveelement";
File element_dir_file = new File(element_dir);
element_dir_file.mkdirs();
// setup the site xml file
ResourceFinder resource_finder = null;
URL resource = null;
File site_file = null;
File subsite_file = null;
File element_file = null;
resource_finder = ResourceFinderClasspath.getInstance();
site_file = new File(site_dir + File.separator + "site.xml");
site_file.delete();
subsite_file = new File(site_dir + File.separator + "subsite1.xml");
subsite_file.delete();
element_file = new File(element_dir + File.separator + "simple1.xml");
element_file.delete();
// create the site xml file
resource = resource_finder.getResource("site/move_subsite_blueprint1.xml");
FileUtils.copy(resource.openStream(), site_file);
// create the site xml file
resource = resource_finder.getResource("site/move_element_blueprint1.xml");
FileUtils.copy(resource.openStream(), subsite_file);
// create the first element xml file
resource = resource_finder.getResource("element/engine/simple_html.xml");
FileUtils.copy(resource.openStream(), element_file);
// test the site
setupSite("movesite/site.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
// Get the host name
String hostname = InetAddress.getByName("127.0.0.1").getHostName();
request = new GetMethodWebRequest("http://localhost:8181/subsite/movetest");
// get the content of the first element
response = conversation.getResponse(request);
assertEquals("text/html", response.getContentType());
assertEquals("Just some text 127.0.0.1:"+hostname+":.SUBSITE.SIMPLE:", response.getText());
RifeConfig.Global.setAutoReloadDelay(2000);
// wait a second
Thread.sleep(1000);
// overwrite the site declaration file with new content to reference the new name of the subsite
resource = resource_finder.getResource("site/move_subsite_blueprint2.xml");
FileUtils.copy(resource.openStream(), subsite_file);
// move the subsite
File new_subsite_file = new File(site_dir + File.separator + "subsite2.xml");
new_subsite_file.delete();
subsite_file.renameTo(new_subsite_file);
// get the content of the first element
response = conversation.getResponse(request);
assertEquals("text/html", response.getContentType());
assertEquals("Just some text 127.0.0.1:"+hostname+":.SUBSITE.SIMPLE:", response.getText());
// wait two seconds and a half
Thread.sleep(2500);
// get the content of the moved subsite
response = conversation.getResponse(request);
assertEquals("text/html", response.getContentType());
assertEquals("Just some text 127.0.0.1:"+hostname+":.SUBSITE.SIMPLE:", response.getText());
// clean up the copied files
element_file.delete();
subsite_file.delete();
site_file.delete();
}
catch (Throwable e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
return;
}
finally
{
RifeConfig.Global.setAutoReloadDelay(0);
}
}
}