--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/io/IOException/LastErrorString.java Tue Sep 12 19:03:39 2017 +0200
@@ -0,0 +1,266 @@
+/*
+ * Copyright (c) 1998, 2011, 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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ @bug 4167937
+ @ignore Test truncates system files when run as root, see 7042603
+ @summary Test code paths that use the JVM_LastErrorString procedure
+ */
+
+import java.io.IOException;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.RandomAccessFile;
+
+
+public class LastErrorString {
+
+ static String UNWRITEABLE_DIR;
+ static String UNREADABLE_FILE;
+ static String READABLE_FILE;
+ static String WRITEABLE_FILE;
+ static String INVALID_PATH;
+
+ static {
+ if (File.separatorChar == '/') {
+ UNWRITEABLE_DIR = "/etc/dfs";
+ UNREADABLE_FILE = "/etc/shadow";
+ } else if (File.separatorChar == '\\') {
+ UNREADABLE_FILE = "c:/pagefile.sys";
+ UNWRITEABLE_DIR = "z:/fooBAR/baz/GORP";
+ } else {
+ throw new RuntimeException("What kind of system is this?");
+ }
+ File d = new File(System.getProperty("test.src", "."));
+ READABLE_FILE = new File(d, "LastErrorString.java").getPath();
+ WRITEABLE_FILE = "x.LastErrorString";
+ String s = "foo/";
+ for (;;) {
+ s = s + s;
+ if (s.length() > 8192) break;
+ }
+ s += "bar";
+ INVALID_PATH = s;
+ }
+
+
+ abstract static class Test {
+
+ String name;
+
+ public Test(String name) {
+ this.name = name;
+ }
+
+ public abstract void run() throws IOException;
+
+ public void go() throws IOException {
+ try {
+ this.run();
+ } catch (IOException x) {
+ System.err.println(name);
+ System.err.println(" " + x);
+ return;
+ }
+ System.err.println("WARNING: No exception for " + name);
+ }
+
+ }
+
+ abstract static class ClosedFISTest extends Test {
+
+ FileInputStream in;
+
+ public ClosedFISTest(String name) {
+ super("FileInputStream." + name);
+ }
+
+ public void go() throws IOException {
+ this.in = new FileInputStream(READABLE_FILE);
+ this.in.close();
+ super.go();
+ }
+
+ }
+
+ abstract static class ClosedFOSTest extends Test {
+
+ FileOutputStream out;
+
+ public ClosedFOSTest(String name) {
+ super("FileOutputStream." + name);
+ }
+
+ public void go() throws IOException {
+ this.out = new FileOutputStream(WRITEABLE_FILE);
+ this.out.close();
+ super.go();
+ }
+
+ }
+
+ abstract static class ClosedRAFTest extends Test {
+
+ RandomAccessFile raf;
+
+ public ClosedRAFTest(String name) {
+ super("RandomAccessFile." + name);
+ }
+
+ public void go() throws IOException {
+ this.raf = new RandomAccessFile(WRITEABLE_FILE, "rw");
+ this.raf.close();
+ super.go();
+ }
+
+ }
+
+ abstract static class ReadOnlyRAFTest extends Test {
+
+ RandomAccessFile raf;
+
+ public ReadOnlyRAFTest(String name) {
+ super("RandomAccessFile." + name);
+ }
+
+ public void go() throws IOException {
+ this.raf = new RandomAccessFile(READABLE_FILE, "r");
+ super.go();
+ this.raf.close();
+ }
+
+ }
+
+
+ static void go() throws Exception {
+
+ new Test("File.createNewFile") {
+ public void run() throws IOException {
+ new File(UNWRITEABLE_DIR, "foo").createNewFile();
+ }}.go();
+
+ new Test("File.getCanonicalpath") {
+ public void run() throws IOException {
+ new File(INVALID_PATH).getCanonicalPath();
+ }}.go();
+
+ new Test("FileInputStream(file)") {
+ public void run() throws IOException {
+ new FileInputStream(UNREADABLE_FILE);
+ }}.go();
+
+ new Test("FileInputStream(dir)") {
+ public void run() throws IOException {
+ new FileInputStream(".");
+ }}.go();
+
+ new ClosedFISTest("read()") {
+ public void run() throws IOException {
+ in.read();
+ }}.go();
+
+ new ClosedFISTest("read(byte[])") {
+ public void run() throws IOException {
+ byte[] b = new byte[10];
+ in.read(b);
+ }}.go();
+
+ new ClosedFISTest("skip") {
+ public void run() throws IOException {
+ in.skip(10);
+ }}.go();
+
+ new ClosedFISTest("available") {
+ public void run() throws IOException {
+ in.available();
+ }}.go();
+
+ new Test("FileOutputStream") {
+ public void run() throws IOException {
+ new FileOutputStream(UNREADABLE_FILE);
+ }}.go();
+
+ new ClosedFOSTest("write()") {
+ public void run() throws IOException {
+ out.write(10);
+ }}.go();
+
+ new ClosedFOSTest("write(byte[])") {
+ public void run() throws IOException {
+ out.write(new byte[] { 1, 2, 3 });
+ }}.go();
+
+ new Test("RandomAccessFile") {
+ public void run() throws IOException {
+ new RandomAccessFile(UNREADABLE_FILE, "r");
+ }}.go();
+
+ new ClosedRAFTest("getFilePointer") {
+ public void run() throws IOException {
+ raf.getFilePointer();
+ }}.go();
+
+ new ClosedRAFTest("length") {
+ public void run() throws IOException {
+ raf.length();
+ }}.go();
+
+ new ClosedRAFTest("seek") {
+ public void run() throws IOException {
+ raf.seek(20);
+ }}.go();
+
+ new ClosedRAFTest("setLength") {
+ public void run() throws IOException {
+ raf.setLength(0);
+ }}.go();
+
+ new ClosedRAFTest("readShort") {
+ public void run() throws IOException {
+ raf.readShort();
+ }}.go();
+
+ new ClosedRAFTest("readInt") {
+ public void run() throws IOException {
+ raf.readInt();
+ }}.go();
+
+ new ReadOnlyRAFTest("writeShort") {
+ public void run() throws IOException {
+ raf.writeShort(10);
+ }}.go();
+
+ new ReadOnlyRAFTest("getFilePointer") {
+ public void run() throws IOException {
+ raf.writeInt(10);
+ }}.go();
+
+ }
+
+
+ public static void main(String[] args) throws Exception {
+ go();
+ }
+
+}