public void WriteMoreDataThanCredited_OnlyCreditedDataWritten() { using (Stream transport = new QueueStream()) using (WriteQueue queue = new WriteQueue(transport)) { Task pumpTask = queue.PumpToStreamAsync(); OutputStream output = new OutputStream(1, Framing.Priority.Pri1, queue); FrameReader reader = new FrameReader(transport, false, CancellationToken.None); int dataLength = 0x1FFFF; // More than the 0x10000 default Task writeTask = output.WriteAsync(new byte[dataLength], 0, dataLength); Assert.False(writeTask.IsCompleted); Frame frame = reader.ReadFrameAsync().Result; Assert.False(frame.IsControl); Assert.Equal(0x10000, frame.FrameLength); Task<Frame> nextFrameTask = reader.ReadFrameAsync(); Assert.False(nextFrameTask.IsCompleted); // Free up some space output.AddFlowControlCredit(10); frame = nextFrameTask.Result; Assert.False(frame.IsControl); Assert.Equal(10, frame.FrameLength); nextFrameTask = reader.ReadFrameAsync(); Assert.False(nextFrameTask.IsCompleted); } }