@@ -38,16 +38,21 @@ class GRPCClientStateMachineTests: GRPCTestCase {
3838 func writeMessage( _ message: String ) throws -> ByteBuffer {
3939 let buffer = self . allocator. buffer ( string: message)
4040
41- var writer = LengthPrefixedMessageWriter ( compression: . none, allocator: . init( ) )
42- var ( buffer1, buffer2) = try writer. write (
43- buffer: buffer,
44- compressed: false
45- )
46-
47- if var buffer2 = buffer2 {
48- buffer1. writeBuffer ( & buffer2)
41+ var writer = CoalescingLengthPrefixedMessageWriter ( compression: . none, allocator: . init( ) )
42+ writer. append ( buffer: buffer, compress: false , promise: nil )
43+
44+ var result : ByteBuffer ?
45+ while let next = writer. next ( ) {
46+ switch next. 0 {
47+ case let . success( buffer) :
48+ result. setOrWriteImmutableBuffer ( buffer)
49+ case let . failure( error) :
50+ throw error
51+ }
4952 }
50- return buffer1
53+
54+ // We wrote a message, we must get at least one buffer out (or throw).
55+ return result!
5156 }
5257
5358 /// Writes a message into the given `buffer`.
@@ -1119,6 +1124,14 @@ extension GRPCClientStateMachineTests {
11191124class ReadStateTests : GRPCTestCase {
11201125 var allocator = ByteBufferAllocator ( )
11211126
1127+ func writeMessage( _ message: String ) -> ByteBuffer {
1128+ var buffer = self . allocator. buffer ( capacity: 5 + message. utf8. count)
1129+ buffer. writeInteger ( UInt8 ( 0 ) )
1130+ buffer. writeInteger ( UInt32 ( message. utf8. count) )
1131+ buffer. writeBytes ( message. utf8)
1132+ return buffer
1133+ }
1134+
11221135 func testReadWhenNoExpectedMessages( ) {
11231136 var state : ReadState = . notReading
11241137 var buffer = self . allocator. buffer ( capacity: 0 )
@@ -1129,86 +1142,62 @@ class ReadStateTests: GRPCTestCase {
11291142 }
11301143
11311144 func testReadWithLeftOverBytesForOneExpectedMessage( ) throws {
1132- // Write a message into the buffer:
1133- let message = ByteBuffer ( string: " Hello! " )
1134- var writer = LengthPrefixedMessageWriter ( compression: . none)
1135- var buffers = try writer. write ( buffer: message)
1136- XCTAssertNil ( buffers. 1 )
1145+ var buffer = self . writeMessage ( " Hello! " )
11371146 // And some extra junk bytes:
11381147 let bytes : [ UInt8 ] = [ 0x00 ]
1139- buffers . 0 . writeBytes ( bytes)
1148+ buffer . writeBytes ( bytes)
11401149
11411150 var state : ReadState = . one( )
1142- state. readMessages ( & buffers . 0 , maxLength: . max) . assertFailure {
1151+ state. readMessages ( & buffer , maxLength: . max) . assertFailure {
11431152 XCTAssertEqual ( $0, . leftOverBytes)
11441153 }
11451154 state. assertNotReading ( )
11461155 }
11471156
11481157 func testReadTooManyMessagesForOneExpectedMessages( ) throws {
11491158 // Write a message into the buffer twice:
1150- let message = ByteBuffer ( string: " Hello! " )
1151- var writer = LengthPrefixedMessageWriter ( compression: . none)
1152- var buffers1 = try writer. write ( buffer: message)
1153- var buffers2 = try writer. write ( buffer: message)
1154- XCTAssertNil ( buffers1. 1 )
1155- XCTAssertNil ( buffers2. 1 )
1156- buffers1. 0 . writeBuffer ( & buffers2. 0 )
1159+ var buffer1 = self . writeMessage ( " Hello! " )
1160+ let buffer2 = buffer1
1161+ buffer1. writeImmutableBuffer ( buffer2)
11571162
11581163 var state : ReadState = . one( )
1159- state. readMessages ( & buffers1 . 0 , maxLength: . max) . assertFailure {
1164+ state. readMessages ( & buffer1 , maxLength: . max) . assertFailure {
11601165 XCTAssertEqual ( $0, . cardinalityViolation)
11611166 }
11621167 state. assertNotReading ( )
11631168 }
11641169
11651170 func testReadOneMessageForOneExpectedMessages( ) throws {
1166- // Write a message into the buffer twice:
1167- let message = ByteBuffer ( string: " Hello! " )
1168- var writer = LengthPrefixedMessageWriter ( compression: . none)
1169- var ( buffer, other) = try writer. write ( buffer: message)
1170- XCTAssertNil ( other)
1171-
1171+ var buffer = self . writeMessage ( " Hello! " )
11721172 var state : ReadState = . one( )
11731173 state. readMessages ( & buffer, maxLength: . max) . assertSuccess {
1174- XCTAssertEqual ( $0, [ message ] )
1174+ XCTAssertEqual ( $0, [ ByteBuffer ( string : " Hello! " ) ] )
11751175 }
11761176
11771177 // We shouldn't be able to read anymore.
11781178 state. assertNotReading ( )
11791179 }
11801180
11811181 func testReadOneMessageForManyExpectedMessages( ) throws {
1182- // Write a message into the buffer twice:
1183- let message = ByteBuffer ( string: " Hello! " )
1184- var writer = LengthPrefixedMessageWriter ( compression: . none)
1185- var ( buffer, other) = try writer. write ( buffer: message)
1186- XCTAssertNil ( other)
1187-
1182+ var buffer = self . writeMessage ( " Hello! " )
11881183 var state : ReadState = . many( )
11891184 state. readMessages ( & buffer, maxLength: . max) . assertSuccess {
1190- XCTAssertEqual ( $0, [ message ] )
1185+ XCTAssertEqual ( $0, [ ByteBuffer ( string : " Hello! " ) ] )
11911186 }
11921187
11931188 // We should still be able to read.
11941189 state. assertReading ( )
11951190 }
11961191
11971192 func testReadManyMessagesForManyExpectedMessages( ) throws {
1198- // Write a message into the buffer twice:
1199- let message = ByteBuffer ( string: " Hello! " )
1200- var writer = LengthPrefixedMessageWriter ( compression: . none)
1201-
1202- var ( first, _) = try writer. write ( buffer: message)
1203- var ( second, _) = try writer. write ( buffer: message)
1204- var ( third, _) = try writer. write ( buffer: message)
1205-
1206- first. writeBuffer ( & second)
1207- first. writeBuffer ( & third)
1193+ let lengthPrefixed = self . writeMessage ( " Hello! " )
1194+ var buffer = lengthPrefixed
1195+ buffer. writeImmutableBuffer ( lengthPrefixed)
1196+ buffer. writeImmutableBuffer ( lengthPrefixed)
12081197
12091198 var state : ReadState = . many( )
1210- state. readMessages ( & first , maxLength: . max) . assertSuccess {
1211- XCTAssertEqual ( $0, [ message , message , message ] )
1199+ state. readMessages ( & buffer , maxLength: . max) . assertSuccess {
1200+ XCTAssertEqual ( $0, Array ( repeating : ByteBuffer ( string : " Hello! " ) , count : 3 ) )
12121201 }
12131202
12141203 // We should still be able to read.
0 commit comments