public void ShouldReadHeaderWithinUnsignedShortRange() { for (var i = 1; i <= UInt16.MaxValue; i = (i << 1) + 1) // i: [0x1, 0xFFFF] { ushort chunkHeaderSize = (ushort)(i & 0xFFFF); var input = new byte[chunkHeaderSize + 2 + 2]; // 0xXX, 0xXX, ..., 0x00, 0x00 input[0] = (byte)((chunkHeaderSize & 0xFF00) >> 8); input[1] = (byte)(chunkHeaderSize & 0xFF); for (int j = 2; j < chunkHeaderSize + 2; j++) { input[j] = Getbyte(); } var clientMock = new Mock <ITcpSocketClient>(); SetupClientReadStream(clientMock, input); var chunkedInput = new ChunkedInputStream(clientMock.Object, null); byte[] actual = new byte[chunkHeaderSize]; chunkedInput.ReadBytes(actual); for (int j = 0; j < actual.Length; j++) { actual[j].Should().Be(input[2 + j]); } } }
public void ShouldReturnTheCorrectValue(byte[] response, sbyte correctValue) { var clientMock = new Mock <ITcpSocketClient>(); TestHelper.TcpSocketClientSetup.SetupClientReadStream(clientMock, response); var chunkedInput = new ChunkedInputStream(clientMock.Object, new BigEndianTargetBitConverter(), null); var actual = chunkedInput.ReadSByte(); actual.Should().Be(correctValue); //, $"Got: {actual}, expected: {correctValue}"); }
public Stream Create(Stream inputStream, IHttpHeader header) { if (inputStream == null) { throw new ArgumentNullException(nameof(inputStream)); } if (header == null) { throw new ArgumentNullException(nameof(header)); } var streamTmp = inputStream; var contentLength = header.Headers.ContentLength.Value; if (contentLength != null) { if (contentLength <= 0) { return(new NullInputStream()); } streamTmp = new FixLengthInputStream(streamTmp, contentLength.Value); } foreach (var transferEncodingValue in header.Headers.TransferEncoding.Values) { var cleanedTransferEncoding = transferEncodingValue.ToLower().Trim(); switch (cleanedTransferEncoding) { case "identity": break; case "gzip": streamTmp = new GZipStream(streamTmp, CompressionLevel.Fastest); break; case "deflate": streamTmp = new DeflateStream(streamTmp, CompressionLevel.Fastest); break; case "chunked": streamTmp = new ChunkedInputStream(streamTmp); break; default: throw new InputTransferEncodingNotSupportedException(); } } return(streamTmp); }
public void ShouldReadMessageBiggerThanChunkSize(byte[] input, byte[] correctValue) { var clientMock = new Mock <ITcpSocketClient>(); TestHelper.TcpSocketClientSetup.SetupClientReadStream(clientMock, input); var chunkedInput = new ChunkedInputStream(clientMock.Object, new BigEndianTargetBitConverter(), null, 1); byte[] actual = new byte[3]; chunkedInput.ReadBytes(actual); actual.Should().Equal(correctValue); }
public void ShouldReadMessageAcrossChunks(byte[] input, byte[] correctValue) { var clientMock = new Mock <ITcpSocketClient>(); SetupClientReadStream(clientMock, input); var chunkedInput = new ChunkedInputStream(clientMock.Object, null); byte[] actual = new byte[3]; chunkedInput.ReadBytes(actual); actual.Should().Equal(correctValue); }
public void TestReadRawVarint32() { MemoryStream ms = new MemoryStream(); byte[] input; int i; input = new byte[] { 216, 1, 0, 0, 0, 0, 0, }; ms.Write(input, 0, input.Length); ms.Position = 0; i = new ChunkedInputStream(ms).ReadRawVarint32(); ms.Position = 0; Assert.AreEqual(216, i); input = new byte[] { 172, 2, 0xff, 0xff, 0, 0, 0, }; ms.Write(input, 0, input.Length); ms.Position = 0; i = new ChunkedInputStream(ms).ReadRawVarint32(); ms.Position = 0; Assert.AreEqual(300, i); input = new byte[] { 5, 0xff, 0xff, 0xff, 0, 0, 0, }; ms.Write(input, 0, input.Length); ms.Position = 0; i = new ChunkedInputStream(ms).ReadRawVarint32(); ms.Position = 0; Assert.AreEqual(5, i); input = new byte[] { 199, 232, 67, 0xff, 0, 0, 0, }; ms.Write(input, 0, input.Length); ms.Position = 0; i = new ChunkedInputStream(ms).ReadRawVarint32(); ms.Position = 0; Assert.AreEqual(1111111, i); input = new byte[] { 128, 1, 0xff, 0xff, 0, 0, 0, }; ms.Write(input, 0, input.Length); ms.Position = 0; i = new ChunkedInputStream(ms).ReadRawVarint32(); ms.Position = 0; Assert.AreEqual(128, i); }
public void ShouldLogBytes(byte[] input, byte[] correctValue) { var clientMock = new Mock <ITcpSocketClient>(); var loggerMock = new Mock <ILogger>(); loggerMock.Setup(x => x.Trace(It.IsAny <string>(), It.IsAny <object[]>(), It.IsAny <int>(), It.IsAny <int>())) .Callback <string, object[]>((s, o) => _output.WriteLine(s + ((byte[])o[0]).ToHexString(showX: true))); TestHelper.TcpSocketClientSetup.SetupClientReadStream(clientMock, input); var chunkedInput = new ChunkedInputStream(clientMock.Object, new BigEndianTargetBitConverter(), loggerMock.Object); byte[] actual = new byte[3]; chunkedInput.ReadBytes(actual); actual.Should().Equal(correctValue); loggerMock.Verify(x => x.Trace("S: ", It.IsAny <byte[]>(), It.IsAny <int>(), It.IsAny <int>()), Times.Exactly(4)); }
public PackStreamMessageFormatV1(ITcpSocketClient tcpSocketClient, ILogger logger, bool supportBytes = true) { var output = new ChunkedOutputStream(tcpSocketClient, logger); var input = new ChunkedInputStream(tcpSocketClient, logger); if (supportBytes) { Writer = new WriterV1(output); Reader = new ReaderV1(input); } else { Writer = new WriterBytesIncompatibleV1(output); Reader = new ReaderBytesIncompatibleV1(input); } }
public ReaderV1(ChunkedInputStream inputStream) { _inputStream = inputStream; _unpacker = new PackStream.Unpacker(_inputStream); }
public ChunkedInputStreamTest() { _memoryStream = new MemoryStream(); _networkStreamEmulator = new NetworkStreamEmulator(_memoryStream); _chunkedInputStream = new ChunkedInputStream(_networkStreamEmulator); }