You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by re...@apache.org on 2008/11/30 15:05:45 UTC
svn commit: r721814 - in /cocoon/cocoon3/trunk:
cocoon-sample-webapp/src/test/java/org/apache/cocoon/it/ cocoon-sample/
cocoon-sample/src/main/resources/COB-INF/
Author: reinhard
Date: Sun Nov 30 06:05:44 2008
New Revision: 721814
URL: http://svn.apache.org/viewvc?rev=721814&view=rev
Log:
. add integration tests for caching
. tidy up samples page
Modified:
cocoon/cocoon3/trunk/cocoon-sample-webapp/src/test/java/org/apache/cocoon/it/CachingOfPipelinesTest.java
cocoon/cocoon3/trunk/cocoon-sample-webapp/src/test/java/org/apache/cocoon/it/ReaderTest.java
cocoon/cocoon3/trunk/cocoon-sample/pom.xml
cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/overview.html
Modified: cocoon/cocoon3/trunk/cocoon-sample-webapp/src/test/java/org/apache/cocoon/it/CachingOfPipelinesTest.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sample-webapp/src/test/java/org/apache/cocoon/it/CachingOfPipelinesTest.java?rev=721814&r1=721813&r2=721814&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sample-webapp/src/test/java/org/apache/cocoon/it/CachingOfPipelinesTest.java (original)
+++ cocoon/cocoon3/trunk/cocoon-sample-webapp/src/test/java/org/apache/cocoon/it/CachingOfPipelinesTest.java Sun Nov 30 06:05:44 2008
@@ -16,8 +16,12 @@
*/
package org.apache.cocoon.it;
+import org.apache.cocoon.sample.generation.CachingTimestampGenerator;
+import org.apache.cocoon.sample.generation.TimestampGenerator;
+
/**
- * Test pipeline caching
+ * Test pipeline caching. The tests use the {@link TimestampGenerator} which always takes more 0.5 seconds to produce a
+ * result.
*/
public class CachingOfPipelinesTest extends CocoonHtmlUnitTestCase {
@@ -28,6 +32,7 @@
this.loadResponse("caching-pipeline/off");
String content1 = this.response.getContentAsString();
assertNotNull(content1);
+
this.loadResponse("caching-pipeline/off");
String content2 = this.response.getContentAsString();
assertNotNull(content2);
@@ -35,16 +40,62 @@
}
/**
- * This caching pipeline always returns the same.
+ * This caching pipeline uses the {@link CachingTimestampGenerator} that produces results valid for 1.5 seconds.
+ * This means that the second request has to return the same result but the third a different one because the cache
+ * key produced by the first result has become invalid in the meantime.
*/
public void testCachingPipeline() throws Exception {
this.loadResponse("caching-pipeline/on");
String content1 = this.response.getContentAsString();
- assertNotNull(content1);
+
this.loadResponse("caching-pipeline/on");
String content2 = this.response.getContentAsString();
- assertNotNull(content2);
assertTrue("The response has to be always the same.", content1.equals(content2));
+
+ Thread.sleep(1000);
+ this.loadResponse("caching-pipeline/on");
+ String content3 = this.response.getContentAsString();
+ assertFalse("The response has to change because the caching period has expired.", content3.equals(content2));
+ }
+
+ /**
+ * This caching pipeline returns the same result for 2 seconds (see the 'expires' parameter in the sitemap). After
+ * 2.1 it produces a different result because the first result generated has become invalid in the meantime and the
+ * refresh is being performed in the same thread.
+ *
+ * @see {@link #testExpiresAsyncCaching()}
+ */
+ public void testExpiresCachingPipeline() throws Exception {
+ Thread.sleep(2000);
+ this.loadResponse("/expires/caching-pipeline/on");
+ String content1 = this.response.getContentAsString();
+
+ Thread.sleep(2100);
+ this.loadResponse("/expires/caching-pipeline/on");
+ String content2 = this.response.getContentAsString();
+ assertFalse("The response has to be the same as before.", content1.equals(content2));
}
+ /**
+ * This async-caching pipeline returns the same result for 2 seconds (see the 'expires' parameter in the sitemap).
+ * After 2.1 seconds it still produces the same result but because the cache key of this pipeline has changed, a
+ * separate thread is started that refreshs the cache.
+ *
+ * After waiting for another second, a fresh result is returned.
+ */
+ public void testExpiresAsyncCaching() throws Exception {
+ this.loadResponse("/expires/async-caching-pipeline/on");
+ String content1 = this.response.getContentAsString();
+
+ Thread.sleep(2100);
+ this.loadResponse("/expires/async-caching-pipeline/on");
+ String content2 = this.response.getContentAsString();
+ assertEquals("The response has to be the same as before.", content1, content2);
+
+ Thread.sleep(500);
+ this.loadResponse("/expires/async-caching-pipeline/on");
+ String content3 = this.response.getContentAsString();
+ assertFalse("The response mustn't be the same as before.", content3.equals(content2));
+
+ }
}
Modified: cocoon/cocoon3/trunk/cocoon-sample-webapp/src/test/java/org/apache/cocoon/it/ReaderTest.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sample-webapp/src/test/java/org/apache/cocoon/it/ReaderTest.java?rev=721814&r1=721813&r2=721814&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sample-webapp/src/test/java/org/apache/cocoon/it/ReaderTest.java (original)
+++ cocoon/cocoon3/trunk/cocoon-sample-webapp/src/test/java/org/apache/cocoon/it/ReaderTest.java Sun Nov 30 06:05:44 2008
@@ -40,7 +40,7 @@
}
/**
- * Call a pipeline that uses an unkown file extentions.
+ * Call a pipeline that uses an unknown file extensions.
*/
public void testReadingResourceWithUnknownMimeType() throws Exception {
this.loadResponse("read/javascript-resource-implicit.abc");
@@ -55,7 +55,8 @@
this.loadResponse("read/javascript-resource-implicit.js");
String lastModified = this.response.getResponseHeaderValue("Last-Modified");
assertNotNull("Last-Modified has to be set at this point!", lastModified);
- assertFalse("Last-Modified hast to be set at this point!", "".equals(lastModified));
+ assertFalse("Last-Modified has to be set at this point!", "".equals(lastModified));
+
this.webClient.addRequestHeader("If-Modified-Since", lastModified);
this.loadResponse("read/javascript-resource-implicit.js");
assertEquals(304, this.response.getStatusCode());
Modified: cocoon/cocoon3/trunk/cocoon-sample/pom.xml
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sample/pom.xml?rev=721814&r1=721813&r2=721814&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sample/pom.xml (original)
+++ cocoon/cocoon3/trunk/cocoon-sample/pom.xml Sun Nov 30 06:05:44 2008
@@ -80,9 +80,9 @@
<plugins>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
- <configuration>
+ <!-- configuration>
<useProjectReferences>false</useProjectReferences>
- </configuration>
+ </configuration-->
</plugin>
<plugin>
<groupId>org.apache.cocoon</groupId>
Modified: cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/overview.html
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/overview.html?rev=721814&r1=721813&r2=721814&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/overview.html (original)
+++ cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/overview.html Sun Nov 30 06:05:44 2008
@@ -37,17 +37,24 @@
</ul>
<h2>Caching</h2>
<ul>
- <li><a href="caching-pipeline/on">Caching pipeline</a>: The result of the pipeline is cached forever.</li>
<li><a href="caching-pipeline/off">Non-Caching pipeline</a>: The pipeline doesn't cache (although it's components support it)</li>
- <li><a href="async-caching-pipeline/on">Async-Caching pipeline</a>: </li>
- <li><a href="expires-caching-pipeline/on">Expires-Caching pipeline</a>: The pipeline returns a cached result for defined period.</li>
+ <li><a href="caching-pipeline/on">Caching pipeline</a>: The result of the pipeline is cached for 1.5 seconds. The next request that occurs
+ after the cached response has expires, triggers a reexecution of the pipeline in the same thread.</li>
+ <li><a href="async-caching-pipeline/on">Async-Caching pipeline</a>: The result of the pipeline is cached for 1.5 seconds. The next request that occurs
+ after the cached response has expires, triggers a reexecution of the pipeline in a separate thread.</li>
+ <li><a href="/expires/caching-pipeline/on">Expires-Caching pipeline</a>: The pipeline returns a cached result for defined period,
+ independently from whether components used in the pipeline support caching or not. The pipeline result is cached for 2 seconds. The
+ recreation of the pipeline result is done in the same thread as the servlet request.</li>
+ <li><a href="/expires/async-caching-pipeline/on">Expires-Async-Caching pipeline</a>: The pipeline returns a cached result for defined period,
+ independently from whether components used in the pipeline support caching or not. The pipeline result is cached for 2 seconds. The recreation of the
+ pipeline result is done in a separate thread than the servlet request.</li>
</ul>
<h2>Error handling</h2>
<ul>
<li><a href="123456789123456789">ResourceNotFound</a>: The error handler catches all exceptions, in this case no matcher matches.</li>
<li><a href="error-handling/custom-error">Custom error - Sitemap</a>: Catch a custom error in the sitemap.</li>
<li><a href="error-handling/custom-error-per-pipeline-error-handling">
- Custom error - Pipeline</a>: Catch a custom error using a per-pipeline error handler. <b>*** doesn't work ***</b></li>
+ Custom error - Pipeline</a>: Catch a custom error using a per-pipeline error handler.</li>
</ul>
<h2>Servlet-Service-Components and servlet: protocol</h2>
<ul>
@@ -58,7 +65,6 @@
<h2>Expression language</h2>
<ul>
<li><a href="expression-language/jexl?fileName=simple">request attribute (jexl)</a>: Accessing a request attribute using Jexl.</li>
- <li><a href="expression-language/jxpath?fileName=simple">request attribute (jxpath)</a>: Accessing a request attribute using JXPath.</li>
<li><a href="expression-language/map-numbers/simple">sitemap parameter</a>: Accessing a sitemap parameter.</li>
<li><a href="expression-language/map-named-parameters/simple">sitemap parameter</a>: Accessing a sitemap parameter using named parameters in the pattern.</li>
<li><a href="expression-language/nested/simple">nested matchers</a>: Accessing a parameter from one level above.</li>
@@ -66,7 +72,7 @@
<h2>Redirects</h2>
<ul>
<li><a href="redirect/www.orf.at">Temporary (302)</a>: Temporary redirect to orf.at.</li>
- <li><a href="redirect/sax-pipeline/simple-xml">servlet:</a>: Redirect to a servlet: URL.</li>
+ <li><a href="redirect/sax-pipeline/simple-xml">servlet</a>: Redirect to a servlet: URL.</li>
</ul>
<h2>Object Model</h2>
<ul>
@@ -91,11 +97,6 @@
<ul>
<li><a href="xslt/main">XSLT Transformation</a>: An XSLT transformation that includes stylesheets via file and servlet protocol.</li>
</ul>
- <h2>Parameter passing</h2>
- <ul>
- <li><a href="parameter-passing/working">Matching Matcher</a>: Passing a named parameter from a matcher to the sitemap.</li>
- <li><a href="parameter-passing/failing">Not-Matching Matcher</a>: Passing null from a matcher to the sitemap.</li>
- </ul>
<h2>Controller</h2>
<ul>
<li><a href="controller/abc/foo?reqparam=1">Invoke a controller</a>: Invoke a controller and pass two parameters</li>