chia7712 commented on code in PR #22988:
URL: https://github.com/apache/kafka/pull/22988#discussion_r3820350966


##########
server/src/test/java/org/apache/kafka/network/RequestConvertToJsonTest.java:
##########
@@ -127,4 +146,93 @@ public void testClientInfoNode() {
         JsonNode actualNode = RequestConvertToJson.clientInfoNode(clientInfo);
         assertEquals(expectedNode, actualNode);
     }
+
+    @Test
+    public void testRequestHeaderNode() {
+        AlterPartitionRequest alterIsrRequest = new AlterPartitionRequest(new 
AlterPartitionRequestData(), ApiKeys.ALTER_PARTITION.latestVersion());
+        Request req = request(alterIsrRequest);
+        RequestHeader header = req.header();
+
+        ObjectNode expectedNode = (ObjectNode) 
RequestHeaderDataJsonConverter.write(header.data(), header.headerVersion(), 
false);
+        expectedNode.set("requestApiKeyName", new 
TextNode(header.apiKey().toString()));
+
+        JsonNode actualNode = RequestConvertToJson.requestHeaderNode(header);
+
+        assertEquals(expectedNode, actualNode);
+    }
+
+    @Test
+    public void testRequestDesc() {
+        AlterPartitionRequest alterIsrRequest = new AlterPartitionRequest(new 
AlterPartitionRequestData(), ApiKeys.ALTER_PARTITION.latestVersion());
+        Request req = request(alterIsrRequest);
+
+        ObjectNode expectedNode = new ObjectNode(JsonNodeFactory.instance);
+        expectedNode.set("isForwarded", req.isForwarded() ? BooleanNode.TRUE : 
BooleanNode.FALSE);
+        expectedNode.set("requestHeader", 
RequestConvertToJson.requestHeaderNode(req.header()));
+        expectedNode.set("request", 
req.requestLog().orElse(NullNode.getInstance()));
+
+        JsonNode actualNode = RequestConvertToJson.requestDesc(req.header(), 
req.requestLog(), req.isForwarded());
+
+        assertEquals(expectedNode, actualNode);
+    }
+
+    @Test
+    public void testRequestDescMetrics() {
+        AlterPartitionRequest alterIsrRequest = new AlterPartitionRequest(new 
AlterPartitionRequestData(), ApiKeys.ALTER_PARTITION.latestVersion());
+        Request req = request(alterIsrRequest);
+        NetworkSend send = new NetworkSend(req.context().connectionId, 
alterIsrRequest.toSend(req.header()));
+        JsonNode headerLog = 
RequestConvertToJson.requestHeaderNode(req.header());
+        SendResponse res = new SendResponse(req, send, Optional.of(headerLog));
+
+        int totalTimeMs = 1;
+        int requestQueueTimeMs = 2;
+        int apiLocalTimeMs = 3;
+        int apiRemoteTimeMs = 4;
+        int apiThrottleTimeMs = 5;
+        int responseQueueTimeMs = 6;
+        int responseSendTimeMs = 7;
+        int temporaryMemoryBytes = 8;
+        int messageConversionsTimeMs = 9;
+
+        ObjectNode expectedNode = (ObjectNode) 
RequestConvertToJson.requestDesc(req.header(), req.requestLog(), 
req.isForwarded());
+        expectedNode.set("response", 
res.responseLog().orElse(NullNode.getInstance()));

Review Comment:
   I prefer to verify the fields one-by-one instead of creating a whole JSON 
object. It looks a bit like a copy-paste from production code😆 
   
   ```java
   assertEquals(false, actualNode.get("isForwarded").asBoolean());
           assertEquals("connection-id", actualNode.get("connection").asText());
           assertEquals(1.0, actualNode.get("totalTimeMs").asDouble());
           assertEquals(2.0, actualNode.get("requestQueueTimeMs").asDouble());
           assertEquals(3.0, actualNode.get("localTimeMs").asDouble());
           assertEquals(4.0, actualNode.get("remoteTimeMs").asDouble());
   ```



##########
server/src/test/java/org/apache/kafka/network/RequestConvertToJsonTest.java:
##########
@@ -127,4 +146,93 @@ public void testClientInfoNode() {
         JsonNode actualNode = RequestConvertToJson.clientInfoNode(clientInfo);
         assertEquals(expectedNode, actualNode);
     }
+
+    @Test
+    public void testRequestHeaderNode() {
+        AlterPartitionRequest alterIsrRequest = new AlterPartitionRequest(new 
AlterPartitionRequestData(), ApiKeys.ALTER_PARTITION.latestVersion());
+        Request req = request(alterIsrRequest);
+        RequestHeader header = req.header();
+
+        ObjectNode expectedNode = (ObjectNode) 
RequestHeaderDataJsonConverter.write(header.data(), header.headerVersion(), 
false);
+        expectedNode.set("requestApiKeyName", new 
TextNode(header.apiKey().toString()));
+
+        JsonNode actualNode = RequestConvertToJson.requestHeaderNode(header);
+
+        assertEquals(expectedNode, actualNode);
+    }
+
+    @Test
+    public void testRequestDesc() {
+        AlterPartitionRequest alterIsrRequest = new AlterPartitionRequest(new 
AlterPartitionRequestData(), ApiKeys.ALTER_PARTITION.latestVersion());
+        Request req = request(alterIsrRequest);
+
+        ObjectNode expectedNode = new ObjectNode(JsonNodeFactory.instance);
+        expectedNode.set("isForwarded", req.isForwarded() ? BooleanNode.TRUE : 
BooleanNode.FALSE);
+        expectedNode.set("requestHeader", 
RequestConvertToJson.requestHeaderNode(req.header()));
+        expectedNode.set("request", 
req.requestLog().orElse(NullNode.getInstance()));
+
+        JsonNode actualNode = RequestConvertToJson.requestDesc(req.header(), 
req.requestLog(), req.isForwarded());
+
+        assertEquals(expectedNode, actualNode);
+    }
+
+    @Test
+    public void testRequestDescMetrics() {
+        AlterPartitionRequest alterIsrRequest = new AlterPartitionRequest(new 
AlterPartitionRequestData(), ApiKeys.ALTER_PARTITION.latestVersion());
+        Request req = request(alterIsrRequest);
+        NetworkSend send = new NetworkSend(req.context().connectionId, 
alterIsrRequest.toSend(req.header()));
+        JsonNode headerLog = 
RequestConvertToJson.requestHeaderNode(req.header());
+        SendResponse res = new SendResponse(req, send, Optional.of(headerLog));
+
+        int totalTimeMs = 1;
+        int requestQueueTimeMs = 2;
+        int apiLocalTimeMs = 3;
+        int apiRemoteTimeMs = 4;
+        int apiThrottleTimeMs = 5;
+        int responseQueueTimeMs = 6;
+        int responseSendTimeMs = 7;
+        int temporaryMemoryBytes = 8;
+        int messageConversionsTimeMs = 9;
+
+        ObjectNode expectedNode = (ObjectNode) 
RequestConvertToJson.requestDesc(req.header(), req.requestLog(), 
req.isForwarded());
+        expectedNode.set("response", 
res.responseLog().orElse(NullNode.getInstance()));
+        expectedNode.set("connection", new 
TextNode(req.context().connectionId));
+        expectedNode.set("totalTimeMs", new DoubleNode(totalTimeMs));
+        expectedNode.set("requestQueueTimeMs", new 
DoubleNode(requestQueueTimeMs));
+        expectedNode.set("localTimeMs", new DoubleNode(apiLocalTimeMs));
+        expectedNode.set("remoteTimeMs", new DoubleNode(apiRemoteTimeMs));
+        expectedNode.set("throttleTimeMs", new LongNode(apiThrottleTimeMs));
+        expectedNode.set("responseQueueTimeMs", new 
DoubleNode(responseQueueTimeMs));
+        expectedNode.set("sendTimeMs", new DoubleNode(responseSendTimeMs));
+        expectedNode.set("securityProtocol", new 
TextNode(req.context().securityProtocol.name));
+        expectedNode.set("principal", new 
TextNode(req.session().principal.toString()));
+        expectedNode.set("listener", new 
TextNode(req.context().listenerName.value()));
+        expectedNode.set("clientInformation", 
RequestConvertToJson.clientInfoNode(req.context().clientInformation));
+        expectedNode.set("temporaryMemoryBytes", new 
LongNode(temporaryMemoryBytes));

Review Comment:
   We could have a follow-up to include a test for the following behavior
   ```java
           if (temporaryMemoryBytes > 0) {
               node.set("temporaryMemoryBytes", new 
LongNode(temporaryMemoryBytes));
           }
           if (messageConversionsTimeMs > 0) {
               node.set("messageConversionsTime", new 
DoubleNode(messageConversionsTimeMs));
           }
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to