@Test(expectedExceptions = UnsupportedOperationException.class) public void testRejectPositionalInputStream() throws IOException { final File multiBlockFile = File.createTempFile("BlockCompressedAsciiLineReaderTest", ".gz"); multiBlockFile.deleteOnExit(); populateMultiBlockCompressedFile(multiBlockFile); try (final BlockCompressedInputStream bcis = new BlockCompressedInputStream(multiBlockFile); final BlockCompressedAsciiLineReader asciiLineReader = new BlockCompressedAsciiLineReader(bcis)) { asciiLineReader.readLine(new PositionalBufferedStream(new ByteArrayInputStream(new byte[1100]))); } }
@Test public void testLineReaderPosition() throws IOException { final File multiBlockFile = File.createTempFile("BlockCompressedAsciiLineReaderTest", ".gz"); multiBlockFile.deleteOnExit(); // write a file that has more than a single compressed block final long expectedFinalLineOffset = populateMultiBlockCompressedFile(multiBlockFile); try (final BlockCompressedInputStream bcis = new BlockCompressedInputStream(multiBlockFile); final BlockCompressedAsciiLineReader asciiLineReader = new BlockCompressedAsciiLineReader(bcis)) { String line = null; long actualFinalLineOffset = -1; do { actualFinalLineOffset = asciiLineReader.getPosition(); line = asciiLineReader.readLine(); } while (line != null && !line.equals(sentinelLine)); // test that we read the sentinel line; its at the expected offset, and that offset // represents a virtual file pointer Assert.assertNotNull(line); Assert.assertEquals(line, sentinelLine); Assert.assertEquals(expectedFinalLineOffset, actualFinalLineOffset); Assert.assertTrue(BlockCompressedFilePointerUtil.getBlockAddress(actualFinalLineOffset) != 0); } }