aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/netx/unit/net/sourceforge/jnlp/cache/ResourceUrlCreatorTest.java51
-rw-r--r--tests/netx/unit/sun/applet/PluginAppletViewerTest.java42
-rw-r--r--tests/reproducers/simple/AbsolutePathsAndQueryStrings/resources/AbsolutePathsAndQueryStrings.html48
-rw-r--r--tests/reproducers/simple/AbsolutePathsAndQueryStrings/resources/AbsolutePathsAndQueryStrings.jnlp53
-rw-r--r--tests/reproducers/simple/AbsolutePathsAndQueryStrings/testcases/AbsolutePathsAndQueryStrings.java116
5 files changed, 308 insertions, 2 deletions
diff --git a/tests/netx/unit/net/sourceforge/jnlp/cache/ResourceUrlCreatorTest.java b/tests/netx/unit/net/sourceforge/jnlp/cache/ResourceUrlCreatorTest.java
index 208180d..5c5b6b1 100644
--- a/tests/netx/unit/net/sourceforge/jnlp/cache/ResourceUrlCreatorTest.java
+++ b/tests/netx/unit/net/sourceforge/jnlp/cache/ResourceUrlCreatorTest.java
@@ -5,6 +5,7 @@ import static org.junit.Assert.assertEquals;
import java.net.MalformedURLException;
import java.net.URL;
+import net.sourceforge.jnlp.DownloadOptions;
import net.sourceforge.jnlp.Version;
import org.junit.Test;
@@ -37,7 +38,55 @@ public class ResourceUrlCreatorTest {
@Test
public void testVersionAndPackEncode() throws MalformedURLException {
Resource resource = Resource.getResource(new URL("http://test.jar"), new Version("1.1"), null);
- URL result = ResourceUrlCreator.getUrl(resource, true /*use pack suffix*/, true/*use version suffix*/);
+ URL result = ResourceUrlCreator.getUrl(resource, true /*use pack suffix*/, true /*use version suffix*/);
assertEquals("http://test__V1.1.jar.pack.gz", result.toString());
}
+
+ @Test
+ public void testGetVersionedUrl() throws MalformedURLException {
+ Resource resource = Resource.getResource(new URL("http://foo.com/bar.jar"), new Version("1.1"), null);
+ ResourceUrlCreator ruc = new ResourceUrlCreator(resource, new DownloadOptions(false, true));
+ URL result = ruc.getVersionedUrl(resource);
+ assertEquals("http://foo.com/bar.jar?version-id=1.1", result.toString());
+ }
+
+ @Test
+ public void testGetNonVersionIdUrl() throws MalformedURLException {
+ Resource resource = Resource.getResource(new URL("http://foo.com/some.jar"), new Version("version two"), null);
+ ResourceUrlCreator ruc = new ResourceUrlCreator(resource, new DownloadOptions(false, true));
+ URL result = ruc.getVersionedUrl(resource);
+ assertEquals("http://foo.com/some.jar", result.toString());
+ }
+
+ @Test
+ public void testGetVersionedUrlWithQuery() throws MalformedURLException {
+ Resource resource = Resource.getResource(new URL("http://bar.com/bar.jar?i=1234abcd"), new Version("1.1"), null);
+ ResourceUrlCreator ruc = new ResourceUrlCreator(resource, new DownloadOptions(false, true));
+ URL result = ruc.getVersionedUrl(resource);
+ assertEquals("http://bar.com/bar.jar?i=1234abcd&version-id=1.1", result.toString());
+ }
+
+ @Test
+ public void testGetVersionedUrlWithoutVersion() throws MalformedURLException {
+ Resource resource = Resource.getResource(new URL("http://baz.com/bar.jar"), null, null);
+ ResourceUrlCreator ruc = new ResourceUrlCreator(resource, new DownloadOptions(false, false));
+ URL result = ruc.getVersionedUrl(resource);
+ assertEquals("http://baz.com/bar.jar", result.toString());
+ }
+
+ @Test
+ public void testGetVersionedUrlWithoutVersionWithQuery() throws MalformedURLException {
+ Resource resource = Resource.getResource(new URL("http://rhat.com/bar.jar?i=1234abcd"), null, null);
+ ResourceUrlCreator ruc = new ResourceUrlCreator(resource, new DownloadOptions(false, false));
+ URL result = ruc.getVersionedUrl(resource);
+ assertEquals("http://rhat.com/bar.jar?i=1234abcd", result.toString());
+ }
+
+ @Test
+ public void testGetVersionedUrlWithLongQuery() throws MalformedURLException {
+ Resource resource = Resource.getResource(new URL("http://yyz.com/bar.jar?i=1234&j=abcd"), new Version("2.0"), null);
+ ResourceUrlCreator ruc = new ResourceUrlCreator(resource, new DownloadOptions(false, true));
+ URL result = ruc.getVersionedUrl(resource);
+ assertEquals("http://yyz.com/bar.jar?i=1234&j=abcd&version-id=2.0", result.toString());
+ }
}
diff --git a/tests/netx/unit/sun/applet/PluginAppletViewerTest.java b/tests/netx/unit/sun/applet/PluginAppletViewerTest.java
index cecedfc..69e5cb1 100644
--- a/tests/netx/unit/sun/applet/PluginAppletViewerTest.java
+++ b/tests/netx/unit/sun/applet/PluginAppletViewerTest.java
@@ -42,8 +42,11 @@ import static org.junit.Assert.assertEquals;
import static sun.applet.PluginPipeMockUtil.getPluginStoreId;
import static sun.applet.PluginPipeMockUtil.getPluginStoreObject;
+import java.net.URI;
import java.util.concurrent.Callable;
+import junit.framework.Assert;
+
import net.sourceforge.jnlp.AsyncCall;
import net.sourceforge.jnlp.ServerAccess;
@@ -156,6 +159,43 @@ public class PluginAppletViewerTest {
assertEquals(expectedReturn, call.join());
}
+ @Test
+ public void testConvertUriSchemeForProxyQuery() throws Exception {
+ URI[] testUris = {
+ new URI("http", "foo.com", "/bar", null),
+ new URI("https", "foo.com", "/bar", null),
+ new URI("ftp", "foo.com", "/app/res/pub/channel.jar?i=1234", null),
+ new URI("socket", "foo.co.uk", "/bar/pub/ale.jar", null),
+ };
+
+ for (URI uri : testUris) {
+ URI result = new URI(PluginAppletViewer.convertUriSchemeForProxyQuery(uri));
+ assertQueryForBrowserProxyUsesHttpFallback(uri, result);
+ String hierarchicalPath = result.getAuthority() + result.getPath();
+ assertQueryForBrowserProxyContainsNoDoubleSlashes(hierarchicalPath);
+ assertQueryForBrowserProxyDoesNotChangeQuery(uri, result);
+ }
+ }
+
+ // Test that only HTTP is used as fallback scheme if a protocol other than HTTP(S) or FTP is specified
+ public void assertQueryForBrowserProxyUsesHttpFallback(URI expected, URI result) {
+ if (expected.getScheme().equals("ftp") || expected.getScheme().startsWith("http")) {
+ Assert.assertEquals(expected.getScheme(), result.getScheme());
+ } else {
+ Assert.assertEquals(result.getScheme(), "http");
+ }
+ }
+
+ // Test that absolute resource paths do not result in double-slashes within the URI
+ public void assertQueryForBrowserProxyContainsNoDoubleSlashes(String uri) {
+ Assert.assertFalse(uri.contains("//"));
+ }
+
+ // Test that the query string of the URI is not changed
+ public void assertQueryForBrowserProxyDoesNotChangeQuery(URI expected, URI result) {
+ Assert.assertEquals(expected.getQuery(), result.getQuery());
+ }
+
/**************************************************************************
* Test utilities *
**************************************************************************/
@@ -238,4 +278,4 @@ public class PluginAppletViewerTest {
int expectedLength = 6;
return parseAndCheckJSMessage(message, expectedLength, "ToString", contextObjectID);
}
-} \ No newline at end of file
+}
diff --git a/tests/reproducers/simple/AbsolutePathsAndQueryStrings/resources/AbsolutePathsAndQueryStrings.html b/tests/reproducers/simple/AbsolutePathsAndQueryStrings/resources/AbsolutePathsAndQueryStrings.html
new file mode 100644
index 0000000..f2fc6eb
--- /dev/null
+++ b/tests/reproducers/simple/AbsolutePathsAndQueryStrings/resources/AbsolutePathsAndQueryStrings.html
@@ -0,0 +1,48 @@
+<!--
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+IcedTea is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version.
+
+ -->
+<html>
+ <head></head>
+ <body>
+ <embed code="StripHttpPathParams"
+ archive="/StripHttpPathParams.jar?i=1234abcd"
+ type="application/x-java-applet;version=1.6"
+ width="800"
+ height="600">
+ </embed>
+ </body>
+</html>
diff --git a/tests/reproducers/simple/AbsolutePathsAndQueryStrings/resources/AbsolutePathsAndQueryStrings.jnlp b/tests/reproducers/simple/AbsolutePathsAndQueryStrings/resources/AbsolutePathsAndQueryStrings.jnlp
new file mode 100644
index 0000000..c499bc8
--- /dev/null
+++ b/tests/reproducers/simple/AbsolutePathsAndQueryStrings/resources/AbsolutePathsAndQueryStrings.jnlp
@@ -0,0 +1,53 @@
+<!--
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+IcedTea is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version.
+
+ -->
+<?xml version="1.0" encoding="utf-8"?>
+<jnlp spec="1.0" href="AbsolutePathsAndQueryStrings.jnlp" codebase=".">
+ <information>
+ <title>AbsolutePathsAndQueryStrings</title>
+ <vendor>IcedTea</vendor>
+ <homepage href="http://icedtea.classpath.org/wiki/IcedTea-Web#Testing_IcedTea-Web"/>
+ <description>Use relative codebase URLs to append to host names, and correctly parse query strings</description>
+ <offline/>
+ </information>
+ <resources>
+ <j2se version="1.4+"/>
+ <jar href="/StripHttpPathParams.jar?i=1234abcd"/>
+ </resources>
+ <application-desc main-class="StripHttpPathParams">
+ </application-desc>
+</jnlp>
diff --git a/tests/reproducers/simple/AbsolutePathsAndQueryStrings/testcases/AbsolutePathsAndQueryStrings.java b/tests/reproducers/simple/AbsolutePathsAndQueryStrings/testcases/AbsolutePathsAndQueryStrings.java
new file mode 100644
index 0000000..7f561e7
--- /dev/null
+++ b/tests/reproducers/simple/AbsolutePathsAndQueryStrings/testcases/AbsolutePathsAndQueryStrings.java
@@ -0,0 +1,116 @@
+/* AbsolutePathsAndQueryStrings.java
+Copyright (C) 2013 Red Hat, Inc.
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as published by
+the Free Software Foundation, version 2.
+
+IcedTea is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING. If not, write to
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version.
+ */
+
+import java.io.File;
+import java.net.URL;
+import net.sourceforge.jnlp.ProcessResult;
+import net.sourceforge.jnlp.ServerAccess.AutoClose;
+import net.sourceforge.jnlp.annotations.Bug;
+import net.sourceforge.jnlp.annotations.KnownToFail;
+import net.sourceforge.jnlp.annotations.NeedsDisplay;
+import net.sourceforge.jnlp.annotations.TestInBrowsers;
+import net.sourceforge.jnlp.browsertesting.BrowserTest;
+import net.sourceforge.jnlp.browsertesting.Browsers;
+import net.sourceforge.jnlp.closinglisteners.AutoOkClosingListener;
+import net.sourceforge.jnlp.ServerAccess;
+import net.sourceforge.jnlp.cache.CacheUtil;
+import net.sourceforge.jnlp.runtime.JNLPRuntime;
+import net.sourceforge.jnlp.config.DeploymentConfiguration;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.AfterClass;
+
+public class AbsolutePathsAndQueryStrings extends BrowserTest {
+
+ private static final String appletCloseString = AutoOkClosingListener.MAGICAL_OK_CLOSING_STRING;
+
+ @Bug(id="PR1204")
+ @NeedsDisplay
+ @Test
+ @TestInBrowsers(testIn={Browsers.one})
+ public void testAbsolutePathAndQueryStringBrowser() throws Exception {
+ /* HTML specifies absolute path and path params, ensure that this is able to launch correctly */
+ ProcessResult pr = server.executeBrowser("/AbsolutePathsAndQueryStrings.html", AutoClose.CLOSE_ON_BOTH);
+ Assert.assertTrue("stdout should contain " + appletCloseString + " but did not", pr.stdout.contains(appletCloseString));
+ }
+
+ @Bug(id="PR1204")
+ @NeedsDisplay
+ @Test
+ public void testAbsolutePathAndQueryStringWebstart() throws Exception {
+ /* JNLP specifies absolute path and path params, ensure that this is able to launch correctly */
+ ProcessResult pr = server.executeJavawsHeadless("/AbsolutePathsAndQueryStrings.jnlp");
+ Assert.assertTrue("stdout should contain \"running\"but did not", pr.stdout.contains("running"));
+ }
+
+ @Bug(id="PR1204")
+ @Test
+ public void testCaching() throws Exception {
+ /* Test that caching ignores path parameters and double-slash issue from absolute codebase paths
+ */
+ URL plainLocation = new URL("http://localhost:1234/StripHttpPathParams.jar");
+ URL paramLocation = new URL("http://localhost:1234/StripHttpPathParams.jar?i=abcd");
+ URL absoluteLocation = new URL("http://localhost:1234//StripHttpPathParams.jar");
+ URL absoluteParamLocation = new URL("http://localhost:1234//StripHttpPathParams.jar?i=abcd");
+
+ DeploymentConfiguration config = JNLPRuntime.getConfiguration();
+ config.load();
+ String cacheLocation = config.getProperty(DeploymentConfiguration.KEY_USER_CACHE_DIR) + File.separator;
+ File cacheDir = new File(cacheLocation);
+ Assert.assertTrue(cacheDir.isDirectory());
+
+ boolean hasCachedCopy = false;
+ for (File cache : cacheDir.listFiles()) {
+ File[] cacheFiles = new File[] {
+ CacheUtil.urlToPath(plainLocation, cache.getPath()),
+ CacheUtil.urlToPath(paramLocation, cache.getPath()),
+ CacheUtil.urlToPath(absoluteLocation, cache.getPath()),
+ CacheUtil.urlToPath(absoluteParamLocation, cache.getPath()),
+ };
+ for (File f : cacheFiles) {
+ if (f.isFile())
+ hasCachedCopy = true;
+ for (File g : cacheFiles) {
+ Assert.assertEquals(f.getPath(), g.getPath());
+ }
+ }
+ }
+ Assert.assertTrue(hasCachedCopy);
+ }
+
+}