/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jena.hadoop.rdf.io.input.util;
import java.io.IOException;
import java.io.InputStream;
import org.apache.jena.hadoop.rdf.io.input.util.BlockInputStream;
import org.apache.jena.hadoop.rdf.io.input.util.TrackableInputStream;
import org.junit.Assert;
import org.junit.Test;
/**
* Tests for the {@link BlockInputStream}
*
*
*
*/
public class BlockInputStreamTest extends AbstractTrackableInputStreamTests {
@Override
protected TrackableInputStream getInstance(InputStream input) {
return new BlockInputStream(input, Long.MAX_VALUE);
}
/**
* Gets an instance of a block input stream
*
* @param input
* Underlying input stream
* @param limit
* Limit on bytes to read
* @return Block input stream
*/
protected BlockInputStream getInstance(InputStream input, long limit) {
return new BlockInputStream(input, limit);
}
protected final void testSingleByteRead(int length, long limit) throws IOException {
InputStream input = this.generateData(length);
TrackableInputStream trackable = this.getInstance(input, limit);
long count = 0;
while (trackable.read() >= 0) {
count++;
}
int expected = (int) Math.min(length, limit);
Assert.assertEquals(expected, count);
Assert.assertEquals(expected, trackable.getBytesRead());
trackable.close();
}
/**
* Test reading byte by byte
*
* @throws IOException
*/
@Test
public final void block_input_read_single_01() throws IOException {
this.testSingleByteRead(0, 0);
}
/**
* Test reading byte by byte
*
* @throws IOException
*/
@Test
public final void block_input_read_single_02() throws IOException {
this.testSingleByteRead(100, 0);
}
/**
* Test reading byte by byte
*
* @throws IOException
*/
@Test
public final void block_input_read_single_03() throws IOException {
this.testSingleByteRead(100, 50);
}
/**
* Test reading byte by byte
*
* @throws IOException
*/
@Test
public final void block_input_read_single_04() throws IOException {
this.testSingleByteRead(100, 100);
}
/**
* Test reading byte by byte
*
* @throws IOException
*/
@Test
public final void block_input_read_single_05() throws IOException {
// 1KB
this.testSingleByteRead(BYTES_PER_KB, 1);
}
/**
* Test reading byte by byte
*
* @throws IOException
*/
@Test
public final void block_input_read_single_06() throws IOException {
// 1KB
this.testSingleByteRead(BYTES_PER_KB, 100);
}
/**
* Test reading byte by byte
*
* @throws IOException
*/
@Test
public final void block_input_read_single_07() throws IOException {
// 1KB
this.testSingleByteRead(BYTES_PER_KB, BYTES_PER_KB / 2);
}
/**
* Test reading byte by byte
*
* @throws IOException
*/
@Test
public final void block_input_read_single_08() throws IOException {
// 1KB
this.testSingleByteRead(BYTES_PER_KB, BYTES_PER_KB);
}
/**
* Test reading byte by byte
*
* @throws IOException
*/
@Test
public final void block_input_read_single_09() throws IOException {
// 1KB
this.testSingleByteRead(BYTES_PER_KB, BYTES_PER_MB);
}
/**
* Test reading byte by byte
*
* @throws IOException
*/
@Test
public final void block_input_read_single_10() throws IOException {
// 1KB
this.testSingleByteRead(BYTES_PER_KB, BYTES_PER_MB * 10);
}
/**
* Test reading byte by byte
*
* @throws IOException
*/
@Test
public final void block_input_read_single_11() throws IOException {
// 1MB
this.testSingleByteRead(BYTES_PER_MB, 1);
}
/**
* Test reading byte by byte
*
* @throws IOException
*/
@Test
public final void block_input_read_single_12() throws IOException {
// 1MB
this.testSingleByteRead(BYTES_PER_MB, 100);
}
/**
* Test reading byte by byte
*
* @throws IOException
*/
@Test
public final void block_input_read_single_13() throws IOException {
// 1MB
this.testSingleByteRead(BYTES_PER_MB, BYTES_PER_KB);
}
/**
* Test reading byte by byte
*
* @throws IOException
*/
@Test
public final void block_input_read_single_14() throws IOException {
// 1MB
this.testSingleByteRead(BYTES_PER_MB, BYTES_PER_MB / 2);
}
/**
* Test reading byte by byte
*
* @throws IOException
*/
@Test
public final void block_input_read_single_15() throws IOException {
// 1MB
this.testSingleByteRead(BYTES_PER_MB, BYTES_PER_MB);
}
/**
* Test reading byte by byte
*
* @throws IOException
*/
@Test
public final void block_input_read_single_16() throws IOException {
// 1MB
this.testSingleByteRead(BYTES_PER_MB, BYTES_PER_MB * 10);
}
}