Exemplo n.º 1
0
        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");
        }
Exemplo n.º 2
0
        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;
                }
            }
        }