[rfc][icedtea-web] Reproducer for PR920
Jiri Vanek
jvanek at redhat.com
Tue Aug 14 06:16:56 PDT 2012
On 07/06/2012 08:19 PM, Adam Domurad wrote:
> This reproducer encapsulates the problem behind PR920.
> A LinkageError occurs, complaining of duplicate class definition, when
> an extended class outside of a jar references a common class with its
> parent class. The common class attempts to load twice.
Thank you for this test, two nitpicks below.
>
>
> 2012-07-06 Adam Domurad<adomurad at redhat.com>
>
> Reproduces problem behind PR920, class is in a jar is loaded twice when
> used by both a class within the jar, and also used by a class outside
> the jar extending that class.
> * tests/reproducers/custom/AppletExtendsFromOutsideJar/README:
> Describes test
> *
> tests/reproducers/custom/AppletExtendsFromOutsideJar/resources/AppletExtendsFromOutsideJar.html:
> Runs applet with main class outside jar
> * A
> tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/AppletReferenceInSameJar.java:
> References class Referenced inside same jar
> *
> tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/AppletReferenceOutOfJar.java:
> References class Referenced outside the jar
> * tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/Makefile:
> Packages Reference, AppletReferenceInSameJar into a jar,
> AppletReferenceOutOfJar outside it
> *
> tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/Referenced.java:
> Class that is referenced twice, loaded twice in failing behaviour
> *
> tests/reproducers/custom/AppletExtendsFromOutsideJar/testcases/AppletExtendsFromOutsideJarTests.java:
> Drives AppletExtendsFromOutsideJar.html
>
>
...
> +obligated to do so. If you do not wish to do so, delete this
> +exception statement from your version.
> +
> + -->
> +<!-- Runs a jar located in a .class file from the same folder, that uses a class in a .jar file -->
> +<html><head></head><body bgcolor="red">
> +<p>
> +<applet code="AppletReferenceOutOfJar.class" archive="AppletExtendsFromOutsideJar.jar" codebase="." width="100" height="100">
> +</applet>
> +</p>
> +</body>
> +</html>
Just clarification for me. How does $(OUTER_FILE) got to runtime classpath. It is searched in codebase, does it?
> diff --git a/tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/AppletReferenceInSameJar.java b/tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/AppletReferenceInSameJar.java
> new file mode 100644
> --- /dev/null
> +++ b/tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/AppletReferenceInSameJar.java
> @@ -0,0 +1,5 @@
> +import javax.swing.JApplet;
> +
> +public class AppletReferenceInSameJar extends JApplet {
> + Referenced sameJarReference = new Referenced();
> +}
> diff --git a/tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/AppletReferenceOutOfJar.java b/tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/AppletReferenceOutOfJar.java
> new file mode 100644
> --- /dev/null
> +++ b/tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/AppletReferenceOutOfJar.java
> @@ -0,0 +1,13 @@
> +import javax.swing.JApplet;
> +
> +public class AppletReferenceOutOfJar extends AppletReferenceInSameJar {
> +
> + Referenced outOfJarReference = new Referenced();
> +
> + public void init() {
> + System.out.println("My simple applet is running.");
> + }
> +
> + public AppletReferenceOutOfJar() {
> + }
> +}
> diff --git a/tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/Makefile b/tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/Makefile
> new file mode 100644
> --- /dev/null
...
> + rm -f $(JAR_FILES)
> + rm -f $(TESTNAME).jar
> + echo CLEANED REPRODUCER $(TESTNAME)
> +
> diff --git a/tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/Referenced.java b/tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/Referenced.java
> new file mode 100644
> --- /dev/null
> +++ b/tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/Referenced.java
> @@ -0,0 +1,3 @@
> +public class Referenced {
> +
> +}
> diff --git a/tests/reproducers/custom/AppletExtendsFromOutsideJar/testcases/AppletExtendsFromOutsideJarTests.java b/tests/reproducers/custom/AppletExtendsFromOutsideJar/testcases/AppletExtendsFromOutsideJarTests.java
> new file mode 100644
> --- /dev/null
...
> +
> + @NeedsDisplay
> + @Test
> + @TestInBrowsers(testIn={Browsers.one})
> + @Bug(id="PR920")
> + public void testClassInAppletFolder() throws Exception {
> + ProcessResult pr = server.executeBrowser("/AppletExtendsFromOutsideJar.html");
> +
> + String s0 = "My simple applet is running.";
> + Assert.assertTrue("Expected '"+s0+"', stdout was: " + pr.stdout, pr.stdout.contains(s0));
I would like to test also for not-occurence of java.lang.LinkageError.
Nice reproducer anyway, it took me a while to find what is from where :)
J.
> + }
> +}
>
>
> ChangeLog
>
>
> 2012-07-06 Adam Domurad<adomurad at redhat.com>
>
> Reproduces problem behind PR920, class is in a jar is loaded twice when
> used by both a class within the jar, and also used by a class outside
> the jar extending that class.
> * tests/reproducers/custom/AppletExtendsFromOutsideJar/README:
> Describes test
> * tests/reproducers/custom/AppletExtendsFromOutsideJar/resources/AppletExtendsFromOutsideJar.html:
> Runs applet with main class outside jar
> * A tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/AppletReferenceInSameJar.java:
> References class Referenced inside same jar
> * tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/AppletReferenceOutOfJar.java:
> References class Referenced outside the jar
> * tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/Makefile:
> Packages Reference, AppletReferenceInSameJar into a jar,
> AppletReferenceOutOfJar outside it
> * tests/reproducers/custom/AppletExtendsFromOutsideJar/srcs/Referenced.java:
> Class that is referenced twice, loaded twice in failing behaviour
> * tests/reproducers/custom/AppletExtendsFromOutsideJar/testcases/AppletExtendsFromOutsideJarTests.java:
> Drives AppletExtendsFromOutsideJar.html
>
More information about the distro-pkg-dev
mailing list