|
@@ -30,78 +30,87 @@ class SwifterTestsWebSocketSession: XCTestCase {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func testParser() {
|
|
func testParser() {
|
|
|
- let session = HttpHandlers.WebSocketSession(TestSocket([]))
|
|
|
|
|
|
|
|
|
|
do {
|
|
do {
|
|
|
- try session.readFrame(TestSocket([0]))
|
|
|
|
|
|
|
+ let session = WebSocketSession(TestSocket([0]))
|
|
|
|
|
+ try session.readFrame()
|
|
|
XCTAssert(false, "Parser should throw an error if socket has not enough data for a frame.")
|
|
XCTAssert(false, "Parser should throw an error if socket has not enough data for a frame.")
|
|
|
} catch {
|
|
} catch {
|
|
|
XCTAssert(true, "Parser should throw an error if socket has not enough data for a frame.")
|
|
XCTAssert(true, "Parser should throw an error if socket has not enough data for a frame.")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
do {
|
|
do {
|
|
|
- try session.readFrame(TestSocket([0b0000_0001, 0b0000_0000, 0, 0, 0, 0]))
|
|
|
|
|
|
|
+ let session = WebSocketSession(TestSocket([0b0000_0001, 0b0000_0000, 0, 0, 0, 0]))
|
|
|
|
|
+ try session.readFrame()
|
|
|
XCTAssert(false, "Parser should not accept unmasked frames.")
|
|
XCTAssert(false, "Parser should not accept unmasked frames.")
|
|
|
- } catch HttpHandlers.WebSocketSession.Error.UnMaskedFrame {
|
|
|
|
|
|
|
+ } catch WebSocketSession.Error.UnMaskedFrame {
|
|
|
XCTAssert(true, "Parse should throw UnMaskedFrame error for unmasked message.")
|
|
XCTAssert(true, "Parse should throw UnMaskedFrame error for unmasked message.")
|
|
|
} catch {
|
|
} catch {
|
|
|
XCTAssert(false, "Parse should throw UnMaskedFrame error for unmasked message.")
|
|
XCTAssert(false, "Parse should throw UnMaskedFrame error for unmasked message.")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
do {
|
|
do {
|
|
|
- let frame = try session.readFrame(TestSocket([0b1000_0001, 0b1000_0000, 0, 0, 0, 0]))
|
|
|
|
|
|
|
+ let session = WebSocketSession(TestSocket([0b1000_0001, 0b1000_0000, 0, 0, 0, 0]))
|
|
|
|
|
+ let frame = try session.readFrame()
|
|
|
XCTAssert(frame.fin, "Parser should detect fin flag set.")
|
|
XCTAssert(frame.fin, "Parser should detect fin flag set.")
|
|
|
} catch {
|
|
} catch {
|
|
|
XCTAssert(false, "Parser should not throw an error for a frame with fin flag set (\(error)")
|
|
XCTAssert(false, "Parser should not throw an error for a frame with fin flag set (\(error)")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
do {
|
|
do {
|
|
|
- let frame = try session.readFrame(TestSocket([0b0000_0000, 0b1000_0000, 0, 0, 0, 0]))
|
|
|
|
|
- XCTAssertEqual(frame.opcode, HttpHandlers.WebSocketSession.OpCode.Continue, "Parser should accept Continue opcode.")
|
|
|
|
|
|
|
+ let session = WebSocketSession(TestSocket([0b0000_0000, 0b1000_0000, 0, 0, 0, 0]))
|
|
|
|
|
+ let frame = try session.readFrame()
|
|
|
|
|
+ XCTAssertEqual(frame.opcode, WebSocketSession.OpCode.Continue, "Parser should accept Continue opcode.")
|
|
|
} catch {
|
|
} catch {
|
|
|
XCTAssertTrue(true, "Parser should accept Continue opcode without any errors.")
|
|
XCTAssertTrue(true, "Parser should accept Continue opcode without any errors.")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
do {
|
|
do {
|
|
|
- let frame = try session.readFrame(TestSocket([0b0000_0001, 0b1000_0000, 0, 0, 0, 0]))
|
|
|
|
|
- XCTAssertEqual(frame.opcode, HttpHandlers.WebSocketSession.OpCode.Text, "Parser should accept Text opcode.")
|
|
|
|
|
|
|
+ let session = WebSocketSession(TestSocket([0b0000_0001, 0b1000_0000, 0, 0, 0, 0]))
|
|
|
|
|
+ let frame = try session.readFrame()
|
|
|
|
|
+ XCTAssertEqual(frame.opcode, WebSocketSession.OpCode.Text, "Parser should accept Text opcode.")
|
|
|
} catch {
|
|
} catch {
|
|
|
XCTAssert(false, "Parser should accept Text opcode without any errors.")
|
|
XCTAssert(false, "Parser should accept Text opcode without any errors.")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
do {
|
|
do {
|
|
|
- let frame = try session.readFrame(TestSocket([0b0000_0010, 0b1000_0000, 0, 0, 0, 0]))
|
|
|
|
|
- XCTAssertEqual(frame.opcode, HttpHandlers.WebSocketSession.OpCode.Binary, "Parser should accept Binary opcode.")
|
|
|
|
|
|
|
+ let session = WebSocketSession(TestSocket([0b0000_0010, 0b1000_0000, 0, 0, 0, 0]))
|
|
|
|
|
+ let frame = try session.readFrame()
|
|
|
|
|
+ XCTAssertEqual(frame.opcode, WebSocketSession.OpCode.Binary, "Parser should accept Binary opcode.")
|
|
|
} catch {
|
|
} catch {
|
|
|
XCTAssert(false, "Parser should accept Binary opcode without any errors.")
|
|
XCTAssert(false, "Parser should accept Binary opcode without any errors.")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
do {
|
|
do {
|
|
|
- let frame = try session.readFrame(TestSocket([0b0000_1000, 0b1000_0000, 0, 0, 0, 0]))
|
|
|
|
|
- XCTAssertEqual(frame.opcode, HttpHandlers.WebSocketSession.OpCode.Close, "Parser should accept Close opcode.")
|
|
|
|
|
|
|
+ let session = WebSocketSession(TestSocket([0b0000_1000, 0b1000_0000, 0, 0, 0, 0]))
|
|
|
|
|
+ let frame = try session.readFrame()
|
|
|
|
|
+ XCTAssertEqual(frame.opcode, WebSocketSession.OpCode.Close, "Parser should accept Close opcode.")
|
|
|
} catch {
|
|
} catch {
|
|
|
XCTAssert(false, "Parser should accept Close opcode without any errors.")
|
|
XCTAssert(false, "Parser should accept Close opcode without any errors.")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
do {
|
|
do {
|
|
|
- let frame = try session.readFrame(TestSocket([0b0000_1001, 0b1000_0000, 0, 0, 0, 0]))
|
|
|
|
|
- XCTAssertEqual(frame.opcode, HttpHandlers.WebSocketSession.OpCode.Ping, "Parser should accept Ping opcode.")
|
|
|
|
|
|
|
+ let session = WebSocketSession(TestSocket([0b0000_1001, 0b1000_0000, 0, 0, 0, 0]))
|
|
|
|
|
+ let frame = try session.readFrame()
|
|
|
|
|
+ XCTAssertEqual(frame.opcode, WebSocketSession.OpCode.Ping, "Parser should accept Ping opcode.")
|
|
|
} catch {
|
|
} catch {
|
|
|
XCTAssert(false, "Parser should accept Ping opcode without any errors.")
|
|
XCTAssert(false, "Parser should accept Ping opcode without any errors.")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
do {
|
|
do {
|
|
|
- let frame = try session.readFrame(TestSocket([0b0000_1010, 0b1000_0000, 0, 0, 0, 0]))
|
|
|
|
|
- XCTAssertEqual(frame.opcode, HttpHandlers.WebSocketSession.OpCode.Pong, "Parser should accept Pong opcode.")
|
|
|
|
|
|
|
+ let session = WebSocketSession(TestSocket([0b0000_1010, 0b1000_0000, 0, 0, 0, 0]))
|
|
|
|
|
+ let frame = try session.readFrame()
|
|
|
|
|
+ XCTAssertEqual(frame.opcode, WebSocketSession.OpCode.Pong, "Parser should accept Pong opcode.")
|
|
|
} catch {
|
|
} catch {
|
|
|
XCTAssert(false, "Parser should accept Pong opcode without any errors.")
|
|
XCTAssert(false, "Parser should accept Pong opcode without any errors.")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
for opcode in [3, 4, 5, 6, 7, 11, 12, 13, 14, 15] {
|
|
for opcode in [3, 4, 5, 6, 7, 11, 12, 13, 14, 15] {
|
|
|
do {
|
|
do {
|
|
|
- try session.readFrame(TestSocket([UInt8(opcode), 0b1000_0000, 0, 0, 0, 0]))
|
|
|
|
|
|
|
+ let session = WebSocketSession(TestSocket([UInt8(opcode), 0b1000_0000, 0, 0, 0, 0]))
|
|
|
|
|
+ try session.readFrame()
|
|
|
XCTAssert(false, "Parse should throw an error for unknown opcode: \(opcode)")
|
|
XCTAssert(false, "Parse should throw an error for unknown opcode: \(opcode)")
|
|
|
- } catch HttpHandlers.WebSocketSession.Error.UnknownOpCode(_) {
|
|
|
|
|
|
|
+ } catch WebSocketSession.Error.UnknownOpCode(_) {
|
|
|
XCTAssert(true, "Parse should throw UnknownOpCode error for unknown opcode.")
|
|
XCTAssert(true, "Parse should throw UnknownOpCode error for unknown opcode.")
|
|
|
} catch {
|
|
} catch {
|
|
|
XCTAssert(false, "Parse should throw UnknownOpCode error for unknown opcode (was \(error)).")
|
|
XCTAssert(false, "Parse should throw UnknownOpCode error for unknown opcode (was \(error)).")
|