@@ -38,16 +38,21 @@ class GRPCClientStateMachineTests: GRPCTestCase {
38
38
func writeMessage( _ message: String ) throws -> ByteBuffer {
39
39
let buffer = self . allocator. buffer ( string: message)
40
40
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
+ }
49
52
}
50
- return buffer1
53
+
54
+ // We wrote a message, we must get at least one buffer out (or throw).
55
+ return result!
51
56
}
52
57
53
58
/// Writes a message into the given `buffer`.
@@ -1119,6 +1124,14 @@ extension GRPCClientStateMachineTests {
1119
1124
class ReadStateTests : GRPCTestCase {
1120
1125
var allocator = ByteBufferAllocator ( )
1121
1126
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
+
1122
1135
func testReadWhenNoExpectedMessages( ) {
1123
1136
var state : ReadState = . notReading
1124
1137
var buffer = self . allocator. buffer ( capacity: 0 )
@@ -1129,86 +1142,62 @@ class ReadStateTests: GRPCTestCase {
1129
1142
}
1130
1143
1131
1144
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! " )
1137
1146
// And some extra junk bytes:
1138
1147
let bytes : [ UInt8 ] = [ 0x00 ]
1139
- buffers . 0 . writeBytes ( bytes)
1148
+ buffer . writeBytes ( bytes)
1140
1149
1141
1150
var state : ReadState = . one( )
1142
- state. readMessages ( & buffers . 0 , maxLength: . max) . assertFailure {
1151
+ state. readMessages ( & buffer , maxLength: . max) . assertFailure {
1143
1152
XCTAssertEqual ( $0, . leftOverBytes)
1144
1153
}
1145
1154
state. assertNotReading ( )
1146
1155
}
1147
1156
1148
1157
func testReadTooManyMessagesForOneExpectedMessages( ) throws {
1149
1158
// 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)
1157
1162
1158
1163
var state : ReadState = . one( )
1159
- state. readMessages ( & buffers1 . 0 , maxLength: . max) . assertFailure {
1164
+ state. readMessages ( & buffer1 , maxLength: . max) . assertFailure {
1160
1165
XCTAssertEqual ( $0, . cardinalityViolation)
1161
1166
}
1162
1167
state. assertNotReading ( )
1163
1168
}
1164
1169
1165
1170
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! " )
1172
1172
var state : ReadState = . one( )
1173
1173
state. readMessages ( & buffer, maxLength: . max) . assertSuccess {
1174
- XCTAssertEqual ( $0, [ message ] )
1174
+ XCTAssertEqual ( $0, [ ByteBuffer ( string : " Hello! " ) ] )
1175
1175
}
1176
1176
1177
1177
// We shouldn't be able to read anymore.
1178
1178
state. assertNotReading ( )
1179
1179
}
1180
1180
1181
1181
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! " )
1188
1183
var state : ReadState = . many( )
1189
1184
state. readMessages ( & buffer, maxLength: . max) . assertSuccess {
1190
- XCTAssertEqual ( $0, [ message ] )
1185
+ XCTAssertEqual ( $0, [ ByteBuffer ( string : " Hello! " ) ] )
1191
1186
}
1192
1187
1193
1188
// We should still be able to read.
1194
1189
state. assertReading ( )
1195
1190
}
1196
1191
1197
1192
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)
1208
1197
1209
1198
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 ) )
1212
1201
}
1213
1202
1214
1203
// We should still be able to read.
0 commit comments