public async Task DataFramesWithPaddingShouldBeCorrectlyReceived( bool isServer, int nrFrames, byte numPadding, int bytesToSend) { var inPipe = new BufferedPipe(10 * 1024); var outPipe = new BufferedPipe(10 * 1024); var receiveOk = true; var settings = Settings.Default; settings.MaxFrameSize = 100 * 1024; settings.InitialWindowSize = int.MaxValue; var r = await StreamCreator.CreateConnectionAndStream( isServer, loggerProvider, inPipe, outPipe, localSettings : settings); for (var nrSends = 0; nrSends < nrFrames; nrSends++) { var buf = new byte[1 + bytesToSend + numPadding]; buf[0] = numPadding; byte nr = 0; for (var i = 0; i < bytesToSend; i++) { buf[1 + i] = nr; nr++; if (nr > 123) { nr = 0; } } var fh = new FrameHeader { Type = FrameType.Data, StreamId = 1, Flags = (byte)DataFrameFlags.Padded, Length = buf.Length, }; await inPipe.WriteFrameHeaderWithTimeout(fh); await inPipe.WriteWithTimeout(new ArraySegment <byte>(buf)); } for (var nrSends = 0; nrSends < nrFrames; nrSends++) { var buf1 = new byte[bytesToSend]; await r.stream.ReadAllWithTimeout(new ArraySegment <byte>(buf1)); var expected = 0; for (var j = 0; j < bytesToSend; j++) { if (buf1[j] != expected) { receiveOk = false; } expected++; if (expected > 123) { expected = 0; } } } Assert.True(receiveOk, "Expected to receive correct data"); }
public async Task DataFromDataFramesShouldBeReceived( bool isServer, int[] dataLength) { var inPipe = new BufferedPipe(1024); var outPipe = new BufferedPipe(1024); var res = await StreamCreator.CreateConnectionAndStream( isServer, loggerProvider, inPipe, outPipe); var readTask = res.stream.ReadAllToArrayWithTimeout(); var totalToSend = dataLength.Aggregate(0, (sum, n) => sum + n); byte nr = 0; for (var i = 0; i < dataLength.Length; i++) { var toSend = dataLength[i]; var isEndOfStream = i == (dataLength.Length - 1); var flags = isEndOfStream ? DataFrameFlags.EndOfStream : 0; var fh = new FrameHeader { Type = FrameType.Data, StreamId = 1, Flags = (byte)flags, Length = toSend, }; await inPipe.WriteFrameHeaderWithTimeout(fh); var fdata = new byte[toSend]; for (var j = 0; j < toSend; j++) { fdata[j] = nr; nr++; if (nr > 122) { nr = 0; } } await inPipe.WriteWithTimeout(new ArraySegment <byte>(fdata)); // Wait for a short amount of time between DATA frames if (!isEndOfStream) { await Task.Delay(10); } } var doneTask = await Task.WhenAny( readTask, Task.Delay(ReadableStreamTestExtensions.ReadTimeout)); Assert.True(doneTask == readTask, "Expected read task to complete within timeout"); byte[] receivedData = await readTask; Assert.NotNull(receivedData); Assert.Equal(totalToSend, receivedData.Length); var expected = 0; for (var j = 0; j < totalToSend; j++) { Assert.Equal(expected, receivedData[j]); expected++; if (expected > 122) { expected = 0; } } }