Skip to content

Commit e61464b

Browse files
Nishad DeokarNishad Deokar
authored andcommitted
Add test that flushable streams are not starved
1 parent e96e957 commit e61464b

1 file changed

Lines changed: 20 additions & 0 deletions

File tree

Tests/NIOHTTP2Tests/OutboundFlowControlBufferTests.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,26 @@ class OutboundFlowControlBufferTests: XCTestCase {
393393
XCTAssertNil(self.buffer.nextFlushedWritableFrame())
394394
}
395395

396+
func testFlushableStreamsAreNotStarved() {
397+
// Three streams with three frames each.
398+
let streamIDs: [HTTP2StreamID] = [1, 3, 5]
399+
self.buffer.maxFrameSize = 5
400+
401+
for streamID in streamIDs {
402+
self.buffer.streamCreated(streamID, initialWindowSize: 15)
403+
let frame = self.createDataFrame(streamID, byteBufferSize: 15)
404+
XCTAssertNoThrow(try self.buffer.processOutboundFrame(frame, promise: nil).assertNothing())
405+
}
406+
self.buffer.flushReceived()
407+
408+
let served = self.receivedFrames().map { $0.streamID }
409+
410+
// Every stream must be served once per round so that none can be starved.
411+
let firstRound = Array(served.prefix(streamIDs.count))
412+
XCTAssertEqual(Set(firstRound), Set(streamIDs))
413+
XCTAssertEqual(served, firstRound + firstRound + firstRound)
414+
}
415+
396416
func testRejectsPrioritySelfDependency() {
397417
XCTAssertThrowsError(
398418
try self.buffer.priorityUpdate(

0 commit comments

Comments
 (0)