diff --git a/Sources/GRPC/GRPCStatus.swift b/Sources/GRPC/GRPCStatus.swift index b6d32af4d..f6baec8f8 100644 --- a/Sources/GRPC/GRPCStatus.swift +++ b/Sources/GRPC/GRPCStatus.swift @@ -124,9 +124,14 @@ extension GRPCStatus: Equatable { extension GRPCStatus: CustomStringConvertible { public var description: String { - if let message = message { + switch (self.message, self.cause) { + case let (.some(message), .some(cause)): + return "\(self.code): \(message), cause: \(cause)" + case let (.some(message), .none): return "\(self.code): \(message)" - } else { + case let (.none, .some(cause)): + return "\(self.code), cause: \(cause)" + case (.none, .none): return "\(self.code)" } } diff --git a/Tests/GRPCTests/GRPCStatusTests.swift b/Tests/GRPCTests/GRPCStatusTests.swift index 3a0252a01..29dd767f1 100644 --- a/Tests/GRPCTests/GRPCStatusTests.swift +++ b/Tests/GRPCTests/GRPCStatusTests.swift @@ -34,7 +34,7 @@ class GRPCStatusTests: GRPCTestCase { ) } - func testStatusDescriptionWithMessage() { + func testStatusDescriptionWithWithMessageWithoutCause() { XCTAssertEqual( "ok (0): OK", String(describing: GRPCStatus(code: .ok, message: "OK")) @@ -51,6 +51,36 @@ class GRPCStatusTests: GRPCTestCase { ) } + func testStatusDescriptionWithMessageWithCause() { + struct UnderlyingError: Error, CustomStringConvertible { + var description: String { "underlying error description" } + } + let cause = UnderlyingError() + XCTAssertEqual( + "internal error (13): unknown error processing request, cause: \(cause.description)", + String(describing: GRPCStatus( + code: .internalError, + message: "unknown error processing request", + cause: cause + )) + ) + } + + func testStatusDescriptionWithoutMessageWithCause() { + struct UnderlyingError: Error, CustomStringConvertible { + var description: String { "underlying error description" } + } + let cause = UnderlyingError() + XCTAssertEqual( + "internal error (13), cause: \(cause.description)", + String(describing: GRPCStatus( + code: .internalError, + message: nil, + cause: cause + )) + ) + } + func testCoWSemanticsModifyingMessage() { let nilStorageID = GRPCStatus.ok.testingOnly_storageObjectIdentifier var status = GRPCStatus(code: .resourceExhausted)