From 3ac22d74b1a5d226fe420db56b2555374a927889 Mon Sep 17 00:00:00 2001 From: Aleksandrs Ulme Date: Wed, 23 Jul 2025 17:02:57 +0800 Subject: [PATCH 1/4] Logging content type on error --- .../uid2/operator/service/ResponseUtil.java | 4 +- .../operator/service/ResponseUtilTest.java | 98 +++++++++++++++++++ 2 files changed, 101 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/uid2/operator/service/ResponseUtil.java b/src/main/java/com/uid2/operator/service/ResponseUtil.java index a1842c275..dbd3feebb 100644 --- a/src/main/java/com/uid2/operator/service/ResponseUtil.java +++ b/src/main/java/com/uid2/operator/service/ResponseUtil.java @@ -131,7 +131,9 @@ public static void LogInfoAndSendResponse(String status, int statusCode, Routing public static void LogWarningAndSendResponse(String status, int statusCode, RoutingContext rc, String message) { String msg = ComposeMessage(status, statusCode, message, new RoutingContextReader(rc), rc.request().remoteAddress().hostAddress()); - LOGGER.warn(msg); + String contentType = rc.request().getHeader(HttpHeaders.CONTENT_TYPE); + String contentTypeStr = " Content-Type: " + (contentType != null ? contentType : "null"); + LOGGER.warn(msg + contentTypeStr); final JsonObject json = Response(status, message); rc.response().setStatusCode(statusCode).putHeader(HttpHeaders.CONTENT_TYPE, "application/json") .end(json.encode()); diff --git a/src/test/java/com/uid2/operator/service/ResponseUtilTest.java b/src/test/java/com/uid2/operator/service/ResponseUtilTest.java index 77f848cc3..37dfb0676 100644 --- a/src/test/java/com/uid2/operator/service/ResponseUtilTest.java +++ b/src/test/java/com/uid2/operator/service/ResponseUtilTest.java @@ -225,4 +225,102 @@ void logsWarningWithRefererNull() { ILoggingEvent loggingEvent = testAppender.list.get(0); assertThat(loggingEvent.getMessage()).isEqualTo(expected); } + + @Test + void logsWarningWithContentType() { + when(request.getHeader(io.vertx.core.http.HttpHeaders.CONTENT_TYPE)).thenReturn("application/json"); + when(rc.request()).thenReturn(request); + + ResponseUtil.LogWarningAndSendResponse("Some error status", 400, rc, "Some error message"); + + String expectedBase = "Response to http request. {" + + "\"errorStatus\":\"Some error status\"," + + "\"contact\":null," + + "\"siteId\":null," + + "\"path\":null," + + "\"statusCode\":400," + + "\"clientAddress\":null," + + "\"message\":\"Some error message\"" + + "}"; + String expectedWithContentType = expectedBase + " Content-Type: application/json"; + + assertThat(testAppender.list).hasSize(1); + ILoggingEvent loggingEvent = testAppender.list.get(0); + assertThat(loggingEvent.getMessage()).isEqualTo(expectedWithContentType); + assertThat(loggingEvent.getLevel()).isEqualTo(Level.WARN); + } + + @Test + void logsWarningWithNullContentType() { + when(request.getHeader(io.vertx.core.http.HttpHeaders.CONTENT_TYPE)).thenReturn(null); + when(rc.request()).thenReturn(request); + + ResponseUtil.LogWarningAndSendResponse("Some error status", 400, rc, "Some error message"); + + String expectedBase = "Response to http request. {" + + "\"errorStatus\":\"Some error status\"," + + "\"contact\":null," + + "\"siteId\":null," + + "\"path\":null," + + "\"statusCode\":400," + + "\"clientAddress\":null," + + "\"message\":\"Some error message\"" + + "}"; + String expectedWithContentType = expectedBase + " Content-Type: null"; + + assertThat(testAppender.list).hasSize(1); + ILoggingEvent loggingEvent = testAppender.list.get(0); + assertThat(loggingEvent.getMessage()).isEqualTo(expectedWithContentType); + assertThat(loggingEvent.getLevel()).isEqualTo(Level.WARN); + } + + @Test + void logsErrorDoesNotIncludeContentType() { + when(request.getHeader(io.vertx.core.http.HttpHeaders.CONTENT_TYPE)).thenReturn("application/json"); + when(rc.request()).thenReturn(request); + + ResponseUtil.LogErrorAndSendResponse("Some error status", 500, rc, "Some error message"); + + String expectedMessage = "Response to http request. {" + + "\"errorStatus\":\"Some error status\"," + + "\"contact\":null," + + "\"siteId\":null," + + "\"path\":null," + + "\"statusCode\":500," + + "\"clientAddress\":null," + + "\"message\":\"Some error message\"" + + "}"; + + assertThat(testAppender.list).hasSize(1); + ILoggingEvent loggingEvent = testAppender.list.get(0); + assertThat(loggingEvent.getMessage()).isEqualTo(expectedMessage); + assertThat(loggingEvent.getLevel()).isEqualTo(Level.ERROR); + // Verify content type is NOT included + assertThat(loggingEvent.getMessage()).doesNotContain("Content-Type:"); + } + + @Test + void logsInfoDoesNotIncludeContentType() { + when(request.getHeader(io.vertx.core.http.HttpHeaders.CONTENT_TYPE)).thenReturn("application/json"); + when(rc.request()).thenReturn(request); + + ResponseUtil.LogInfoAndSendResponse("Some info status", 200, rc, "Some info message"); + + String expectedMessage = "Response to http request. {" + + "\"errorStatus\":\"Some info status\"," + + "\"contact\":null," + + "\"siteId\":null," + + "\"path\":null," + + "\"statusCode\":200," + + "\"clientAddress\":null," + + "\"message\":\"Some info message\"" + + "}"; + + assertThat(testAppender.list).hasSize(1); + ILoggingEvent loggingEvent = testAppender.list.get(0); + assertThat(loggingEvent.getMessage()).isEqualTo(expectedMessage); + assertThat(loggingEvent.getLevel()).isEqualTo(Level.INFO); + // Verify content type is NOT included + assertThat(loggingEvent.getMessage()).doesNotContain("Content-Type:"); + } } From 39f3bfa724c2f965105990093010f902eabdbdc8 Mon Sep 17 00:00:00 2001 From: Aleksandrs Ulme Date: Wed, 23 Jul 2025 17:31:29 +0800 Subject: [PATCH 2/4] Fixing tests --- src/test/java/com/uid2/operator/service/ResponseUtilTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/uid2/operator/service/ResponseUtilTest.java b/src/test/java/com/uid2/operator/service/ResponseUtilTest.java index 37dfb0676..1a2e3b2ed 100644 --- a/src/test/java/com/uid2/operator/service/ResponseUtilTest.java +++ b/src/test/java/com/uid2/operator/service/ResponseUtilTest.java @@ -180,7 +180,7 @@ void logsWarningWithOriginNull() { "\"statusCode\":400," + "\"clientAddress\":null," + "\"message\":\"Some error message\"" + - "}"; + "} Content-Type: null"; ILoggingEvent loggingEvent = testAppender.list.get(0); assertThat(loggingEvent.getMessage()).isEqualTo(expected); } @@ -221,7 +221,7 @@ void logsWarningWithRefererNull() { "\"statusCode\":400," + "\"clientAddress\":null," + "\"message\":\"Some error message\"" + - "}"; + "} Content-Type: null"; ILoggingEvent loggingEvent = testAppender.list.get(0); assertThat(loggingEvent.getMessage()).isEqualTo(expected); } From b1e4550732cef2213ca0d0c13796a4f1eeaf7b60 Mon Sep 17 00:00:00 2001 From: Release Workflow Date: Wed, 23 Jul 2025 09:34:15 +0000 Subject: [PATCH 3/4] [CI Pipeline] Released Snapshot version: 5.56.49-alpha-203-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 38fc6e8af..83f7c4646 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.uid2 uid2-operator - 5.56.48 + 5.56.49-alpha-203-SNAPSHOT UTF-8 From c0c8a2f3f15113d4b854207f33868a7564906c83 Mon Sep 17 00:00:00 2001 From: Vishal Egbert Date: Thu, 24 Jul 2025 00:02:22 +0400 Subject: [PATCH 4/4] Add content type to info log --- .../uid2/operator/service/ResponseUtil.java | 4 ++- .../operator/service/ResponseUtilTest.java | 29 ++----------------- 2 files changed, 5 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/uid2/operator/service/ResponseUtil.java b/src/main/java/com/uid2/operator/service/ResponseUtil.java index dbd3feebb..d79d9514a 100644 --- a/src/main/java/com/uid2/operator/service/ResponseUtil.java +++ b/src/main/java/com/uid2/operator/service/ResponseUtil.java @@ -123,7 +123,9 @@ public static void LogErrorAndSendResponse(String errorStatus, int statusCode, R public static void LogInfoAndSendResponse(String status, int statusCode, RoutingContext rc, String message) { String msg = ComposeMessage(status, statusCode, message, new RoutingContextReader(rc), rc.request().remoteAddress().hostAddress()); - LOGGER.info(msg); + String contentType = rc.request().getHeader(HttpHeaders.CONTENT_TYPE); + String contentTypeStr = " Content-Type: " + (contentType != null ? contentType : "null"); + LOGGER.warn(msg + contentTypeStr); final JsonObject json = Response(status, message); rc.response().setStatusCode(statusCode).putHeader(HttpHeaders.CONTENT_TYPE, "application/json") .end(json.encode()); diff --git a/src/test/java/com/uid2/operator/service/ResponseUtilTest.java b/src/test/java/com/uid2/operator/service/ResponseUtilTest.java index 1a2e3b2ed..930b9c81f 100644 --- a/src/test/java/com/uid2/operator/service/ResponseUtilTest.java +++ b/src/test/java/com/uid2/operator/service/ResponseUtilTest.java @@ -160,7 +160,7 @@ void logsWarningWithOrigin() { "\"clientAddress\":null," + "\"message\":\"Some error message\"," + "\"origin\":\"testOriginHeader\"" + - "}"; + "} Content-Type: null"; ILoggingEvent loggingEvent = testAppender.list.get(0); assertThat(loggingEvent.getMessage()).isEqualTo(expected); } @@ -201,7 +201,7 @@ void logsWarningWithReferer() { "\"clientAddress\":null," + "\"message\":\"Some error message\"," + "\"referer\":\"testRefererHeader\"" + - "}"; + "} Content-Type: null"; ILoggingEvent loggingEvent = testAppender.list.get(0); assertThat(loggingEvent.getMessage()).isEqualTo(expected); } @@ -298,29 +298,4 @@ void logsErrorDoesNotIncludeContentType() { // Verify content type is NOT included assertThat(loggingEvent.getMessage()).doesNotContain("Content-Type:"); } - - @Test - void logsInfoDoesNotIncludeContentType() { - when(request.getHeader(io.vertx.core.http.HttpHeaders.CONTENT_TYPE)).thenReturn("application/json"); - when(rc.request()).thenReturn(request); - - ResponseUtil.LogInfoAndSendResponse("Some info status", 200, rc, "Some info message"); - - String expectedMessage = "Response to http request. {" + - "\"errorStatus\":\"Some info status\"," + - "\"contact\":null," + - "\"siteId\":null," + - "\"path\":null," + - "\"statusCode\":200," + - "\"clientAddress\":null," + - "\"message\":\"Some info message\"" + - "}"; - - assertThat(testAppender.list).hasSize(1); - ILoggingEvent loggingEvent = testAppender.list.get(0); - assertThat(loggingEvent.getMessage()).isEqualTo(expectedMessage); - assertThat(loggingEvent.getLevel()).isEqualTo(Level.INFO); - // Verify content type is NOT included - assertThat(loggingEvent.getMessage()).doesNotContain("Content-Type:"); - } }