@@ -62,6 +62,38 @@ class HTTP2ClientTests: XCTestCase {
62
62
XCTAssertEqual ( response? . version, . http2)
63
63
}
64
64
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
+
65
97
func testConcurrentRequests( ) {
66
98
let bin = HTTPBin ( . http2( compress: false ) )
67
99
defer { XCTAssertNoThrow ( try bin. shutdown ( ) ) }
0 commit comments