[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