< prev index next >
test/jdk/java/nio/channels/FileChannel/directio/DirectIOTest.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 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.
--- 1,7 ----
/*
! * Copyright (c) 2017, 2021, 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.
*** 45,78 ****
import java.nio.file.StandardOpenOption;
import com.sun.nio.file.ExtendedOpenOption;
public class DirectIOTest {
! private static final int SIZE = 4096;
! private static void testWrite(Path p) throws Exception {
try (FileChannel fc = FileChannel.open(p, StandardOpenOption.WRITE,
ExtendedOpenOption.DIRECT)) {
! FileStore fs = Files.getFileStore(p);
! int alignment = (int)fs.getBlockSize();
! ByteBuffer src = ByteBuffer.allocateDirect(SIZE + alignment - 1)
.alignedSlice(alignment);
! for (int j = 0; j < SIZE; j++) {
src.put((byte)0);
}
src.flip();
fc.write(src);
}
}
! private static void testRead(Path p) throws Exception {
try (FileChannel fc = FileChannel.open(p, ExtendedOpenOption.DIRECT)) {
! FileStore fs = Files.getFileStore(p);
! int alignment = (int)fs.getBlockSize();
! ByteBuffer dest = ByteBuffer.allocateDirect(SIZE + alignment - 1)
.alignedSlice(alignment);
fc.read(dest);
}
}
public static Path createTempFile() throws IOException {
return Files.createTempFile(
--- 45,85 ----
import java.nio.file.StandardOpenOption;
import com.sun.nio.file.ExtendedOpenOption;
public class DirectIOTest {
! private static final int BASE_SIZE = 4096;
! private static long blockSize;
! private static int testWrite(Path p) throws Exception {
try (FileChannel fc = FileChannel.open(p, StandardOpenOption.WRITE,
ExtendedOpenOption.DIRECT)) {
! int bs = (int)blockSize;
! int size = Math.max(BASE_SIZE, bs);
! int alignment = bs;
! ByteBuffer src = ByteBuffer.allocateDirect(size + alignment - 1)
.alignedSlice(alignment);
! assert src.capacity() != 0;
! for (int j = 0; j < size; j++) {
src.put((byte)0);
}
src.flip();
fc.write(src);
+ return size;
}
}
! private static int testRead(Path p) throws Exception {
try (FileChannel fc = FileChannel.open(p, ExtendedOpenOption.DIRECT)) {
! int bs = (int)blockSize;
! int size = Math.max(BASE_SIZE, bs);
! int alignment = bs;
! ByteBuffer dest = ByteBuffer.allocateDirect(size + alignment - 1)
.alignedSlice(alignment);
+ assert dest.capacity() != 0;
fc.read(dest);
+ return size;
}
}
public static Path createTempFile() throws IOException {
return Files.createTempFile(
*** 91,125 ****
}
}
return supported;
}
! private static boolean isFileInCache(Path p) {
String path = p.toString();
! return isFileInCache0(SIZE, path);
}
private static native boolean isFileInCache0(int size, String path);
public static void main(String[] args) throws Exception {
Path p = createTempFile();
if (!isDirectIOSupportedByFS(p)) {
Files.delete(p);
return;
}
System.loadLibrary("DirectIO");
try {
! testWrite(p);
! if (isFileInCache(p)) {
throw new RuntimeException("DirectIO is not working properly with "
+ "write. File still exists in cache!");
}
! testRead(p);
! if (isFileInCache(p)) {
throw new RuntimeException("DirectIO is not working properly with "
+ "read. File still exists in cache!");
}
} finally {
Files.delete(p);
--- 98,133 ----
}
}
return supported;
}
! private static boolean isFileInCache(int size, Path p) {
String path = p.toString();
! return isFileInCache0(size, path);
}
private static native boolean isFileInCache0(int size, String path);
public static void main(String[] args) throws Exception {
Path p = createTempFile();
+ blockSize = Files.getFileStore(p).getBlockSize();
if (!isDirectIOSupportedByFS(p)) {
Files.delete(p);
return;
}
System.loadLibrary("DirectIO");
try {
! int size = testWrite(p);
! if (isFileInCache(size, p)) {
throw new RuntimeException("DirectIO is not working properly with "
+ "write. File still exists in cache!");
}
! size = testRead(p);
! if (isFileInCache(size, p)) {
throw new RuntimeException("DirectIO is not working properly with "
+ "read. File still exists in cache!");
}
} finally {
Files.delete(p);
< prev index next >