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 diff --git a/src/main/java/com/uid2/operator/service/ResponseUtil.java b/src/main/java/com/uid2/operator/service/ResponseUtil.java index a1842c275..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()); @@ -131,7 +133,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..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); } @@ -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); } @@ -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); } @@ -221,8 +221,81 @@ void logsWarningWithRefererNull() { "\"statusCode\":400," + "\"clientAddress\":null," + "\"message\":\"Some error message\"" + - "}"; + "} Content-Type: null"; 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:"); + } }