< prev index next >
test/jdk/java/io/InputStream/ReadNBytes.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, 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.
@@ -29,11 +29,11 @@
import java.util.Random;
import jdk.test.lib.RandomFactory;
/*
* @test
- * @bug 8080835
+ * @bug 8080835 8139206
* @library /test/lib
* @build jdk.test.lib.RandomFactory
* @run main ReadNBytes
* @summary Basic test for InputStream.readNBytes
* @key randomness
@@ -44,19 +44,23 @@
private static Random generator = RandomFactory.getRandom();
public static void main(String[] args) throws IOException {
test(new byte[]{1, 2, 3});
test(createRandomBytes(1024));
- test(createRandomBytes((1 << 13) - 1));
- test(createRandomBytes((1 << 13)));
- test(createRandomBytes((1 << 13) + 1));
- test(createRandomBytes((1 << 15) - 1));
- test(createRandomBytes((1 << 15)));
- test(createRandomBytes((1 << 15) + 1));
- test(createRandomBytes((1 << 17) - 1));
- test(createRandomBytes((1 << 17)));
- test(createRandomBytes((1 << 17) + 1));
+ for (int shift : new int[] {13, 15, 17}) {
+ for (int offset : new int[] {-1, 0, 1}) {
+ test(createRandomBytes((1 << shift) + offset));
+ }
+ }
+
+ test(-1);
+ test(0);
+ for (int shift : new int[] {13, 15, 17}) {
+ for (int offset : new int[] {-1, 0, 1}) {
+ test((1 << shift) + offset);
+ }
+ }
}
static void test(byte[] inputBytes) throws IOException {
int length = inputBytes.length;
WrapperInputStream in = new WrapperInputStream(new ByteArrayInputStream(inputBytes));
@@ -89,10 +93,50 @@
check((x = in.readNBytes(tmp, 0, tmp.length)) == 0,
"Expected end of stream, 0, from readNBytes(byte[], int, int), got " + x);
check(!in.isClosed(), "Stream unexpectedly closed");
}
+ static void test(int max) throws IOException {
+ byte[] inputBytes = max <= 0 ? new byte[0] : createRandomBytes(max);
+ WrapperInputStream in =
+ new WrapperInputStream(new ByteArrayInputStream(inputBytes));
+
+ if (max < 0) {
+ try {
+ in.readNBytes(max);
+ check(false, "Expected IndexOutOfBoundsException not thrown");
+ } catch (IndexOutOfBoundsException ioobe) {
+ return;
+ }
+ } else if (max == 0) {
+ int x;
+ check((x = in.readNBytes(max).length) == 0,
+ "Expected zero bytes, got " + x);
+ return;
+ }
+
+ int off = Math.toIntExact(in.skip(generator.nextInt(max/2)));
+ int len = generator.nextInt(max - 1 - off);
+ byte[] readBytes = in.readNBytes(len);
+ check(readBytes.length == len,
+ "Expected " + len + " bytes, got " + readBytes.length);
+ check(Arrays.equals(inputBytes, off, off + len, readBytes, 0, len),
+ "Expected[" + Arrays.copyOfRange(inputBytes, off, off + len) +
+ "], got:[" + readBytes + "]");
+
+ int remaining = max - (off + len);
+ readBytes = in.readNBytes(remaining);
+ check(readBytes.length == remaining,
+ "Expected " + remaining + "bytes, got " + readBytes.length);
+ check(Arrays.equals(inputBytes, off + len, max,
+ readBytes, 0, remaining),
+ "Expected[" + Arrays.copyOfRange(inputBytes, off + len, max) +
+ "], got:[" + readBytes + "]");
+
+ check(!in.isClosed(), "Stream unexpectedly closed");
+ }
+
static byte[] createRandomBytes(int size) {
byte[] bytes = new byte[size];
generator.nextBytes(bytes);
return bytes;
}
< prev index next >