public void testUncompressed() { OutputCollector collect = new OutputCollector(); OutStream @out = new OutStream("test", 100, null, collect); PositionCollector[] positions = new PositionCollector[1024]; for (int i = 0; i < 1024; ++i) { positions[i] = new PositionCollector(); @out.getPosition(positions[i]); @out.WriteByte((byte)i); } @out.Flush(); Assert.Equal(1024, collect.buffer.size()); for (int i = 0; i < 1024; ++i) { Assert.Equal((byte)i, collect.buffer.get(i)); } ByteBuffer inBuf = ByteBuffer.allocate(collect.buffer.size()); collect.buffer.setByteBuffer(inBuf, 0, collect.buffer.size()); inBuf.flip(); #pragma warning disable 612 InStream @in = InStream.create(null, "test", new ByteBuffer[] { inBuf }, new long[] { 0 }, inBuf.remaining(), null, 100); #pragma warning restore 612 Assert.Equal("uncompressed stream test position: 0 length: 1024" + " range: 0 offset: 0 limit: 0", @in.ToString()); for (int i = 0; i < 1024; ++i) { int x = @in.ReadByte(); Assert.Equal(i & 0xff, x); } for (int i = 1023; i >= 0; --i) { @in.seek(positions[i]); Assert.Equal(i & 0xff, @in.ReadByte()); } }
public void testCorruptStream() { OutputCollector collect = new OutputCollector(); CompressionCodec codec = new ZlibCodec(); OutStream @out = new OutStream("test", 500, codec, collect); PositionCollector[] positions = new PositionCollector[1024]; for (int i = 0; i < 1024; ++i) { positions[i] = new PositionCollector(); @out.getPosition(positions[i]); @out.WriteByte((byte)i); } @out.Flush(); // now try to read the stream with a buffer that is too small ByteBuffer inBuf = ByteBuffer.allocate(collect.buffer.size()); collect.buffer.setByteBuffer(inBuf, 0, collect.buffer.size()); inBuf.flip(); InStream @in = InStream.create(null, "test", new ByteBuffer[] { inBuf }, new long[] { 0 }, inBuf.remaining(), codec, 100); byte[] contents = new byte[1024]; try { @in.Read(contents, 0, contents.Length); fail(); } catch (IllegalArgumentException iae) { // EXPECTED } // make a corrupted header inBuf.clear(); inBuf.put((byte)32); inBuf.put((byte)0); inBuf.flip(); @in = InStream.create(null, "test2", new ByteBuffer[] { inBuf }, new long[] { 0 }, inBuf.remaining(), codec, 300); try { @in.ReadByte(); fail(); } catch (InvalidOperationException ise) { // EXPECTED } }
public void testCompressed() { OutputCollector collect = new OutputCollector(); CompressionCodec codec = new ZlibCodec(); OutStream @out = new OutStream("test", 300, codec, collect); PositionCollector[] positions = new PositionCollector[1024]; for (int i = 0; i < 1024; ++i) { positions[i] = new PositionCollector(); @out.getPosition(positions[i]); @out.WriteByte((byte)i); } @out.Flush(); Assert.Equal("test", @out.ToString()); Assert.Equal(961, collect.buffer.size()); ByteBuffer inBuf = ByteBuffer.allocate(collect.buffer.size()); collect.buffer.setByteBuffer(inBuf, 0, collect.buffer.size()); inBuf.flip(); InStream @in = InStream.create(null, "test", new ByteBuffer[] { inBuf }, new long[] { 0 }, inBuf.remaining(), codec, 300); Assert.Equal("compressed stream test position: 0 length: 961 range: 0" + " offset: 0 limit: 0 range 0 = 0 to 961", @in.ToString()); for (int i = 0; i < 1024; ++i) { int x = @in.ReadByte(); Assert.Equal(i & 0xff, x); } Assert.Equal(0, @in.available()); for (int i = 1023; i >= 0; --i) { @in.seek(positions[i]); Assert.Equal(i & 0xff, @in.ReadByte()); } }