THRIFT-5121: Fix inverted logic when testing message type
Client: Swift
Patch: Alexander Edge
This closes #2036
diff --git a/lib/swift/Sources/TMultiplexedProcessor.swift b/lib/swift/Sources/TMultiplexedProcessor.swift
index 661d4a7..7f40808 100644
--- a/lib/swift/Sources/TMultiplexedProcessor.swift
+++ b/lib/swift/Sources/TMultiplexedProcessor.swift
@@ -58,7 +58,7 @@
public func process(on inProtocol: TProtocol, outProtocol: TProtocol) throws {
let message = try inProtocol.readMessageBegin()
- guard message.1 != .call && message.1 != .oneway else { throw Error.incompatibleMessageType(message.1) }
+ guard message.1 == .call || message.1 == .oneway else { throw Error.incompatibleMessageType(message.1) }
if let separatorIndex = message.0.firstIndex(of: Character(.multiplexSeparator)) {
let serviceName = String(message.0.prefix(upTo: separatorIndex))
let messageName = String(message.0.suffix(from: message.0.index(after: separatorIndex)))
diff --git a/lib/swift/Tests/ThriftTests/TMultiplexedProcessorTests.swift b/lib/swift/Tests/ThriftTests/TMultiplexedProcessorTests.swift
index 190ff13..559ff0b 100644
--- a/lib/swift/Tests/ThriftTests/TMultiplexedProcessorTests.swift
+++ b/lib/swift/Tests/ThriftTests/TMultiplexedProcessorTests.swift
@@ -54,32 +54,32 @@
transport.reset()
}
- func testCallMessageThrowsError() throws {
- try proto.writeMessageBegin(name: "message", type: .call, sequenceID: 1)
+ func testExceptionMessageThrowsError() throws {
+ try proto.writeMessageBegin(name: "message", type: .exception, sequenceID: 1)
try transport.flush()
XCTAssertThrowsError(try sut.process(on: proto, outProtocol: proto)) { error in
guard case MultiplexedProcessor.Error.incompatibleMessageType(let type) = error else {
XCTFail()
return
}
- XCTAssertEqual(type, .call)
+ XCTAssertEqual(type, .exception)
}
}
- func testOneWayMessageThrowsError() throws {
- try proto.writeMessageBegin(name: "message", type: .oneway, sequenceID: 1)
+ func testReplyMessageThrowsError() throws {
+ try proto.writeMessageBegin(name: "message", type: .reply, sequenceID: 1)
try transport.flush()
XCTAssertThrowsError(try sut.process(on: proto, outProtocol: proto)) { error in
guard case MultiplexedProcessor.Error.incompatibleMessageType(let type) = error else {
XCTFail()
return
}
- XCTAssertEqual(type, .oneway)
+ XCTAssertEqual(type, .reply)
}
}
func testMissingDefaultProcessorThrowsError() throws {
- try proto.writeMessageBegin(name: "message", type: .reply, sequenceID: 1)
+ try proto.writeMessageBegin(name: "message", type: .call, sequenceID: 1)
try transport.flush()
XCTAssertThrowsError(try sut.process(on: proto, outProtocol: proto)) { error in
guard case MultiplexedProcessor.Error.missingDefaultProcessor = error else {
@@ -93,7 +93,7 @@
let calculator = Calculator()
let calculatorProcessor = CalculatorProcessor(service: calculator)
sut.register(defaultProcessor: calculatorProcessor)
- try proto.writeMessageBegin(name: "message", type: .reply, sequenceID: 1)
+ try proto.writeMessageBegin(name: "message", type: .call, sequenceID: 1)
try transport.flush()
try sut.process(on: proto, outProtocol: proto)
XCTAssertTrue(calculatorProcessor.processCalled)
@@ -103,14 +103,14 @@
let calculator = Calculator()
let calculatorProcessor = CalculatorProcessor(service: calculator)
sut.register(processor: calculatorProcessor, for: "Calculator")
- try proto.writeMessageBegin(name: "Calculator:message", type: .reply, sequenceID: 1)
+ try proto.writeMessageBegin(name: "Calculator:message", type: .call, sequenceID: 1)
try transport.flush()
try sut.process(on: proto, outProtocol: proto)
XCTAssertTrue(calculatorProcessor.processCalled)
}
func testMissingProcessorForMultiplexedMessageThrowsError() throws {
- try proto.writeMessageBegin(name: "Calculator:message", type: .reply, sequenceID: 1)
+ try proto.writeMessageBegin(name: "Calculator:message", type: .call, sequenceID: 1)
try transport.flush()
XCTAssertThrowsError(try sut.process(on: proto, outProtocol: proto)) { error in
guard case MultiplexedProcessor.Error.missingProcessor(let serviceName) = error else {
@@ -120,4 +120,22 @@
XCTAssertEqual(serviceName, "Calculator")
}
}
+
+ func testCallMessageDoesNotThrowError() throws {
+ let calculator = Calculator()
+ let calculatorProcessor = CalculatorProcessor(service: calculator)
+ sut.register(defaultProcessor: calculatorProcessor)
+ try proto.writeMessageBegin(name: "message", type: .call, sequenceID: 1)
+ try transport.flush()
+ try sut.process(on: proto, outProtocol: proto)
+ }
+
+ func testOneWayMessageDoesNotThrowError() throws {
+ let calculator = Calculator()
+ let calculatorProcessor = CalculatorProcessor(service: calculator)
+ sut.register(defaultProcessor: calculatorProcessor)
+ try proto.writeMessageBegin(name: "message", type: .oneway, sequenceID: 1)
+ try transport.flush()
+ try sut.process(on: proto, outProtocol: proto)
+ }
}