You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by bo...@apache.org on 2019/08/18 15:27:59 UTC
[commons-compress] 02/02: COMPRESS-231 increase test coverage
This is an automated email from the ASF dual-hosted git repository.
bodewig pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-compress.git
commit 26ad28cdaeb46f5cd0344687116952db97857929
Author: Stefan Bodewig <bo...@apache.org>
AuthorDate: Sun Aug 18 17:27:40 2019 +0200
COMPRESS-231 increase test coverage
---
.../MultiReadOnlySeekableByteChannelTest.java | 77 ++++++++++++++++++++++
1 file changed, 77 insertions(+)
diff --git a/src/test/java/org/apache/commons/compress/utils/MultiReadOnlySeekableByteChannelTest.java b/src/test/java/org/apache/commons/compress/utils/MultiReadOnlySeekableByteChannelTest.java
index a405ed8..77694d5 100644
--- a/src/test/java/org/apache/commons/compress/utils/MultiReadOnlySeekableByteChannelTest.java
+++ b/src/test/java/org/apache/commons/compress/utils/MultiReadOnlySeekableByteChannelTest.java
@@ -21,6 +21,7 @@ package org.apache.commons.compress.utils;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.ClosedChannelException;
+import java.nio.channels.NonWritableChannelException;
import java.nio.channels.SeekableByteChannel;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
@@ -104,6 +105,43 @@ public class MultiReadOnlySeekableByteChannelTest {
}, grouped(new byte[] { 1, 2, 3, 4, 5, }, 3));
}
+ @Test
+ public void closesAllAndThrowsExceptionIfCloseThrows() {
+ SeekableByteChannel[] ts = new ThrowingSeekableByteChannel[] {
+ new ThrowingSeekableByteChannel(),
+ new ThrowingSeekableByteChannel()
+ };
+ SeekableByteChannel s = MultiReadOnlySeekableByteChannel.forSeekableByteChannels(ts);
+ try {
+ s.close();
+ Assert.fail("IOException expected");
+ } catch (IOException expected) {
+ }
+ Assert.assertFalse(ts[0].isOpen());
+ Assert.assertFalse(ts[1].isOpen());
+ }
+
+ @Test
+ public void cantTruncate() throws IOException {
+ SeekableByteChannel s = MultiReadOnlySeekableByteChannel.forSeekableByteChannels(makeEmpty(), makeEmpty());
+ thrown.expect(NonWritableChannelException.class);
+ s.truncate(1);
+ }
+
+ @Test
+ public void cantWrite() throws IOException {
+ SeekableByteChannel s = MultiReadOnlySeekableByteChannel.forSeekableByteChannels(makeEmpty(), makeEmpty());
+ thrown.expect(NonWritableChannelException.class);
+ s.write(ByteBuffer.allocate(10));
+ }
+
+ @Test
+ public void cantPositionToANegativePosition() throws IOException {
+ SeekableByteChannel s = MultiReadOnlySeekableByteChannel.forSeekableByteChannels(makeEmpty(), makeEmpty());
+ thrown.expect(IllegalArgumentException.class);
+ s.position(-1);
+ }
+
private SeekableByteChannel makeEmpty() {
return makeSingle(new byte[0]);
}
@@ -167,6 +205,8 @@ public class MultiReadOnlySeekableByteChannelTest {
Assert.assertEquals("readBufferSize " + readBufferSize, expected.length, channel.size());
channel.position(0);
Assert.assertEquals("readBufferSize " + readBufferSize, 0, channel.position());
+ Assert.assertEquals("readBufferSize " + readBufferSize, 0,
+ channel.read(ByteBuffer.allocate(0)));
// Will hold the entire result that we read
final ByteBuffer resultBuffer = ByteBuffer.allocate(expected.length + 100);
@@ -214,4 +254,41 @@ public class MultiReadOnlySeekableByteChannelTest {
}
return groups.toArray(new byte[0][]);
}
+
+ private static class ThrowingSeekableByteChannel implements SeekableByteChannel {
+ private boolean closed = false;
+ @Override
+ public boolean isOpen() {
+ return !closed;
+ }
+ @Override
+ public void close() throws IOException {
+ closed = true;
+ throw new IOException("foo");
+ }
+ @Override
+ public int read(ByteBuffer dst) throws IOException {
+ return -1;
+ }
+ @Override
+ public int write(ByteBuffer src) throws IOException {
+ return 0;
+ }
+ @Override
+ public long position() throws IOException {
+ return 0;
+ }
+ @Override
+ public SeekableByteChannel position(long newPosition) throws IOException {
+ return this;
+ }
+ @Override
+ public long size() throws IOException {
+ return 0;
+ }
+ @Override
+ public SeekableByteChannel truncate(long size) throws IOException {
+ return this;
+ }
+ }
}