/hg/icedtea-web: Unit tests for PR1166

smohammad at icedtea.classpath.org smohammad at icedtea.classpath.org
Tue Nov 13 07:55:42 PST 2012


changeset 19c14a4b76b4 in /hg/icedtea-web
details: http://icedtea.classpath.org/hg/icedtea-web?cmd=changeset;node=19c14a4b76b4
author: Saad Mohammad <smohammad at redhat.com>
date: Tue Nov 13 10:55:19 2012 -0500

	Unit tests for PR1166


diffstat:

 ChangeLog                                                  |   11 +
 tests/netx/unit/net/sourceforge/jnlp/JNLPFileTest.java     |   45 +++
 tests/netx/unit/net/sourceforge/jnlp/ParserTest.java       |   57 ++++
 tests/netx/unit/net/sourceforge/jnlp/PluginBridgeTest.java |  185 ++++++++++++-
 4 files changed, 297 insertions(+), 1 deletions(-)

diffs (354 lines):

diff -r 755aa6b30bb7 -r 19c14a4b76b4 ChangeLog
--- a/ChangeLog	Tue Nov 13 10:50:01 2012 -0500
+++ b/ChangeLog	Tue Nov 13 10:55:19 2012 -0500
@@ -1,3 +1,14 @@
+2012-11-13  Saad Mohammad  <smohammad at redhat.com>
+
+	Added unit tests for PR1166.
+	* tests/netx/unit/net/sourceforge/jnlp/JNLPFileTest.java:
+	Tests the JNLPFile constructor that accepts an InputStream and an alternative codebase.
+	* tests/netx/unit/net/sourceforge/jnlp/ParserTest.java:
+	Tests if the constructor handles the alternative codebase parameter correctly.
+	* tests/netx/unit/net/sourceforge/jnlp/PluginBridgeTest.java:
+	Tests if BASE64 strings are decoded correctly and if PluginBridge is constructed with an
+	embedded jnlp.
+
 2012-11-13  Saad Mohammad  <smohammad at redhat.com>
 
 	Added reproducer for PR1166.
diff -r 755aa6b30bb7 -r 19c14a4b76b4 tests/netx/unit/net/sourceforge/jnlp/JNLPFileTest.java
--- a/tests/netx/unit/net/sourceforge/jnlp/JNLPFileTest.java	Tue Nov 13 10:50:01 2012 -0500
+++ b/tests/netx/unit/net/sourceforge/jnlp/JNLPFileTest.java	Tue Nov 13 10:55:19 2012 -0500
@@ -37,6 +37,10 @@
 
 package net.sourceforge.jnlp;
 
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.Locale;
 
 import net.sourceforge.jnlp.JNLPFile.Match;
@@ -103,4 +107,45 @@
         Assert.assertFalse("Locales list should not match generalized case but did.",
                 file.localeMatches(jvmLocale, mismatchAvailable, Match.GENERALIZED));
     }
+
+    @Test
+    public void testCodebaseConstructorWithInputstreamAndCodebase() throws Exception {
+        String jnlpContext = "<?xml version=\"1.0\"?>\n" +
+                "<jnlp spec=\"1.5+\"\n" +
+                "href=\"EmbeddedJnlpFile.jnlp\"\n" +
+                "codebase=\"http://icedtea.claspath.org\"\n" +
+                ">\n" +
+                "" +
+                "<information>\n" +
+                "<title>Sample Test</title>\n" +
+                "<vendor>RedHat</vendor>\n" +
+                "<offline-allowed/>\n" +
+                "</information>\n" +
+                "\n" +
+                "<resources>\n" +
+                "<j2se version='1.6+' />\n" +
+                "<jar href='EmbeddedJnlpJarOne.jar' main='true'/>\n" +
+                "<jar href='EmbeddedJnlpJarTwo.jar' main='true'/>\n" +
+                "</resources>\n" +
+                "\n" +
+                "<applet-desc\n" +
+                "documentBase=\".\"\n" +
+                "name=\"redhat.embeddedjnlp\"\n" +
+                "main-class=\"redhat.embeddedjnlp\"\n" +
+                "width=\"0\"\n" +
+                "height=\"0\"\n" +
+                "/>\n" +
+                "</jnlp>";
+
+        URL codeBase = new URL("http://www.redhat.com/");
+        ;
+        InputStream is = new ByteArrayInputStream(jnlpContext.getBytes());
+
+        JNLPFile jnlpFile = new JNLPFile(is, codeBase, false);
+
+        Assert.assertEquals("http://icedtea.claspath.org/", jnlpFile.getCodeBase().toExternalForm());
+        Assert.assertEquals("redhat.embeddedjnlp", jnlpFile.getApplet().getMainClass());
+        Assert.assertEquals("Sample Test", jnlpFile.getTitle());
+        Assert.assertEquals(2, jnlpFile.getResources().getJARs().length);
+    }
 }
diff -r 755aa6b30bb7 -r 19c14a4b76b4 tests/netx/unit/net/sourceforge/jnlp/ParserTest.java
--- a/tests/netx/unit/net/sourceforge/jnlp/ParserTest.java	Tue Nov 13 10:50:01 2012 -0500
+++ b/tests/netx/unit/net/sourceforge/jnlp/ParserTest.java	Tue Nov 13 10:55:19 2012 -0500
@@ -38,6 +38,7 @@
 package net.sourceforge.jnlp;
 
 import java.io.ByteArrayInputStream;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
@@ -1355,4 +1356,60 @@
 
         parser.checkForInformation();
     }
+
+    @Test
+    public void testOverwrittenCodebaseWithValidJnlpCodebase() throws Exception {
+        String data = "<?xml version=\"1.0\"?>\n" +
+                "<jnlp spec=\"1.5+\"\n" +
+                "href=\"EmbeddedJnlpFile.jnlp\"\n" +
+                "codebase=\"http://www.redhat.com/\"\n" +
+                ">\n" +
+                "</jnlp>";
+
+        Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes()));
+        Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName());
+        URL overwrittenCodebase = new URL("http://icedtea.classpath.org");
+
+        MockJNLPFile file = new MockJNLPFile(LANG_LOCALE);
+        Parser parser = new Parser(file, null, root, false, false, overwrittenCodebase);
+
+        Assert.assertEquals("http://www.redhat.com/", parser.getCodeBase().toExternalForm());
+    }
+
+    @Test
+    public void testOverwrittenCodebaseWithInvalidJnlpCodebase() throws Exception {
+        String data = "<?xml version=\"1.0\"?>\n" +
+                "<jnlp spec=\"1.5+\"\n" +
+                "href=\"EmbeddedJnlpFile.jnlp\"\n" +
+                "codebase=\"this codebase is incorrect\"\n" +
+                ">\n" +
+                "</jnlp>";
+
+        Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes()));
+        Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName());
+        URL overwrittenCodebase = new URL("http://icedtea.classpath.org");
+
+        MockJNLPFile file = new MockJNLPFile(LANG_LOCALE);
+        Parser parser = new Parser(file, null, root, false, false, overwrittenCodebase);
+
+        Assert.assertEquals(overwrittenCodebase.toExternalForm(), parser.getCodeBase().toExternalForm());
+    }
+
+    @Test
+    public void testOverwrittenCodebaseWithNoJnlpCodebase() throws Exception {
+        String data = "<?xml version=\"1.0\"?>\n" +
+                "<jnlp spec=\"1.5+\"\n" +
+                "href=\"EmbeddedJnlpFile.jnlp\"\n" +
+                ">\n" +
+                "</jnlp>";
+
+        Node root = Parser.getRootNode(new ByteArrayInputStream(data.getBytes()));
+        Assert.assertEquals("Root name is not jnlp", "jnlp", root.getNodeName());
+        URL overwrittenCodebase = new URL("http://icedtea.classpath.org");
+
+        MockJNLPFile file = new MockJNLPFile(LANG_LOCALE);
+        Parser parser = new Parser(file, null, root, false, false, overwrittenCodebase);
+
+        Assert.assertEquals(overwrittenCodebase.toExternalForm(), parser.getCodeBase().toExternalForm());
+    }
 }
diff -r 755aa6b30bb7 -r 19c14a4b76b4 tests/netx/unit/net/sourceforge/jnlp/PluginBridgeTest.java
--- a/tests/netx/unit/net/sourceforge/jnlp/PluginBridgeTest.java	Tue Nov 13 10:50:01 2012 -0500
+++ b/tests/netx/unit/net/sourceforge/jnlp/PluginBridgeTest.java	Tue Nov 13 10:55:19 2012 -0500
@@ -27,10 +27,14 @@
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Hashtable;
+import java.util.List;
+import junit.framework.Assert;
 
 import net.sourceforge.jnlp.cache.UpdatePolicy;
+import net.sourceforge.jnlp.util.replacements.BASE64Encoder;
 
 import org.junit.Test;
 
@@ -96,4 +100,183 @@
                      mockCreator.getJNLPHref().toExternalForm());
     }
 
-}
\ No newline at end of file
+    @Test
+    public void testBase64StringDecoding() throws Exception {
+        String actualFile = "This is a sample string that will be encoded to" +
+                "a Base64 string and then decoded using PluginBridge's" +
+                "decoding method and compared.";
+
+        BASE64Encoder encoder = new BASE64Encoder();
+        String encodedFile = encoder.encodeBuffer(actualFile.getBytes());
+
+        byte[] decodedBytes = PluginBridge.decodeBase64String(encodedFile);
+        String decodedString = new String(decodedBytes);
+        Assert.assertEquals(actualFile, decodedString);
+    }
+
+    @Test
+    public void testEmbeddedJnlpWithValidCodebase() throws Exception {
+        URL codeBase = new URL("http://icedtea.classpath.org");
+        String relativeLocation = "/EmbeddedJnlpFile.jnlp";
+
+        //Codebase within jnlp file is VALID
+        /**
+        <?xml version="1.0"?>
+            <jnlp spec="1.5+"
+              href="EmbeddedJnlpFile.jnlp"
+              codebase="http://www.redhat.com"
+            >
+
+            <information>
+                <title>Sample Test</title>
+                <vendor>RedHat</vendor>
+                <offline-allowed/>
+            </information>
+
+            <resources>
+                <j2se version='1.6+' />
+                <jar href='EmbeddedJnlpJarOne.jar' main='true' />
+                <jar href='EmbeddedJnlpJarTwo.jar' main='true' />
+            </resources>
+
+            <applet-desc
+                documentBase="."
+                name="redhat.embeddedjnlp"
+                main-class="redhat.embeddedjnlp"
+                width="0"
+                height="0"
+            />
+           </jnlp>
+         **/
+
+        String jnlpFileEncoded = "ICAgICAgICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCiAgICAgICAgICAgIDxqbmxwIHNwZWM9IjEu" +
+                "NSsiIA0KICAgICAgICAgICAgICBocmVmPSJFbWJlZGRlZEpubHBGaWxlLmpubHAiIA0KICAgICAg" +
+                "ICAgICAgICBjb2RlYmFzZT0iaHR0cDovL3d3dy5yZWRoYXQuY29tIiAgICANCiAgICAgICAgICAg" +
+                "ID4NCg0KICAgICAgICAgICAgPGluZm9ybWF0aW9uPg0KICAgICAgICAgICAgICAgIDx0aXRsZT5T" +
+                "YW1wbGUgVGVzdDwvdGl0bGU+DQogICAgICAgICAgICAgICAgPHZlbmRvcj5SZWRIYXQ8L3ZlbmRv" +
+                "cj4NCiAgICAgICAgICAgICAgICA8b2ZmbGluZS1hbGxvd2VkLz4NCiAgICAgICAgICAgIDwvaW5m" +
+                "b3JtYXRpb24+DQoNCiAgICAgICAgICAgIDxyZXNvdXJjZXM+DQogICAgICAgICAgICAgICAgPGoy" +
+                "c2UgdmVyc2lvbj0nMS42KycgLz4NCiAgICAgICAgICAgICAgICA8amFyIGhyZWY9J0VtYmVkZGVk" +
+                "Sm5scEphck9uZS5qYXInIG1haW49J3RydWUnIC8+DQogICAgICAgICAgICAgICAgPGphciBocmVm" +
+                "PSdFbWJlZGRlZEpubHBKYXJUd28uamFyJyBtYWluPSd0cnVlJyAvPg0KICAgICAgICAgICAgPC9y" +
+                "ZXNvdXJjZXM+DQoNCiAgICAgICAgICAgIDxhcHBsZXQtZGVzYw0KICAgICAgICAgICAgICAgIGRv" +
+                "Y3VtZW50QmFzZT0iLiINCiAgICAgICAgICAgICAgICBuYW1lPSJyZWRoYXQuZW1iZWRkZWRqbmxw" +
+                "Ig0KICAgICAgICAgICAgICAgIG1haW4tY2xhc3M9InJlZGhhdC5lbWJlZGRlZGpubHAiDQogICAg" +
+                "ICAgICAgICAgICAgd2lkdGg9IjAiDQogICAgICAgICAgICAgICAgaGVpZ2h0PSIwIg0KICAgICAg" +
+                "ICAgICAgLz4NCiAgICAgICAgICAgIDwvam5scD4=";
+
+        MockJNLPCreator mockCreator = new MockJNLPCreator();
+        Hashtable<String, String> atts = new Hashtable<String, String>();
+        atts.put("jnlp_href", relativeLocation);
+        atts.put("jnlp_embedded", jnlpFileEncoded);
+
+        String jnlpCodebase = "http://www.redhat.com";
+        PluginBridge pb = new PluginBridge(codeBase, null, "", "", 0, 0, atts, "", mockCreator);
+        JARDesc[] jars = pb.getResources().getJARs();
+
+        //Check if there are two jars cached
+        Assert.assertTrue(jars.length == 2);
+
+        //Resource can be in any order
+        List<String> resourceLocations = new ArrayList<String>();
+        resourceLocations.add(jars[0].getLocation().toExternalForm());
+        resourceLocations.add(jars[1].getLocation().toExternalForm());
+
+        //Check URLs of jars
+        Assert.assertTrue(resourceLocations.contains(jnlpCodebase + "/EmbeddedJnlpJarOne.jar"));
+        Assert.assertTrue((resourceLocations.contains(jnlpCodebase + "/EmbeddedJnlpJarTwo.jar")));
+    }
+
+    @Test
+    public void testEmbeddedJnlpWithInvalidCodebase() throws Exception {
+        URL overwrittenCodebase = new URL("http://icedtea.classpath.org");
+        String relativeLocation = "/EmbeddedJnlpFile.jnlp";
+
+        //Codebase within jnlp file is INVALID
+        /**
+        <?xml version="1.0"?>
+            <jnlp spec="1.5+"
+              href="EmbeddedJnlpFile.jnlp"
+              codebase="invalidPath"
+            >
+
+            <information>
+                <title>Sample Test</title>
+                <vendor>RedHat</vendor>
+                <offline-allowed/>
+            </information>
+
+            <resources>
+                <j2se version='1.6+' />
+                <jar href='EmbeddedJnlpJarOne.jar' main='true' />
+                <jar href='EmbeddedJnlpJarTwo.jar' main='true' />
+            </resources>
+
+            <applet-desc
+                documentBase="."
+                name="redhat.embeddedjnlp"
+                main-class="redhat.embeddedjnlp"
+                width="0"
+                height="0"
+            />
+            </jnlp>
+         **/
+
+        String jnlpFileEncoded = "ICAgICAgICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCiAgICAgICAgICAgIDxqbmxwIHNwZWM9IjEu" +
+                "NSsiIA0KICAgICAgICAgICAgICBocmVmPSJFbWJlZGRlZEpubHBGaWxlLmpubHAiIA0KICAgICAg" +
+                "ICAgICAgICBjb2RlYmFzZT0iaW52YWxpZFBhdGgiICAgIA0KICAgICAgICAgICAgPg0KDQogICAg" +
+                "ICAgICAgICA8aW5mb3JtYXRpb24+DQogICAgICAgICAgICAgICAgPHRpdGxlPlNhbXBsZSBUZXN0" +
+                "PC90aXRsZT4NCiAgICAgICAgICAgICAgICA8dmVuZG9yPlJlZEhhdDwvdmVuZG9yPg0KICAgICAg" +
+                "ICAgICAgICAgIDxvZmZsaW5lLWFsbG93ZWQvPg0KICAgICAgICAgICAgPC9pbmZvcm1hdGlvbj4N" +
+                "Cg0KICAgICAgICAgICAgPHJlc291cmNlcz4NCiAgICAgICAgICAgICAgICA8ajJzZSB2ZXJzaW9u" +
+                "PScxLjYrJyAvPg0KICAgICAgICAgICAgICAgIDxqYXIgaHJlZj0nRW1iZWRkZWRKbmxwSmFyT25l" +
+                "LmphcicgbWFpbj0ndHJ1ZScgLz4NCiAgICAgICAgICAgICAgICA8amFyIGhyZWY9J0VtYmVkZGVk" +
+                "Sm5scEphclR3by5qYXInIG1haW49J3RydWUnIC8+DQogICAgICAgICAgICA8L3Jlc291cmNlcz4N" +
+                "Cg0KICAgICAgICAgICAgPGFwcGxldC1kZXNjDQogICAgICAgICAgICAgICAgZG9jdW1lbnRCYXNl" +
+                "PSIuIg0KICAgICAgICAgICAgICAgIG5hbWU9InJlZGhhdC5lbWJlZGRlZGpubHAiDQogICAgICAg" +
+                "ICAgICAgICAgbWFpbi1jbGFzcz0icmVkaGF0LmVtYmVkZGVkam5scCINCiAgICAgICAgICAgICAg" +
+                "ICB3aWR0aD0iMCINCiAgICAgICAgICAgICAgICBoZWlnaHQ9IjAiDQogICAgICAgICAgICAvPg0K" +
+                "ICAgICAgICAgICAgPC9qbmxwPg==";
+
+        MockJNLPCreator mockCreator = new MockJNLPCreator();
+        Hashtable<String, String> atts = new Hashtable<String, String>();
+        atts.put("jnlp_href", relativeLocation);
+        atts.put("jnlp_embedded", jnlpFileEncoded);
+
+        PluginBridge pb = new PluginBridge(overwrittenCodebase, null, "", "", 0, 0, atts, "", mockCreator);
+        JARDesc[] jars = pb.getResources().getJARs();
+
+        //Check if there are two jars cached
+        Assert.assertTrue(jars.length == 2);
+
+        //Resource can be in any order
+        List<String> resourceLocations = new ArrayList<String>();
+        resourceLocations.add(jars[0].getLocation().toExternalForm());
+        resourceLocations.add(jars[1].getLocation().toExternalForm());
+
+        //Check URLs of jars
+        Assert.assertTrue(resourceLocations.contains(overwrittenCodebase + "/EmbeddedJnlpJarOne.jar"));
+        Assert.assertTrue((resourceLocations.contains(overwrittenCodebase + "/EmbeddedJnlpJarTwo.jar")));
+    }
+
+    @Test
+    public void testInvalidEmbeddedJnlp() throws Exception {
+        URL overwrittenCodebase = new URL("http://icedtea.classpath.org");
+        String relativeLocation = "/EmbeddedJnlpFile.jnlp";
+
+        //Embedded jnlp is invalid
+        String jnlpFileEncoded = "thisContextIsInvalid";
+
+        MockJNLPCreator mockCreator = new MockJNLPCreator();
+        Hashtable<String, String> atts = new Hashtable<String, String>();
+        atts.put("jnlp_href", relativeLocation);
+        atts.put("jnlp_embedded", jnlpFileEncoded);
+
+        try {
+            new PluginBridge(overwrittenCodebase, null, "", "", 0, 0, atts, "", mockCreator);
+        } catch (Exception e) {
+            return;
+        }
+        Assert.fail("PluginBridge was successfully created with an invalid embedded jnlp value");
+    }
+}



More information about the distro-pkg-dev mailing list