From b5f7fbd71183eb792158abb87368b2580faafd56 Mon Sep 17 00:00:00 2001 From: Christian Beikov Date: Mon, 25 Aug 2014 23:48:44 +0200 Subject: [PATCH 1/2] Test for outbound JSF resource rewriting Signed-off-by: Christian Beikov --- integration-faces-tests/pom.xml | 5 ++ .../faces/outbound/OutboundResourceTest.java | 73 +++++++++++++++++++ .../OutboundResourceTestProvider.java | 53 ++++++++++++++ .../test/resources/outbound-resource.xhtml | 11 +++ 4 files changed, 142 insertions(+) create mode 100644 integration-faces-tests/src/test/java/org/ocpsoft/rewrite/faces/outbound/OutboundResourceTest.java create mode 100644 integration-faces-tests/src/test/java/org/ocpsoft/rewrite/faces/outbound/OutboundResourceTestProvider.java create mode 100644 integration-faces-tests/src/test/resources/outbound-resource.xhtml diff --git a/integration-faces-tests/pom.xml b/integration-faces-tests/pom.xml index fc735c6c8..416da054b 100644 --- a/integration-faces-tests/pom.xml +++ b/integration-faces-tests/pom.xml @@ -51,6 +51,11 @@ rewrite-config-annotations test + + org.ocpsoft.rewrite + rewrite-config-servlet + test + javax.enterprise cdi-api diff --git a/integration-faces-tests/src/test/java/org/ocpsoft/rewrite/faces/outbound/OutboundResourceTest.java b/integration-faces-tests/src/test/java/org/ocpsoft/rewrite/faces/outbound/OutboundResourceTest.java new file mode 100644 index 000000000..8832fdda7 --- /dev/null +++ b/integration-faces-tests/src/test/java/org/ocpsoft/rewrite/faces/outbound/OutboundResourceTest.java @@ -0,0 +1,73 @@ +/* + * Copyright 2011 Lincoln Baxter, III + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.ocpsoft.rewrite.faces.outbound; + +import static org.junit.Assert.assertEquals; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.ocpsoft.rewrite.category.IgnoreForGlassfish4; +import org.ocpsoft.rewrite.faces.annotation.RewriteFacesAnnotationsTest; +import org.ocpsoft.rewrite.test.RewriteTest; +import org.ocpsoft.rewrite.test.RewriteTestBase; + +import com.gargoylesoftware.htmlunit.html.DomElement; +import com.gargoylesoftware.htmlunit.html.DomNodeList; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import org.ocpsoft.rewrite.config.ConfigurationProvider; + +/** + * This test doesn't work on Glassfish 4.0 at all. For some reason Glassfish _always_ appends the JSESSIONID, even if + * the href just contains JavaScript. This leads to links like this: + * + *
+ * href = "javascript:void(0);jsessionid=fde6b122b14c03b5ad7dcf4c51b5"
+ * 
+ * + * This can be reproduced even in a simple sample application without Rewrite. + */ +@RunWith(Arquillian.class) +@Category(IgnoreForGlassfish4.class) +public class OutboundResourceTest extends RewriteTestBase +{ + + @Deployment(testable = false) + public static WebArchive getDeployment() + { + return RewriteTest.getDeployment() + .addAsLibrary(RewriteFacesAnnotationsTest.getRewriteFacesArchive()) + .addPackages(true, "org.ocpsoft.rewrite.servlet") + .addClass(OutboundResourceTestProvider.class) + .addAsWebInfResource("faces-config.xml") + .addAsWebResource("outbound-resource.css", "resources/test/css/style.css") + .addAsWebResource("outbound-resource.xhtml", "outbound.xhtml") + .addAsServiceProvider(ConfigurationProvider.class, OutboundResourceTestProvider.class); + } + + @Test + public void testResourceUrlRewritten() throws Exception + { + HtmlPage page = getWebClient("/outbound").getPage(); + DomNodeList stylesheets = page.getElementsByTagName("link"); + assertEquals(1, stylesheets.size()); + assertEquals("/css/style.css", stylesheets.get(0).getAttribute("href")); + } + +} diff --git a/integration-faces-tests/src/test/java/org/ocpsoft/rewrite/faces/outbound/OutboundResourceTestProvider.java b/integration-faces-tests/src/test/java/org/ocpsoft/rewrite/faces/outbound/OutboundResourceTestProvider.java new file mode 100644 index 000000000..76f552a0e --- /dev/null +++ b/integration-faces-tests/src/test/java/org/ocpsoft/rewrite/faces/outbound/OutboundResourceTestProvider.java @@ -0,0 +1,53 @@ +/* + * Copyright 2011 Lincoln Baxter, III + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.ocpsoft.rewrite.faces.outbound; + +import javax.servlet.ServletContext; + +import org.ocpsoft.rewrite.config.Configuration; +import org.ocpsoft.rewrite.config.ConfigurationBuilder; +import org.ocpsoft.rewrite.config.Direction; +import org.ocpsoft.rewrite.servlet.config.DispatchType; +import org.ocpsoft.rewrite.servlet.config.HttpConfigurationProvider; +import org.ocpsoft.rewrite.servlet.config.SendStatus; +import org.ocpsoft.rewrite.servlet.config.rule.Join; + +/** + * @author Lincoln Baxter, III + * + */ +public class OutboundResourceTestProvider extends HttpConfigurationProvider +{ + @Override + public int priority() + { + /* + * Priority of overall configuration is lower than default. + */ + return 10; + } + + @Override + public Configuration getConfiguration(final ServletContext context) + { + return ConfigurationBuilder.begin() + .addRule(Join.path("/outbound").to("/faces/outbound.xhtml")) + .addRule(Join.path("/css/{file}").to("/faces/javax.faces.resource/css/{file}?ln=test")) + .addRule() + .when(Direction.isInbound().and(DispatchType.isRequest())) + .perform(SendStatus.error(403)); + } +} diff --git a/integration-faces-tests/src/test/resources/outbound-resource.xhtml b/integration-faces-tests/src/test/resources/outbound-resource.xhtml new file mode 100644 index 000000000..4d409ece9 --- /dev/null +++ b/integration-faces-tests/src/test/resources/outbound-resource.xhtml @@ -0,0 +1,11 @@ + + + + + + + + From 9bff4d37519a87127983705eb2c1b2b49df4ff05 Mon Sep 17 00:00:00 2001 From: Christian Beikov Date: Mon, 25 Aug 2014 23:49:28 +0200 Subject: [PATCH 2/2] Forgot resource file Signed-off-by: Christian Beikov --- integration-faces-tests/src/test/resources/outbound-resource.css | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 integration-faces-tests/src/test/resources/outbound-resource.css diff --git a/integration-faces-tests/src/test/resources/outbound-resource.css b/integration-faces-tests/src/test/resources/outbound-resource.css new file mode 100644 index 000000000..e69de29bb