Browse Source

Add cause to GRPCStatus.descrpition if it is non-nil (#1357)

Si Beaumont 3 years ago
parent
commit
4c9fc367f9
2 changed files with 38 additions and 3 deletions
  1. 7 2
      Sources/GRPC/GRPCStatus.swift
  2. 31 1
      Tests/GRPCTests/GRPCStatusTests.swift

+ 7 - 2
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)"
     }
   }

+ 31 - 1
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)