|
|
@@ -1,5 +1,5 @@ |
|
|
/* |
|
|
* Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. |
|
|
* Copyright (c) 2018, 2020, 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 |
|
@@ -50,74 +50,74 @@ |
|
|
public class TestFileChannelEvents { |
|
|
public static void main(String[] args) throws Throwable { |
|
|
File tmp = Utils.createTempFile("TestFileChannelEvents", ".tmp").toFile(); |
|
|
Recording recording = new Recording(); |
|
|
List<IOEvent> expectedEvents = new ArrayList<>(); |
|
|
|
|
|
try (RandomAccessFile rf = new RandomAccessFile(tmp, "rw"); FileChannel ch = rf.getChannel();) { |
|
|
recording.enable(IOEvent.EVENT_FILE_FORCE).withThreshold(Duration.ofMillis(0)); |
|
|
recording.enable(IOEvent.EVENT_FILE_READ).withThreshold(Duration.ofMillis(0)); |
|
|
recording.enable(IOEvent.EVENT_FILE_WRITE).withThreshold(Duration.ofMillis(0)); |
|
|
recording.start(); |
|
|
|
|
|
ByteBuffer bufA = ByteBuffer.allocateDirect(10); |
|
|
ByteBuffer bufB = ByteBuffer.allocateDirect(20); |
|
|
bufA.put("1234567890".getBytes()); |
|
|
bufB.put("1234567890".getBytes()); |
|
|
|
|
|
// test write(ByteBuffer) |
|
|
bufA.flip(); |
|
|
long size = ch.write(bufA); |
|
|
expectedEvents.add(IOEvent.createFileWriteEvent(size, tmp)); |
|
|
|
|
|
// test write(ByteBuffer, long) |
|
|
bufA.flip(); |
|
|
size = ch.write(bufA, bufA.capacity() / 2); |
|
|
expectedEvents.add(IOEvent.createFileWriteEvent(size, tmp)); |
|
|
|
|
|
// test write(ByteBuffer[]) |
|
|
bufA.flip(); |
|
|
bufA.limit(5); |
|
|
bufB.flip(); |
|
|
bufB.limit(5); |
|
|
size = ch.write(new ByteBuffer[] { bufA, bufB }); |
|
|
expectedEvents.add(IOEvent.createFileWriteEvent(size, tmp)); |
|
|
|
|
|
// test force(boolean) |
|
|
ch.force(true); |
|
|
expectedEvents.add(IOEvent.createFileForceEvent(tmp)); |
|
|
|
|
|
// reset file |
|
|
ch.position(0); |
|
|
|
|
|
// test read(ByteBuffer) |
|
|
bufA.clear(); |
|
|
size = ch.read(bufA); |
|
|
expectedEvents.add(IOEvent.createFileReadEvent(size, tmp)); |
|
|
|
|
|
// test read(ByteBuffer, long) |
|
|
bufA.clear(); |
|
|
size = ch.read(bufA, bufA.capacity() / 2); |
|
|
expectedEvents.add(IOEvent.createFileReadEvent(size, tmp)); |
|
|
|
|
|
// test read(ByteBuffer[]) |
|
|
bufA.clear(); |
|
|
bufA.limit(5); |
|
|
bufB.clear(); |
|
|
bufB.limit(5); |
|
|
size = ch.read(new ByteBuffer[] { bufA, bufB }); |
|
|
expectedEvents.add(IOEvent.createFileReadEvent(size, tmp)); |
|
|
|
|
|
// Read at EOF. Should get size -1 in event. |
|
|
ch.position(ch.size()); |
|
|
bufA.clear(); |
|
|
size = ch.read(bufA); |
|
|
assertEquals(size, -1L, "Expected size -1 when read at EOF"); |
|
|
expectedEvents.add(IOEvent.createFileReadEvent(size, tmp)); |
|
|
|
|
|
ch.close(); |
|
|
recording.stop(); |
|
|
List<RecordedEvent> events = Events.fromRecording(recording); |
|
|
IOHelper.verifyEqualsInOrder(events, expectedEvents); |
|
|
try (Recording recording = new Recording()) { |
|
|
List<IOEvent> expectedEvents = new ArrayList<>(); |
|
|
try (RandomAccessFile rf = new RandomAccessFile(tmp, "rw"); FileChannel ch = rf.getChannel();) { |
|
|
recording.enable(IOEvent.EVENT_FILE_FORCE).withThreshold(Duration.ofMillis(0)); |
|
|
recording.enable(IOEvent.EVENT_FILE_READ).withThreshold(Duration.ofMillis(0)); |
|
|
recording.enable(IOEvent.EVENT_FILE_WRITE).withThreshold(Duration.ofMillis(0)); |
|
|
recording.start(); |
|
|
|
|
|
ByteBuffer bufA = ByteBuffer.allocateDirect(10); |
|
|
ByteBuffer bufB = ByteBuffer.allocateDirect(20); |
|
|
bufA.put("1234567890".getBytes()); |
|
|
bufB.put("1234567890".getBytes()); |
|
|
|
|
|
// test write(ByteBuffer) |
|
|
bufA.flip(); |
|
|
long size = ch.write(bufA); |
|
|
expectedEvents.add(IOEvent.createFileWriteEvent(size, tmp)); |
|
|
|
|
|
// test write(ByteBuffer, long) |
|
|
bufA.flip(); |
|
|
size = ch.write(bufA, bufA.capacity() / 2); |
|
|
expectedEvents.add(IOEvent.createFileWriteEvent(size, tmp)); |
|
|
|
|
|
// test write(ByteBuffer[]) |
|
|
bufA.flip(); |
|
|
bufA.limit(5); |
|
|
bufB.flip(); |
|
|
bufB.limit(5); |
|
|
size = ch.write(new ByteBuffer[] { bufA, bufB }); |
|
|
expectedEvents.add(IOEvent.createFileWriteEvent(size, tmp)); |
|
|
|
|
|
// test force(boolean) |
|
|
ch.force(true); |
|
|
expectedEvents.add(IOEvent.createFileForceEvent(tmp)); |
|
|
|
|
|
// reset file |
|
|
ch.position(0); |
|
|
|
|
|
// test read(ByteBuffer) |
|
|
bufA.clear(); |
|
|
size = ch.read(bufA); |
|
|
expectedEvents.add(IOEvent.createFileReadEvent(size, tmp)); |
|
|
|
|
|
// test read(ByteBuffer, long) |
|
|
bufA.clear(); |
|
|
size = ch.read(bufA, bufA.capacity() / 2); |
|
|
expectedEvents.add(IOEvent.createFileReadEvent(size, tmp)); |
|
|
|
|
|
// test read(ByteBuffer[]) |
|
|
bufA.clear(); |
|
|
bufA.limit(5); |
|
|
bufB.clear(); |
|
|
bufB.limit(5); |
|
|
size = ch.read(new ByteBuffer[] { bufA, bufB }); |
|
|
expectedEvents.add(IOEvent.createFileReadEvent(size, tmp)); |
|
|
|
|
|
// Read at EOF. Should get size -1 in event. |
|
|
ch.position(ch.size()); |
|
|
bufA.clear(); |
|
|
size = ch.read(bufA); |
|
|
assertEquals(size, -1L, "Expected size -1 when read at EOF"); |
|
|
expectedEvents.add(IOEvent.createFileReadEvent(size, tmp)); |
|
|
|
|
|
ch.close(); |
|
|
recording.stop(); |
|
|
List<RecordedEvent> events = Events.fromRecording(recording); |
|
|
IOHelper.verifyEqualsInOrder(events, expectedEvents); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |