/*
* 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 7042603 - Test truncates system files when run as root
@ 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();
}
}
Messung V0.5 in Prozent C=96 H=84 G=90
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland