@@ -62,6 +62,38 @@ class HTTP2ClientTests: XCTestCase {
6262 XCTAssertEqual ( response? . version, . http2)
6363 }
6464
65+ func testStreamRequestBodyWithoutKnowledgeAboutLength( ) {
66+ let bin = HTTPBin ( . http2( compress: false ) ) { _ in HTTPEchoHandler ( ) }
67+ defer { XCTAssertNoThrow ( try bin. shutdown ( ) ) }
68+ let client = self . makeDefaultHTTPClient ( )
69+ defer { XCTAssertNoThrow ( try client. syncShutdown ( ) ) }
70+ var response : HTTPClient . Response ?
71+ let body = HTTPClient . Body. stream ( length: nil ) { writer in
72+ writer. write ( . byteBuffer( ByteBuffer ( integer: UInt64 ( 0 ) ) ) ) . flatMap {
73+ writer. write ( . byteBuffer( ByteBuffer ( integer: UInt64 ( 0 ) ) ) )
74+ }
75+ }
76+ XCTAssertNoThrow ( response = try client. post ( url: " https://localhost: \( bin. port) " , body: body) . wait ( ) )
77+
78+ XCTAssertEqual ( . ok, response? . status)
79+ XCTAssertEqual ( response? . version, . http2)
80+ }
81+
82+ func testStreamRequestBodyWithFalseKnowledgeAboutLength( ) {
83+ let bin = HTTPBin ( . http2( compress: false ) ) { _ in HTTPEchoHandler ( ) }
84+ defer { XCTAssertNoThrow ( try bin. shutdown ( ) ) }
85+ let client = self . makeDefaultHTTPClient ( )
86+ defer { XCTAssertNoThrow ( try client. syncShutdown ( ) ) }
87+ let body = HTTPClient . Body. stream ( length: 12 ) { writer in
88+ writer. write ( . byteBuffer( ByteBuffer ( integer: UInt64 ( 0 ) ) ) ) . flatMap {
89+ writer. write ( . byteBuffer( ByteBuffer ( integer: UInt64 ( 0 ) ) ) )
90+ }
91+ }
92+ XCTAssertThrowsError ( try client. post ( url: " https://localhost: \( bin. port) " , body: body) . wait ( ) ) {
93+ XCTAssertEqual ( $0 as? HTTPClientError , . bodyLengthMismatch)
94+ }
95+ }
96+
6597 func testConcurrentRequests( ) {
6698 let bin = HTTPBin ( . http2( compress: false ) )
6799 defer { XCTAssertNoThrow ( try bin. shutdown ( ) ) }
0 commit comments