diff options
author | Raymond Auge | 2018-01-23 03:16:47 +0000 |
---|---|---|
committer | Raymond Auge | 2018-03-28 14:42:21 +0000 |
commit | dd71e57421387cdce2073e30af97affe9aa6d9f2 (patch) | |
tree | aac1fca924925e5acef7e30c6f6f34fe50657f77 | |
parent | c6ff81fda5d397d98cba06f15f1e4b1db55b694d (diff) | |
download | rt.equinox.bundles-dd71e57421387cdce2073e30af97affe9aa6d9f2.tar.gz rt.equinox.bundles-dd71e57421387cdce2073e30af97affe9aa6d9f2.tar.xz rt.equinox.bundles-dd71e57421387cdce2073e30af97affe9aa6d9f2.zip |
Bug 510038 - [http] Tests failing on linux.gtk.x86_64 for M-buildsI20180411-0530I20180410-2000
Signed-off-by: Raymond Auge <raymond.auge@liferay.com>
9 files changed, 140 insertions, 20 deletions
diff --git a/bundles/org.eclipse.equinox.http.jetty/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.http.jetty/META-INF/MANIFEST.MF index 20ec86b98..556c13d8d 100644 --- a/bundles/org.eclipse.equinox.http.jetty/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.equinox.http.jetty/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: %bundleName Bundle-Vendor: %providerName Bundle-Localization: plugin Bundle-SymbolicName: org.eclipse.equinox.http.jetty -Bundle-Version: 3.5.0.qualifier +Bundle-Version: 3.6.0.qualifier Bundle-Activator: org.eclipse.equinox.http.jetty.internal.Activator Import-Package: javax.servlet;version="[2.6.0,4.0.0)", javax.servlet.http;version="[2.6.0,4.0.0)", diff --git a/bundles/org.eclipse.equinox.http.jetty/pom.xml b/bundles/org.eclipse.equinox.http.jetty/pom.xml index ace398f10..5ecf1b19e 100644 --- a/bundles/org.eclipse.equinox.http.jetty/pom.xml +++ b/bundles/org.eclipse.equinox.http.jetty/pom.xml @@ -21,6 +21,6 @@ </parent> <groupId>org.eclipse.equinox</groupId> <artifactId>org.eclipse.equinox.http.jetty</artifactId> - <version>3.5.0-SNAPSHOT</version> + <version>3.6.0-SNAPSHOT</version> <packaging>eclipse-plugin</packaging> </project> diff --git a/bundles/org.eclipse.equinox.http.jetty/src/org/eclipse/equinox/http/jetty/internal/HttpServerManager.java b/bundles/org.eclipse.equinox.http.jetty/src/org/eclipse/equinox/http/jetty/internal/HttpServerManager.java index c830b3045..3d4e58f8a 100644 --- a/bundles/org.eclipse.equinox.http.jetty/src/org/eclipse/equinox/http/jetty/internal/HttpServerManager.java +++ b/bundles/org.eclipse.equinox.http.jetty/src/org/eclipse/equinox/http/jetty/internal/HttpServerManager.java @@ -122,18 +122,25 @@ public class HttpServerManager implements ManagedServiceFactory { if (port == -1) port = httpConnector.getPort(); holder.setInitParameter(JettyConstants.HTTP_PORT, Integer.toString(port)); + String host = httpConnector.getHost(); + if (host != null) + holder.setInitParameter(JettyConstants.HTTP_HOST, host); } if (httpsConnector != null) { int port = httpsConnector.getLocalPort(); if (port == -1) port = httpsConnector.getPort(); holder.setInitParameter(JettyConstants.HTTPS_PORT, Integer.toString(port)); + String host = httpConnector.getHost(); + if (host != null) + holder.setInitParameter(JettyConstants.HTTPS_HOST, host); } String otherInfo = Details.getString(dictionary, JettyConstants.OTHER_INFO, null); if (otherInfo != null) holder.setInitParameter(JettyConstants.OTHER_INFO, otherInfo); ServletContextHandler httpContext = createHttpContext(dictionary); + holder.setInitParameter(JettyConstants.CONTEXT_PATH, httpContext.getContextPath()); httpContext.addServlet(holder, "/*"); //$NON-NLS-1$ server.setHandler(httpContext); diff --git a/bundles/org.eclipse.equinox.http.servlet.tests/pom.xml b/bundles/org.eclipse.equinox.http.servlet.tests/pom.xml index 7810450a7..20ecdc8c3 100644 --- a/bundles/org.eclipse.equinox.http.servlet.tests/pom.xml +++ b/bundles/org.eclipse.equinox.http.servlet.tests/pom.xml @@ -46,7 +46,7 @@ <requirement> <type>eclipse-plugin</type> <id>org.eclipse.equinox.http.jetty</id> - <versionRange>3.4.0</versionRange> + <versionRange>3.6.0</versionRange> </requirement> </extraRequirements> </dependency-resolution> diff --git a/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/testbase/BaseTest.java b/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/testbase/BaseTest.java index 9aaabd18c..8e4fff918 100644 --- a/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/testbase/BaseTest.java +++ b/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/testbase/BaseTest.java @@ -14,9 +14,15 @@ package org.eclipse.equinox.http.servlet.testbase; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; +import java.lang.reflect.Array; +import java.lang.reflect.ParameterizedType; +import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; @@ -47,6 +53,10 @@ import org.osgi.framework.ServiceReference; import org.osgi.framework.ServiceRegistration; import org.osgi.service.http.HttpService; import org.osgi.service.http.context.ServletContextHelper; +import org.osgi.service.http.runtime.HttpServiceRuntime; +import org.osgi.service.http.runtime.HttpServiceRuntimeConstants; +import org.osgi.service.http.whiteboard.HttpWhiteboardConstants; +import org.osgi.util.tracker.ServiceTracker; public class BaseTest { @@ -57,15 +67,15 @@ public class BaseTest { System.setProperty("org.eclipse.jetty.server.LEVEL", "OFF"); System.setProperty("org.eclipse.jetty.servlet.LEVEL", "OFF"); - System.setProperty("org.osgi.service.http.port", "8090"); + System.setProperty("org.osgi.service.http.port", "0"); BundleContext bundleContext = getBundleContext(); installer = new BundleInstaller(TEST_BUNDLES_BINARY_DIRECTORY, bundleContext); advisor = new BundleAdvisor(bundleContext); - String port = getPort(); - String contextPath = getContextPath(); - requestAdvisor = new ServletRequestAdvisor(port, contextPath); startBundles(); stopJetty(); + runtimeTracker = new ServiceTracker<>(bundleContext, HttpServiceRuntime.class, null); + runtimeTracker.open(); + runtimeTracker.waitForService(100); startJetty(); } @@ -74,6 +84,7 @@ public class BaseTest { for (ServiceRegistration<? extends Object> serviceRegistration : registrations) { serviceRegistration.unregister(); } + runtimeTracker.close(); stopJetty(); stopBundles(); requestAdvisor = null; @@ -146,6 +157,29 @@ public class BaseTest { return value; } + protected List<String> getStringPlus(String key, ServiceReference<?> ref) { + Object property = ref.getProperty(key); + if (String.class.isInstance(property)) { + return Collections.singletonList((String)property); + } + else if (String[].class.isInstance(property)) { + return Arrays.asList((String[])property); + } + else if (Collection.class.isInstance(property)) { + List<String> list = new ArrayList<String>(); + for (@SuppressWarnings("rawtypes") + Iterator i = ((Collection)property).iterator(); i.hasNext();) { + + Object o = i.next(); + if (String.class.isInstance(o)) { + list.add((String)o); + } + } + return list; + } + return Collections.emptyList(); + } + protected Bundle installBundle(String bundle) throws BundleException { return installer.installBundle(bundle); } @@ -156,8 +190,24 @@ public class BaseTest { } } - protected void startJetty() throws BundleException { + protected void startJetty() throws Exception { advisor.startBundle(EQUINOX_JETTY_BUNDLE); + ServiceReference<HttpServiceRuntime> runtimeReference = runtimeTracker.getServiceReference(); + List<String> endpoints = getStringPlus(HttpServiceRuntimeConstants.HTTP_SERVICE_ENDPOINT, runtimeReference); + String port = getPort(); + if (port.equals("0") && !endpoints.isEmpty()) { + for (String endpoint : endpoints) { + if (endpoint.startsWith("http://")) { + port = String.valueOf(new URL(endpoint).getPort()); + break; + } + } + if (port.equals("-1")) { + port = "80"; + } + } + String contextPath = getContextPath(); + requestAdvisor = new ServletRequestAdvisor(port, contextPath); } protected void stopBundles() throws BundleException { @@ -205,6 +255,7 @@ public class BaseTest { protected BundleAdvisor advisor; protected ServletRequestAdvisor requestAdvisor; protected final Collection<ServiceRegistration<? extends Object>> registrations = new ArrayList<ServiceRegistration<? extends Object>>(); + protected ServiceTracker<HttpServiceRuntime, HttpServiceRuntime> runtimeTracker; protected static class TestFilter implements Filter { AtomicInteger called = new AtomicInteger(0); diff --git a/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/ServletTest.java b/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/ServletTest.java index 8e29a6f57..881eb7bd7 100644 --- a/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/ServletTest.java +++ b/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/ServletTest.java @@ -3214,7 +3214,7 @@ public class ServletTest extends BaseTest { props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, "/SB"); registrations.add(getBundleContext().registerService(Servlet.class, servletB, props)); - requestAdvisor.request("foo/a/SA"); + requestAdvisor.request("a/SA"); Assert.assertEquals("/foo/a", path.get()); } @@ -3284,7 +3284,7 @@ public class ServletTest extends BaseTest { props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, "/SB"); registrations.add(getBundleContext().registerService(Servlet.class, servletB, props)); - requestAdvisor.request("foo/a/SA"); + requestAdvisor.request("a/SA"); Assert.assertEquals("/foo/a", path.get()); } diff --git a/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/Activator.java b/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/Activator.java index 301b1fe0f..9e7fc21ee 100644 --- a/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/Activator.java +++ b/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/Activator.java @@ -132,7 +132,7 @@ public class Activator if (httpServiceEndpointObj == null) { String[] httpServiceEndpoints = getHttpServiceEndpoints( - servletContext, servletConfig.getServletName()); + serviceProperties, servletContext, servletConfig.getServletName()); serviceProperties.put( HttpServiceRuntimeConstants.HTTP_SERVICE_ENDPOINT, @@ -200,7 +200,45 @@ public class Activator } private String[] getHttpServiceEndpoints( - ServletContext servletContext, String servletName) { + Dictionary<String, Object> serviceProperties, ServletContext servletContext, String servletName) { + + List<String> httpServiceEndpoints = new ArrayList<String>(); + + String contextPath = (String)serviceProperties.get(Const.CONTEXT_PATH); + + if ((contextPath != null)) { + String httpHost = (String)serviceProperties.get(Const.HTTP_HOST); + String httpPort = (String)serviceProperties.get(Const.HTTP_PORT); + + if (httpPort != null) { + if (httpHost == null) { + String endpoint = assembleEndpoint(Const.HTTP, Const.LOCALHOST, httpPort, contextPath); + httpServiceEndpoints.add(endpoint); + } + else { + String endpoint = assembleEndpoint(Const.HTTP, httpHost, httpPort, contextPath); + httpServiceEndpoints.add(endpoint); + } + } + + String httpsHost = (String)serviceProperties.get(Const.HTTPS_HOST); + String httpsPort = (String)serviceProperties.get(Const.HTTPS_PORT); + + if (httpsPort != null) { + if (httpsHost == null) { + String endpoint = assembleEndpoint(Const.HTTPS, Const.LOCALHOST, httpsPort, contextPath); + httpServiceEndpoints.add(endpoint); + } + else { + String endpoint = assembleEndpoint(Const.HTTPS, httpHost, httpsPort, contextPath); + httpServiceEndpoints.add(endpoint); + } + } + + if (!httpServiceEndpoints.isEmpty()) { + return httpServiceEndpoints.toArray(new String[0]); + } + } int majorVersion = servletContext.getMajorVersion(); @@ -214,7 +252,7 @@ public class Activator return new String[0]; } - String contextPath = servletContext.getContextPath(); + contextPath = servletContext.getContextPath(); ServletRegistration servletRegistration = null; try { @@ -235,8 +273,6 @@ public class Activator Collection<String> mappings = servletRegistration.getMappings(); - List<String> httpServiceEndpoints = new ArrayList<String>(); - for (String mapping : mappings) { if (mapping.indexOf('/') == 0) { if (mapping.charAt(mapping.length() - 1) == '*') { @@ -253,8 +289,21 @@ public class Activator } } - return httpServiceEndpoints.toArray( - new String[httpServiceEndpoints.size()]); + return httpServiceEndpoints.toArray(new String[0]); + } + + private String assembleEndpoint(String protocol, String host, String port, String contextPath) { + StringBuilder sb = new StringBuilder(); + sb.append(protocol); + sb.append(Const.PROTOCOL); + sb.append(host); + sb.append(':'); + sb.append(port); + sb.append(contextPath); + if (sb.charAt(sb.length() - 1) != '/') { + sb.append('/'); + } + return sb.toString(); } private void processRegistrations() { diff --git a/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/context/ContextController.java b/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/context/ContextController.java index e286bca8c..7ba714be9 100644 --- a/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/context/ContextController.java +++ b/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/context/ContextController.java @@ -826,9 +826,15 @@ public class ContextController { String defaultEndpoint = endpoints.get(0); - if ((defaultEndpoint.length() > 0) && defaultEndpoint.endsWith(Const.SLASH)) { - defaultEndpoint = defaultEndpoint.substring( - 0, defaultEndpoint.length() - 1); + if (defaultEndpoint.length() > 0) { + int protocol = defaultEndpoint.indexOf(Const.PROTOCOL); + if (protocol > -1) { + defaultEndpoint = defaultEndpoint.substring(protocol + 3); + } + int slash = defaultEndpoint.indexOf(Const.SLASH); + if (defaultEndpoint.endsWith(Const.SLASH)) { + defaultEndpoint = defaultEndpoint.substring(slash, defaultEndpoint.length() - 1); + } } return defaultEndpoint + contextPath; diff --git a/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/util/Const.java b/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/util/Const.java index d577c056f..6e9e1306b 100644 --- a/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/util/Const.java +++ b/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/util/Const.java @@ -19,14 +19,21 @@ public class Const { public static final String AMP = "&"; //$NON-NLS-1$ public static final String BLANK = ""; //$NON-NLS-1$ public static final String CLOSE_PAREN = ")"; //$NON-NLS-1$ + public static final String CONTEXT_PATH = "context.path"; //$NON-NLS-1$ public static final String DOT = "."; //$NON-NLS-1$ public static final String[] EMPTY_ARRAY = new String[0]; public static final String EQUAL = "="; //$NON-NLS-1$ public static final String FILTER_NAME = "filter-name"; //$NON-NLS-1$ public static final String FILTER_PRIORITY = "filter-priority"; //$NON-NLS-1$ public static final String HTTP = "http"; //$NON-NLS-1$ + public static final String HTTP_HOST = "http.host"; //$NON-NLS-1$ + public static final String HTTP_PORT = "http.port"; //$NON-NLS-1$ + public static final String HTTPS = "https"; //$NON-NLS-1$ + public static final String HTTPS_HOST = "https.host"; //$NON-NLS-1$ + public static final String HTTPS_PORT = "https.port"; //$NON-NLS-1$ public static final String LOCALHOST = "localhost"; //$NON-NLS-1$ public static final String OPEN_PAREN = "("; //$NON-NLS-1$ + public static final String PROTOCOL = "://"; //$NON-NLS-1$ public static final String SERVLET_NAME = "servlet-name"; //$NON-NLS-1$ public static final String SLASH = "/"; //$NON-NLS-1$ public static final String SLASH_STAR = "/*"; //$NON-NLS-1$ |