From 3bc6e314bd87eadcd7d2f6e49f03baf56b215512 Mon Sep 17 00:00:00 2001 From: zpencer Date: Fri, 17 Aug 2018 10:09:22 -0700 Subject: [PATCH] gae-interop-testing: increase response verbosity (#4765) for jdk7 include the passing test names in the order they were run for both, include the JUL log output The runner should always print http response --- gae-interop-testing/gae-jdk7/build.gradle | 3 +- .../OkHttpClientInteropServlet.java | 47 ++++++++++++++++++- gae-interop-testing/gae-jdk8/build.gradle | 3 +- .../NettyClientInteropServlet.java | 43 +++++++++++++++++ 4 files changed, 93 insertions(+), 3 deletions(-) diff --git a/gae-interop-testing/gae-jdk7/build.gradle b/gae-interop-testing/gae-jdk7/build.gradle index b6748a92fb..ecba34e5af 100644 --- a/gae-interop-testing/gae-jdk7/build.gradle +++ b/gae-interop-testing/gae-jdk7/build.gradle @@ -140,6 +140,7 @@ task runInteropTestRemote(dependsOn: 'appengineDeploy') { try { def response = client.newCall(interopRequest).execute() result = response.body().string() + project.println(result) if (response.code() == 200) { return } @@ -148,6 +149,6 @@ task runInteropTestRemote(dependsOn: 'appengineDeploy') { logger.log(LogLevel.ERROR, "caught exception. will retry if possible", t) } } - throw new GradleException("Interop test failed:\nresponse: ${result}\nthrowable:${caught}") + throw new GradleException("Interop test failed:\nthrowable:${caught}") } } diff --git a/gae-interop-testing/gae-jdk7/src/main/java/io/grpc/testing/integration/OkHttpClientInteropServlet.java b/gae-interop-testing/gae-jdk7/src/main/java/io/grpc/testing/integration/OkHttpClientInteropServlet.java index b4f55e3b71..b81973f173 100644 --- a/gae-interop-testing/gae-jdk7/src/main/java/io/grpc/testing/integration/OkHttpClientInteropServlet.java +++ b/gae-interop-testing/gae-jdk7/src/main/java/io/grpc/testing/integration/OkHttpClientInteropServlet.java @@ -30,6 +30,12 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.List; +import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.logging.Handler; +import java.util.logging.LogRecord; +import java.util.logging.Logger; +import java.util.logging.SimpleFormatter; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -49,8 +55,45 @@ import org.junit.internal.AssumptionViolatedException; public final class OkHttpClientInteropServlet extends HttpServlet { private static final String INTEROP_TEST_ADDRESS = "grpc-test.sandbox.googleapis.com:443"; + private static final class LogEntryRecorder extends Handler { + private Queue loggedMessages = new ConcurrentLinkedQueue<>(); + + @Override + public void publish(LogRecord logRecord) { + loggedMessages.add(logRecord); + } + + @Override + public void flush() {} + + @Override + public void close() {} + + public String getLogOutput() { + SimpleFormatter formatter = new SimpleFormatter(); + StringBuilder sb = new StringBuilder(); + for (LogRecord loggedMessage : loggedMessages) { + sb.append(formatter.format(loggedMessage)); + } + return sb.toString(); + } + } + @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + LogEntryRecorder handler = new LogEntryRecorder(); + Logger.getLogger("").addHandler(handler); + try { + doGetHelper(req, resp); + } finally { + Logger.getLogger("").removeHandler(handler); + } + resp.getWriter().append("=======================================\n") + .append("Server side java.util.logging messages:\n") + .append(handler.getLogOutput()); + } + + private void doGetHelper(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); PrintWriter writer = resp.getWriter(); writer.println("Test invoked at: "); @@ -91,6 +134,8 @@ public final class OkHttpClientInteropServlet extends HttpServlet { for (Method after : afters) { after.invoke(tester); } + sb.append("================\n"); + sb.append("PASS: Test method: ").append(method).append("\n"); } catch (Exception e) { // The default JUnit4 test runner skips tests with failed assumptions. // We will do the same here. @@ -106,7 +151,7 @@ public final class OkHttpClientInteropServlet extends HttpServlet { } sb.append("================\n"); - sb.append("Test method: ").append(method).append("\n"); + sb.append("FAILED: Test method: ").append(method).append("\n"); failures++; StringWriter stringWriter = new StringWriter(); PrintWriter printWriter = new PrintWriter(stringWriter); diff --git a/gae-interop-testing/gae-jdk8/build.gradle b/gae-interop-testing/gae-jdk8/build.gradle index c232d5d8b2..903cc89146 100644 --- a/gae-interop-testing/gae-jdk8/build.gradle +++ b/gae-interop-testing/gae-jdk8/build.gradle @@ -147,6 +147,7 @@ task runInteropTestRemote(dependsOn: 'appengineDeploy') { try { def response = client.newCall(interopRequest).execute() result = response.body().string() + project.println(result) if (response.code() == 200) { return } @@ -155,6 +156,6 @@ task runInteropTestRemote(dependsOn: 'appengineDeploy') { logger.log(LogLevel.ERROR, "caught exception. will retry if possible", t) } } - throw new GradleException("Interop test failed:\nresponse: ${result}\nthrowable:${caught}") + throw new GradleException("Interop test failed:\nthrowable:${caught}") } } diff --git a/gae-interop-testing/gae-jdk8/src/main/java/io/grpc/testing/integration/NettyClientInteropServlet.java b/gae-interop-testing/gae-jdk8/src/main/java/io/grpc/testing/integration/NettyClientInteropServlet.java index e86eadbf04..b8220cf444 100644 --- a/gae-interop-testing/gae-jdk8/src/main/java/io/grpc/testing/integration/NettyClientInteropServlet.java +++ b/gae-interop-testing/gae-jdk8/src/main/java/io/grpc/testing/integration/NettyClientInteropServlet.java @@ -27,6 +27,12 @@ import java.io.PrintWriter; import java.io.StringWriter; import java.text.SimpleDateFormat; import java.util.Calendar; +import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.logging.Handler; +import java.util.logging.LogRecord; +import java.util.logging.Logger; +import java.util.logging.SimpleFormatter; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -45,8 +51,45 @@ import org.junit.runner.notification.Failure; public final class NettyClientInteropServlet extends HttpServlet { private static final String INTEROP_TEST_ADDRESS = "grpc-test.sandbox.googleapis.com:443"; + private static final class LogEntryRecorder extends Handler { + private Queue loggedMessages = new ConcurrentLinkedQueue<>(); + + @Override + public void publish(LogRecord logRecord) { + loggedMessages.add(logRecord); + } + + @Override + public void flush() {} + + @Override + public void close() {} + + public String getLogOutput() { + SimpleFormatter formatter = new SimpleFormatter(); + StringBuilder sb = new StringBuilder(); + for (LogRecord loggedMessage : loggedMessages) { + sb.append(formatter.format(loggedMessage)); + } + return sb.toString(); + } + } + @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + LogEntryRecorder handler = new LogEntryRecorder(); + Logger.getLogger("").addHandler(handler); + try { + doGetHelper(req, resp); + } finally { + Logger.getLogger("").removeHandler(handler); + } + resp.getWriter().append("=======================================\n") + .append("Server side java.util.logging messages:\n") + .append(handler.getLogOutput()); + } + + private void doGetHelper(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); PrintWriter writer = resp.getWriter(); writer.println("Test invoked at: ");