package htsjdk.samtools;
import htsjdk.samtools.seekablestream.SeekableStream;
import org.testng.annotations.Test;
import java.io.IOException;
public class AbstractBAMFileIndexTest {
/**
* @see <a href="https://github.com/samtools/htsjdk/issues/73">https://github.com/samtools/htsjdk/issues/73</a>
*/
@Test
public static void avoidDataExhaustionTest() {
final AbstractBAMFileIndex.IndexStreamBuffer buffer = new AbstractBAMFileIndex.IndexStreamBuffer(new SeekableStream() {
@Override
public long length() {
return 0;
}
@Override
public long position() throws IOException {
return 0;
}
@Override
public void seek(final long position) throws IOException {
}
@Override
public int read(final byte[] buffer, final int offset, final int length) throws IOException {
return 2; // This is the important line; pretend we feed 2 bytes at a time, which is fewer than any downstream calls ultimately request
}
@Override
public void close() throws IOException {
}
@Override
public boolean eof() throws IOException {
return false;
}
@Override
public String getSource() {
return null;
}
@Override
public int read() throws IOException {
return 0;
}
});
// Ensure these throw no exceptions
buffer.readLong();
buffer.readInteger();
buffer.readBytes(new byte[10000]);
}
}