2
0
Эх сурвалжийг харах

Add the default user-agent string if customMetadata didn't have one (#845)

Taishi Ikai 5 жил өмнө
parent
commit
c91666e93a

+ 5 - 1
Sources/GRPC/GRPCClientStateMachine.swift

@@ -519,7 +519,6 @@ extension GRPCClientStateMachine.State {
       ":scheme": scheme,
       "content-type": "application/grpc",
       "te": "trailers",  // Used to detect incompatible proxies, part of the gRPC specification.
-      "user-agent": "grpc-swift-nio",  //  TODO: Add a more specific user-agent.
     ]
 
     switch compression {
@@ -549,6 +548,11 @@ extension GRPCClientStateMachine.State {
       return (name.lowercased(), value, indexing)
     })
 
+    // Add default user-agent value, if `customMetadata` didn't contain user-agent
+    if headers["user-agent"].isEmpty {
+      headers.add(name: "user-agent", value: "grpc-swift-nio")  // TODO: Add a more specific user-agent.
+    }
+
     return headers
   }
 

+ 19 - 0
Tests/GRPCTests/GRPCClientStateMachineTests.swift

@@ -716,6 +716,25 @@ extension GRPCClientStateMachineTests {
     }
   }
 
+  func testSendRequestHeadersWithCustomUserAgent() throws {
+    let customMetadata: HPACKHeaders = [
+      "user-agent": "test-user-agent"
+    ]
+
+    var stateMachine = self.makeStateMachine(.clientIdleServerIdle(pendingWriteState: .one(), readArity: .one))
+    stateMachine.sendRequestHeaders(requestHead: .init(
+      method: "POST",
+      scheme: "http",
+      path: "/echo/Get",
+      host: "localhost",
+      deadline: .distantFuture,
+      customMetadata: customMetadata,
+      encoding: .enabled(.init(forRequests: nil, acceptableForResponses: [], decompressionLimit: .ratio(10)))
+    )).assertSuccess { headers in
+      XCTAssertEqual(headers["user-agent"], ["test-user-agent"])
+    }
+  }
+
   func testSendRequestHeadersWithNoCompressionInEitherDirection() throws {
     var stateMachine = self.makeStateMachine(.clientIdleServerIdle(pendingWriteState: .one(), readArity: .one))
     stateMachine.sendRequestHeaders(requestHead: .init(

+ 1 - 0
Tests/GRPCTests/XCTestManifests.swift

@@ -348,6 +348,7 @@ extension GRPCClientStateMachineTests {
         ("testSendRequestHeadersFromClosed", testSendRequestHeadersFromClosed),
         ("testSendRequestHeadersFromIdle", testSendRequestHeadersFromIdle),
         ("testSendRequestHeadersNormalizesCustomMetadata", testSendRequestHeadersNormalizesCustomMetadata),
+        ("testSendRequestHeadersWithCustomUserAgent", testSendRequestHeadersWithCustomUserAgent),
         ("testSendRequestHeadersWithNoCompressionForRequests", testSendRequestHeadersWithNoCompressionForRequests),
         ("testSendRequestHeadersWithNoCompressionForResponses", testSendRequestHeadersWithNoCompressionForResponses),
         ("testSendRequestHeadersWithNoCompressionInEitherDirection", testSendRequestHeadersWithNoCompressionInEitherDirection),