@@ -104,6 +104,14 @@ fileprivate extension ByteBuffer {
104
104
// MARK: Parse
105
105
106
106
extension RESPTranslatorTests {
107
+ func testParsing_invalidToken( ) {
108
+ var buffer = self . allocator. buffer ( capacity: 128 )
109
+ buffer. writeString ( " !!!! " )
110
+ XCTAssertThrowsError ( try self . parser. parseBytes ( from: & buffer) ) { error in
111
+ XCTAssertEqual ( error as? RESPTranslator . ParsingError , . invalidToken)
112
+ }
113
+ }
114
+
107
115
func testParsing_invalidSymbols( ) {
108
116
let testRESP = " &3 \r \n "
109
117
var buffer = allocator. buffer ( capacity: testRESP. count)
@@ -337,6 +345,33 @@ extension RESPTranslatorTests {
337
345
// MARK: Bulk Strings
338
346
339
347
extension RESPTranslatorTests {
348
+ func testParsing_bulkString_sizeMismatch( ) {
349
+ var buffer = self . allocator. buffer ( capacity: 128 )
350
+ buffer. writeString ( " $2 \r \n too long \r \n " )
351
+ buffer. mimicTokenParse ( )
352
+ XCTAssertThrowsError ( try self . parser. parseBulkString ( from: & buffer) ) { error in
353
+ XCTAssertEqual ( error as? RESPTranslator . ParsingError , . bulkStringSizeMismatch)
354
+ }
355
+ }
356
+
357
+ func testParsing_bulkString_invalidNegativeSize( ) {
358
+ var buffer = self . allocator. buffer ( capacity: 128 )
359
+ buffer. writeString ( " $-4 \r \n what \r \n " )
360
+ buffer. mimicTokenParse ( )
361
+ XCTAssertThrowsError ( try self . parser. parseBulkString ( from: & buffer) ) { error in
362
+ XCTAssertEqual ( error as? RESPTranslator . ParsingError , . invalidBulkStringSize)
363
+ }
364
+ }
365
+
366
+ func testParsing_bulkString_SizeIsNaN( ) {
367
+ var buffer = self . allocator. buffer ( capacity: 128 )
368
+ buffer. writeString ( " $FOO \r \n what \r \n " )
369
+ buffer. mimicTokenParse ( )
370
+ XCTAssertThrowsError ( try self . parser. parseBulkString ( from: & buffer) ) { error in
371
+ XCTAssertEqual ( error as? RESPTranslator . ParsingError , . invalidBulkStringSize)
372
+ }
373
+ }
374
+
340
375
func testParsing_bulkString_missingEndings( ) {
341
376
for message in [ " $6 " , " $6 \r \n " , " $6 \r \n abcdef " , " $0 \r \n " ] {
342
377
XCTAssertNil ( bulkStringParseTest ( inputRESP: message) )
@@ -374,11 +409,11 @@ extension RESPTranslatorTests {
374
409
buffer. writeString ( testString)
375
410
376
411
buffer. mimicTokenParse ( )
377
- let first = parser. parseBulkString ( from: & buffer)
412
+ let first = try ? parser. parseBulkString ( from: & buffer)
378
413
XCTAssertEqual ( buffer. readerIndex, 6 ) // position of the 2nd '$'
379
414
380
415
buffer. mimicTokenParse ( )
381
- let second = parser. parseBulkString ( from: & buffer)
416
+ let second = try ? parser. parseBulkString ( from: & buffer)
382
417
XCTAssertEqual ( buffer. readerIndex, 17 )
383
418
384
419
XCTAssertEqual ( first? . string, " " )
@@ -395,7 +430,7 @@ extension RESPTranslatorTests {
395
430
396
431
buffer. mimicTokenParse ( )
397
432
398
- guard let result = parser. parseBulkString ( from: & buffer) else { return nil }
433
+ guard let result = try ? parser. parseBulkString ( from: & buffer) else { return nil }
399
434
return result
400
435
}
401
436
}
0 commit comments