From 8f0688689f657f6a11634a7a0a8c2100ac0eda88 Mon Sep 17 00:00:00 2001 From: vam Date: Mon, 10 Apr 2017 16:49:10 -0700 Subject: [PATCH 1/3] Don't use `UrlFetchTransport` in App Engine Flex environment https://github.com/GoogleCloudPlatform/google-cloud-java/issues/1492 --- .../google/cloud/HttpTransportOptions.java | 5 +- testing/google-cloud-appengine-java8/pom.xml | 2 +- .../src/main/webapp/WEB-INF/appengine-web.xml | 1 + ...estServlet.java => GaeGcjTestServlet.java} | 2 +- .../cloud/managed/test/GaeInfoServlet.java | 50 +++++++++++++++++++ 5 files changed, 56 insertions(+), 4 deletions(-) rename testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/{GcjFlexTestServlet.java => GaeGcjTestServlet.java} (98%) create mode 100644 testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeInfoServlet.java diff --git a/google-cloud-core/src/main/java/com/google/cloud/HttpTransportOptions.java b/google-cloud-core/src/main/java/com/google/cloud/HttpTransportOptions.java index 970ca555fea6..9308704eb116 100644 --- a/google-cloud-core/src/main/java/com/google/cloud/HttpTransportOptions.java +++ b/google-cloud-core/src/main/java/com/google/cloud/HttpTransportOptions.java @@ -50,8 +50,9 @@ public static class DefaultHttpTransportFactory implements HttpTransportFactory @Override public HttpTransport create() { - // Consider App Engine - if (ServiceOptions.getAppEngineAppId() != null) { + // Consider App Engine Standard + if (System.getProperty("com.google.appengine.runtime.version") != null + && System.getenv("GAE_SERVICE") == null) { try { return new UrlFetchTransport(); } catch (Exception ignore) { diff --git a/testing/google-cloud-appengine-java8/pom.xml b/testing/google-cloud-appengine-java8/pom.xml index 7c4c4a516062..86c92ed46a1e 100644 --- a/testing/google-cloud-appengine-java8/pom.xml +++ b/testing/google-cloud-appengine-java8/pom.xml @@ -41,7 +41,7 @@ org.apache.maven.plugins - 3.3 + 3.5.1 maven-compiler-plugin ${java.source.version} diff --git a/testing/google-cloud-appengine-java8/src/main/webapp/WEB-INF/appengine-web.xml b/testing/google-cloud-appengine-java8/src/main/webapp/WEB-INF/appengine-web.xml index d2eeba3504d2..cbbc789fc60c 100644 --- a/testing/google-cloud-appengine-java8/src/main/webapp/WEB-INF/appengine-web.xml +++ b/testing/google-cloud-appengine-java8/src/main/webapp/WEB-INF/appengine-web.xml @@ -9,4 +9,5 @@ 1 + native diff --git a/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GcjFlexTestServlet.java b/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeGcjTestServlet.java similarity index 98% rename from testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GcjFlexTestServlet.java rename to testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeGcjTestServlet.java index 8026f812fd7b..7f0db5e6a330 100644 --- a/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GcjFlexTestServlet.java +++ b/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeGcjTestServlet.java @@ -29,7 +29,7 @@ import javax.servlet.http.HttpServletResponse; @WebServlet(name = "flex", value = "/test") -public class GcjFlexTestServlet extends HttpServlet { +public class GaeGcjTestServlet extends HttpServlet { private static final long serialVersionUID = 523885428311420041L; diff --git a/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeInfoServlet.java b/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeInfoServlet.java new file mode 100644 index 000000000000..79cd54607675 --- /dev/null +++ b/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeInfoServlet.java @@ -0,0 +1,50 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.cloud.managed.test; + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@WebServlet(name = "hex", value = "/info") +public class GaeInfoServlet extends HttpServlet { + + private static final long serialVersionUID = -3598229312089602597L; + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) + throws ServletException, IOException { + resp.setContentType("text"); + + PrintWriter out = resp.getWriter(); + out.append("\nENVIRONMENT VARIABLES:\n\n"); + + Map envVars = System.getenv(); + for (Map.Entry entry : envVars.entrySet()) { + out.append(entry.getKey()).append("=").append(entry.getValue()).append('\n'); + } + + out.append("\n\nSYSTEM PROPERTIES:\n\n"); + System.getProperties().list(out); + + out.close(); + } +} From 17c524a161a28c94dcab807c2d50154c64c432aa Mon Sep 17 00:00:00 2001 From: vam Date: Tue, 11 Apr 2017 11:13:14 -0700 Subject: [PATCH 2/3] Addressed review comments, added ClassLoader information in the output (Flex and Std use different classloaders). --- .../google-cloud-appengine-flex-compat/pom.xml | 2 +- .../src/main/webapp/WEB-INF/appengine-web.xml | 3 +++ .../cloud/managed/test/GaeGcjTestServlet.java | 2 +- .../cloud/managed/test/GaeInfoServlet.java | 18 +++++++++++++++--- .../cloud/managed/test/GcjTestRunner.java | 4 +++- 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/testing/google-cloud-appengine-flex-compat/pom.xml b/testing/google-cloud-appengine-flex-compat/pom.xml index 7ff67a50a08c..02f2ef9beb71 100644 --- a/testing/google-cloud-appengine-flex-compat/pom.xml +++ b/testing/google-cloud-appengine-flex-compat/pom.xml @@ -47,7 +47,7 @@ org.apache.maven.plugins - 3.3 + 3.5.1 maven-compiler-plugin ${java.source.version} diff --git a/testing/google-cloud-appengine-java8/src/main/webapp/WEB-INF/appengine-web.xml b/testing/google-cloud-appengine-java8/src/main/webapp/WEB-INF/appengine-web.xml index cbbc789fc60c..0010fc434171 100644 --- a/testing/google-cloud-appengine-java8/src/main/webapp/WEB-INF/appengine-web.xml +++ b/testing/google-cloud-appengine-java8/src/main/webapp/WEB-INF/appengine-web.xml @@ -10,4 +10,7 @@ 1 native + + + diff --git a/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeGcjTestServlet.java b/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeGcjTestServlet.java index 7f0db5e6a330..26e4db42ad9f 100644 --- a/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeGcjTestServlet.java +++ b/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeGcjTestServlet.java @@ -28,7 +28,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -@WebServlet(name = "flex", value = "/test") +@WebServlet(value = "/test") public class GaeGcjTestServlet extends HttpServlet { private static final long serialVersionUID = 523885428311420041L; diff --git a/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeInfoServlet.java b/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeInfoServlet.java index 79cd54607675..44d82cc5618e 100644 --- a/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeInfoServlet.java +++ b/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeInfoServlet.java @@ -17,6 +17,8 @@ import java.io.IOException; import java.io.PrintWriter; +import java.net.URL; +import java.net.URLClassLoader; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -24,7 +26,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -@WebServlet(name = "hex", value = "/info") +@WebServlet(value = "/info") public class GaeInfoServlet extends HttpServlet { private static final long serialVersionUID = -3598229312089602597L; @@ -33,10 +35,20 @@ public class GaeInfoServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text"); - PrintWriter out = resp.getWriter(); - out.append("\nENVIRONMENT VARIABLES:\n\n"); + ClassLoader cl = getClass().getClassLoader(); + out.append("CLASS LOADER:\n\n"); + out.append("Name: ").append(cl != null ? cl.getClass().getName() : null).append('\n'); + if(cl instanceof URLClassLoader) { + URLClassLoader urlCl = (URLClassLoader) cl; + out.append("Urls: ").append('\n'); + for(URL url : urlCl.getURLs()) { + out.append(url.toString()).append('\n'); + } + } + + out.append("\nENVIRONMENT VARIABLES:\n\n"); Map envVars = System.getenv(); for (Map.Entry entry : envVars.entrySet()) { out.append(entry.getKey()).append("=").append(entry.getValue()).append('\n'); diff --git a/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GcjTestRunner.java b/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GcjTestRunner.java index ac1210810c0a..de427771e60e 100644 --- a/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GcjTestRunner.java +++ b/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GcjTestRunner.java @@ -43,7 +43,9 @@ public void run() { resultBytes.reset(); } for (Class clazz : classes) { - resultStream.append("\n").append("Running ").append(clazz.getName()).append("\n\n"); + resultStream.append("\n").append("Running ").append(clazz.getName()); + ClassLoader classLoader = clazz.getClassLoader(); + resultStream.append(" (loaded by ").append(classLoader.getClass().getName()).append(")\n\n"); unit.run(clazz); } From 58b7629cedcf405a01fd04534813a4afcaecf910 Mon Sep 17 00:00:00 2001 From: vam Date: Tue, 11 Apr 2017 11:28:06 -0700 Subject: [PATCH 3/3] Reformatted --- .../java/com/google/cloud/managed/test/GaeGcjTestServlet.java | 1 - .../java/com/google/cloud/managed/test/GaeInfoServlet.java | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeGcjTestServlet.java b/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeGcjTestServlet.java index 26e4db42ad9f..46dd58cd5b85 100644 --- a/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeGcjTestServlet.java +++ b/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeGcjTestServlet.java @@ -107,7 +107,6 @@ private String getTestOutput(HttpServletRequest req, HttpServletResponse resp) { + "'>" + link + " to start a new test"; - } } diff --git a/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeInfoServlet.java b/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeInfoServlet.java index 44d82cc5618e..a6f78735cce5 100644 --- a/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeInfoServlet.java +++ b/testing/google-cloud-managed-test/src/main/java/com/google/cloud/managed/test/GaeInfoServlet.java @@ -40,10 +40,10 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) ClassLoader cl = getClass().getClassLoader(); out.append("CLASS LOADER:\n\n"); out.append("Name: ").append(cl != null ? cl.getClass().getName() : null).append('\n'); - if(cl instanceof URLClassLoader) { + if (cl instanceof URLClassLoader) { URLClassLoader urlCl = (URLClassLoader) cl; out.append("Urls: ").append('\n'); - for(URL url : urlCl.getURLs()) { + for (URL url : urlCl.getURLs()) { out.append(url.toString()).append('\n'); } }