< prev index next >
test/java/io/Serializable/packageAccess/PackageAccessTest.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
@@ -20,28 +20,45 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
+ * @test
* @bug 4765255
+ * @library /lib/testlibrary
+ * @build JarUtils A B C D PackageAccessTest
+ * @run main PackageAccessTest
* @summary Verify proper functioning of package equality checks used to
* determine accessibility of superclass constructor and inherited
* writeReplace/readResolve methods.
*/
-import java.io.*;
-import java.net.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
+import java.io.InvalidClassException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
-public class Test {
+public class PackageAccessTest {
static Class bcl;
static Class dcl;
public static void main(String[] args) throws Exception {
- ClassLoader ldr =
+ setup();
+
+ URLClassLoader ldr =
new URLClassLoader(new URL[]{ new URL("file:foo.jar") },
- Test.class.getClassLoader());
+ PackageAccessTest.class.getClassLoader());
bcl = Class.forName("B", true, ldr);
dcl = Class.forName("D", true, ldr);
Object b = bcl.newInstance();
try {
@@ -55,10 +72,11 @@
throw new Error("package private constructor of A invoked");
}
Object d = dcl.newInstance();
swizzle(d);
+ ldr.close();
}
static void swizzle(Object obj) throws Exception {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream oout = new ObjectOutputStream(bout);
@@ -66,10 +84,18 @@
oout.close();
ByteArrayInputStream bin =
new ByteArrayInputStream(bout.toByteArray());
new TestObjectInputStream(bin).readObject();
}
+
+ static void setup() throws Exception {
+ Path classes = Paths.get(System.getProperty("test.classes", ""));
+ JarUtils.createJarFile(Paths.get("foo.jar"), classes,
+ classes.resolve("B.class"), classes.resolve("D.class"));
+ Files.delete(classes.resolve("B.class"));
+ Files.delete(classes.resolve("D.class"));
+ }
}
class TestObjectInputStream extends ObjectInputStream {
TestObjectInputStream(InputStream in) throws IOException {
super(in);
@@ -78,13 +104,13 @@
protected Class resolveClass(ObjectStreamClass desc)
throws IOException, ClassNotFoundException
{
String n = desc.getName();
if (n.equals("B")) {
- return Test.bcl;
+ return PackageAccessTest.bcl;
} else if (n.equals("D")) {
- return Test.dcl;
+ return PackageAccessTest.dcl;
} else {
return super.resolveClass(desc);
}
}
}
< prev index next >