[rfc][icedtea-web] Reproducer for PR920

Adam Domurad adomurad at redhat.com
Fri Aug 17 11:15:45 PDT 2012


ping ... would like this + fix before we release 1.3

On Tue, 2012-08-14 at 11:30 -0400, Adam Domurad wrote:
> On Tue, 2012-08-14 at 15:16 +0200, Jiri Vanek wrote:
> > 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?
> It exists as a class in the same folder (the deployment folder), and is
> thus part of the codebase and the classpath. 
> > > 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.
> Added
> > 
> > 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