Merged branch 'jetty-9.4.x' into 'master'.
This commit is contained in:
commit
46a53b8a9b
|
@ -192,8 +192,14 @@ Examples:
|
|||
[source, screen, subs="{sub-order}"]
|
||||
----
|
||||
service:jmx:rmi:///jndi/rmi:///jmxrmi
|
||||
rmi_server_host = any address
|
||||
rmi_server_host = local host address
|
||||
rmi_server_port = randomly chosen
|
||||
rmi_registry_host = local host address
|
||||
rmi_registry_port = 1099
|
||||
|
||||
service:jmx:rmi://0.0.0.0:1099/jndi/rmi://0.0.0.0:1099/jmxrmi
|
||||
rmi_server_host = any address
|
||||
rmi_server_port = 1099
|
||||
rmi_registry_host = any address
|
||||
rmi_registry_port = 1099
|
||||
|
||||
|
|
|
@ -95,6 +95,7 @@
|
|||
<appendOutput>false</appendOutput>
|
||||
<outputFile>${project.build.directory}/deps.txt</outputFile>
|
||||
<sort>true</sort>
|
||||
<excludeGroupIds>org.eclipse.jetty</excludeGroupIds>
|
||||
<prependGroupId>true</prependGroupId>
|
||||
<includeScope>runtime</includeScope>
|
||||
</configuration>
|
||||
|
|
|
@ -232,7 +232,7 @@ public class ConnectorServer extends AbstractLifeCycle
|
|||
@Override
|
||||
public ServerSocket createServerSocket(int port) throws IOException
|
||||
{
|
||||
InetAddress address = _host == null || _host.isEmpty() ? null : InetAddress.getByName(_host);
|
||||
InetAddress address = _host == null || _host.isEmpty() ? InetAddress.getLocalHost() : InetAddress.getByName(_host);
|
||||
ServerSocket server = createServerSocket(address, port);
|
||||
_portConsumer.accept(server.getLocalPort());
|
||||
return server;
|
||||
|
|
|
@ -73,42 +73,63 @@ public class ConnectorServerTest
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testNoRegistryHostBindsToAny() throws Exception
|
||||
public void testNoRegistryHostBindsToHost() throws Exception
|
||||
{
|
||||
connectorServer = new ConnectorServer(new JMXServiceURL("service:jmx:rmi:///jndi/rmi:///jmxrmi"), objectName);
|
||||
connectorServer.start();
|
||||
|
||||
// Verify that I can connect to the RMI registry using a non-loopback address.
|
||||
new Socket(InetAddress.getLocalHost(), 1099).close();
|
||||
// Verify that I can connect to the RMI registry using the loopback address.
|
||||
new Socket(InetAddress.getLoopbackAddress(), 1099).close();
|
||||
try
|
||||
{
|
||||
// Verify that I cannot connect to the RMI registry using the loopback address.
|
||||
new Socket(InetAddress.getLoopbackAddress(), 1099).close();
|
||||
Assert.fail();
|
||||
}
|
||||
catch (ConnectException ignored)
|
||||
{
|
||||
// Ignored.
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNoRegistryHostNonDefaultRegistryPort() throws Exception
|
||||
{
|
||||
int registryPort = 1299;
|
||||
ServerSocket serverSocket = new ServerSocket(0);
|
||||
int registryPort = serverSocket.getLocalPort();
|
||||
serverSocket.close();
|
||||
connectorServer = new ConnectorServer(new JMXServiceURL("service:jmx:rmi:///jndi/rmi://:" + registryPort + "/jmxrmi"), objectName);
|
||||
connectorServer.start();
|
||||
|
||||
// Verify that I can connect to the RMI registry using a non-loopback address.
|
||||
new Socket(InetAddress.getLocalHost(), registryPort).close();
|
||||
try
|
||||
{
|
||||
// Verify that I cannot connect to the RMI registry using the loopback address.
|
||||
new Socket(InetAddress.getLoopbackAddress(), registryPort).close();
|
||||
Assert.fail();
|
||||
}
|
||||
catch (ConnectException ignored)
|
||||
{
|
||||
// Ignored.
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAnyRegistryHostBindsToAny() throws Exception
|
||||
{
|
||||
ServerSocket serverSocket = new ServerSocket(0);
|
||||
int registryPort = serverSocket.getLocalPort();
|
||||
serverSocket.close();
|
||||
connectorServer = new ConnectorServer(new JMXServiceURL("service:jmx:rmi:///jndi/rmi://0.0.0.0:" + registryPort + "/jmxrmi"), objectName);
|
||||
connectorServer.start();
|
||||
|
||||
// Verify that I can connect to the RMI registry using a non-loopback address.
|
||||
new Socket(InetAddress.getLocalHost(), registryPort).close();
|
||||
// Verify that I can connect to the RMI registry using the loopback address.
|
||||
new Socket(InetAddress.getLoopbackAddress(), registryPort).close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNoRMIHostBindsToAny() throws Exception
|
||||
{
|
||||
connectorServer = new ConnectorServer(new JMXServiceURL("service:jmx:rmi:///jndi/rmi:///jmxrmi"), objectName);
|
||||
connectorServer.start();
|
||||
|
||||
// Verify that I can connect to the RMI server using a non-loopback address.
|
||||
new Socket(InetAddress.getLocalHost(), connectorServer.getAddress().getPort()).close();
|
||||
// Verify that I can connect to the RMI server using the loopback address.
|
||||
new Socket(InetAddress.getLoopbackAddress(), connectorServer.getAddress().getPort()).close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLocalhostRegistryBindsToLoopback() throws Exception
|
||||
{
|
||||
|
@ -134,6 +155,38 @@ public class ConnectorServerTest
|
|||
new Socket(loopback, 1099).close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNoRMIHostBindsToHost() throws Exception
|
||||
{
|
||||
connectorServer = new ConnectorServer(new JMXServiceURL("service:jmx:rmi:///jndi/rmi:///jmxrmi"), objectName);
|
||||
connectorServer.start();
|
||||
|
||||
// Verify that I can connect to the RMI server using a non-loopback address.
|
||||
new Socket(InetAddress.getLocalHost(), connectorServer.getAddress().getPort()).close();
|
||||
try
|
||||
{
|
||||
// Verify that I cannot connect to the RMI server using the loopback address.
|
||||
new Socket(InetAddress.getLoopbackAddress(), connectorServer.getAddress().getPort()).close();
|
||||
Assert.fail();
|
||||
}
|
||||
catch (ConnectException ignored)
|
||||
{
|
||||
// Ignored.
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAnyRMIHostBindsToAny() throws Exception
|
||||
{
|
||||
connectorServer = new ConnectorServer(new JMXServiceURL("service:jmx:rmi://0.0.0.0/jndi/rmi:///jmxrmi"), objectName);
|
||||
connectorServer.start();
|
||||
|
||||
// Verify that I can connect to the RMI server using a non-loopback address.
|
||||
new Socket(InetAddress.getLocalHost(), connectorServer.getAddress().getPort()).close();
|
||||
// Verify that I can connect to the RMI server using the loopback address.
|
||||
new Socket(InetAddress.getLoopbackAddress(), connectorServer.getAddress().getPort()).close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLocalhostRMIBindsToLoopback() throws Exception
|
||||
{
|
||||
|
@ -187,7 +240,10 @@ public class ConnectorServerTest
|
|||
// that can listen to 192.168.0.1:1099 and 127.0.0.1:1099 without problems.
|
||||
|
||||
String host = "localhost";
|
||||
int port = 1399;
|
||||
ServerSocket serverSocket = new ServerSocket(0);
|
||||
int port = serverSocket.getLocalPort();
|
||||
serverSocket.close();
|
||||
|
||||
connectorServer = new ConnectorServer(new JMXServiceURL("rmi", host, port, "/jndi/rmi://" + host + ":" + port + "/jmxrmi"), objectName);
|
||||
connectorServer.start();
|
||||
|
||||
|
|
|
@ -56,26 +56,14 @@
|
|||
<includeArtifactIds>jmx-webapp</includeArtifactIds>
|
||||
<includeScope>runtime</includeScope>
|
||||
<includeTypes>war</includeTypes>
|
||||
<overwriteSnapshots>true</overwriteSnapshots>
|
||||
<overwriteReleases>true</overwriteReleases>
|
||||
<overWriteSnapshots>true</overWriteSnapshots>
|
||||
<overWriteReleases>true</overWriteReleases>
|
||||
<stripVersion>true</stripVersion>
|
||||
<outputDirectory>${test-base-dir}/webapps</outputDirectory>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-failsafe-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>integration-test</goal>
|
||||
<goal>verify</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
|
|
|
@ -18,17 +18,13 @@
|
|||
|
||||
package org.eclipse.jetty.test.jmx;
|
||||
|
||||
import static org.hamcrest.Matchers.instanceOf;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.hamcrest.Matchers.notNullValue;
|
||||
import static org.hamcrest.Matchers.startsWith;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.lang.management.ManagementFactory;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.URI;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
|
||||
import javax.management.MBeanServerConnection;
|
||||
import javax.management.ObjectName;
|
||||
|
@ -44,111 +40,110 @@ import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
|
|||
import org.eclipse.jetty.util.IO;
|
||||
import org.eclipse.jetty.webapp.Configuration;
|
||||
import org.eclipse.jetty.webapp.WebAppContext;
|
||||
import org.eclipse.jetty.annotations.AnnotationConfiguration;
|
||||
import org.eclipse.jetty.jmx.ConnectorServer;
|
||||
import org.eclipse.jetty.jmx.MBeanContainer;
|
||||
import org.eclipse.jetty.server.NetworkConnector;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* Some JMX information tests.
|
||||
*/
|
||||
import static org.hamcrest.Matchers.instanceOf;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.hamcrest.Matchers.notNullValue;
|
||||
import static org.hamcrest.Matchers.startsWith;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
@Ignore
|
||||
public class JmxIT
|
||||
{
|
||||
private static JMXConnector __jmxc;
|
||||
private static MBeanServerConnection __mbsc;
|
||||
private static Server __server;
|
||||
private static int __port;
|
||||
private Server _server;
|
||||
private JMXConnector _jmxc;
|
||||
private MBeanServerConnection _mbsc;
|
||||
private int _httpPort;
|
||||
private JMXServiceURL _jmxURL;
|
||||
|
||||
@BeforeClass
|
||||
public static void connectToMBeanServer() throws Exception
|
||||
@Before
|
||||
public void connectToMBeanServer() throws Exception
|
||||
{
|
||||
startJetty();
|
||||
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://localhost:1099/jndi/rmi://localhost:1099/jmxrmi");
|
||||
__jmxc = JMXConnectorFactory.connect(url,null);
|
||||
__mbsc = __jmxc.getMBeanServerConnection();
|
||||
|
||||
new CountDownLatch(1).await();
|
||||
|
||||
_jmxc = JMXConnectorFactory.connect(_jmxURL);
|
||||
_mbsc = _jmxc.getMBeanServerConnection();
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void disconnectFromMBeanServer() throws Exception
|
||||
@After
|
||||
public void disconnectFromMBeanServer() throws Exception
|
||||
{
|
||||
_jmxc.close();
|
||||
stopJetty();
|
||||
__jmxc.close();
|
||||
}
|
||||
|
||||
public static void startJetty() throws Exception
|
||||
public void startJetty() throws Exception
|
||||
{
|
||||
File target = MavenTestingUtils.getTargetDir();
|
||||
File jettyBase = new File (target, "test-base");
|
||||
File webapps = new File (jettyBase, "webapps");
|
||||
File war = new File (webapps, "jmx-webapp.war");
|
||||
File jettyBase = new File(target, "test-base");
|
||||
File webapps = new File(jettyBase, "webapps");
|
||||
File war = new File(webapps, "jmx-webapp.war");
|
||||
|
||||
//create server instance
|
||||
__server = new Server(0);
|
||||
_server = new Server(0);
|
||||
|
||||
//set up the webapp
|
||||
WebAppContext context = new WebAppContext();
|
||||
|
||||
context.setWar(war.getCanonicalPath());
|
||||
context.setContextPath("/jmx-webapp");
|
||||
|
||||
context.addConfiguration(new AnnotationConfiguration());
|
||||
|
||||
context.setAttribute(
|
||||
"org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
|
||||
".*/javax.servlet-[^/]*\\.jar$|.*/servlet-api-[^/]*\\.jar$");
|
||||
__server.setHandler(context);
|
||||
context.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
|
||||
".*/javax.servlet-[^/]*\\.jar$|.*/servlet-api-[^/]*\\.jar$");
|
||||
_server.setHandler(context);
|
||||
|
||||
//set up jmx remote
|
||||
MBeanContainer mbContainer = new MBeanContainer(ManagementFactory.getPlatformMBeanServer());
|
||||
__server.addBean(mbContainer);
|
||||
_server.addBean(mbContainer);
|
||||
|
||||
JMXServiceURL serviceUrl = new JMXServiceURL("rmi", "localhost", 1099, "/jndi/rmi://localhost:1099/jmxrmi");
|
||||
ConnectorServer jmxConnServer = new ConnectorServer(serviceUrl, "org.eclipse.jetty.jmx:name=rmiconnectorserver");
|
||||
__server.addBean(jmxConnServer);
|
||||
ServerSocket serverSocket = new ServerSocket(0);
|
||||
int jmxPort = serverSocket.getLocalPort();
|
||||
serverSocket.close();
|
||||
|
||||
//start server
|
||||
__server.start();
|
||||
_jmxURL = new JMXServiceURL("rmi", "0.0.0.0", jmxPort, "/jndi/rmi://0.0.0.0:" + jmxPort + "/jmxrmi");
|
||||
ConnectorServer jmxConnServer = new ConnectorServer(_jmxURL, "org.eclipse.jetty.jmx:name=rmiconnectorserver");
|
||||
_server.addBean(jmxConnServer);
|
||||
|
||||
//remember chosen port
|
||||
__port = ((NetworkConnector)__server.getConnectors()[0]).getLocalPort();
|
||||
_server.start();
|
||||
_httpPort = ((NetworkConnector)_server.getConnectors()[0]).getLocalPort();
|
||||
}
|
||||
|
||||
|
||||
public static void stopJetty () throws Exception
|
||||
public void stopJetty() throws Exception
|
||||
{
|
||||
if (__server != null)
|
||||
__server.stop();
|
||||
if (_server != null)
|
||||
_server.stop();
|
||||
}
|
||||
|
||||
private String getStringAttribute(ObjectName objName, String attrName) throws Exception
|
||||
{
|
||||
Object val = __mbsc.getAttribute(objName,attrName);
|
||||
assertThat(attrName,val,notNullValue());
|
||||
assertThat(attrName,val,instanceOf(String.class));
|
||||
Object val = _mbsc.getAttribute(objName, attrName);
|
||||
assertThat(attrName, val, notNullValue());
|
||||
assertThat(attrName, val, instanceOf(String.class));
|
||||
return (String)val;
|
||||
}
|
||||
|
||||
private int getIntegerAttribute(ObjectName objName, String attrName) throws Exception
|
||||
{
|
||||
Object val = __mbsc.getAttribute(objName,attrName);
|
||||
assertThat(attrName,val,notNullValue());
|
||||
assertThat(attrName,val,instanceOf(Integer.class));
|
||||
Object val = _mbsc.getAttribute(objName, attrName);
|
||||
assertThat(attrName, val, notNullValue());
|
||||
assertThat(attrName, val, instanceOf(Integer.class));
|
||||
return (Integer)val;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBasic() throws Exception
|
||||
{
|
||||
URI serverURI = new URI("http://localhost:"+String.valueOf(__port)+"/jmx-webapp/");
|
||||
HttpURLConnection http = (HttpURLConnection) serverURI.resolve("ping").toURL().openConnection();
|
||||
assertThat("http response", http.getResponseCode(), is(200));
|
||||
try(InputStream inputStream = http.getInputStream())
|
||||
URI serverURI = new URI("http://localhost:" + String.valueOf(_httpPort) + "/jmx-webapp/");
|
||||
HttpURLConnection http = (HttpURLConnection)serverURI.resolve("ping").toURL().openConnection();
|
||||
try (InputStream inputStream = http.getInputStream())
|
||||
{
|
||||
assertThat("http response", http.getResponseCode(), is(200));
|
||||
String resp = IO.toString(inputStream);
|
||||
assertThat(resp,startsWith("Servlet Pong at "));
|
||||
assertThat(resp, startsWith("Servlet Pong at "));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -156,8 +151,8 @@ public class JmxIT
|
|||
public void testObtainRunningServerVersion() throws Exception
|
||||
{
|
||||
ObjectName serverName = new ObjectName("org.eclipse.jetty.server:type=server,id=0");
|
||||
String version = getStringAttribute(serverName,"version");
|
||||
assertThat("Version",version,startsWith("10.0."));
|
||||
String version = getStringAttribute(serverName, "version");
|
||||
assertThat("Version", version, startsWith("10.0."));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -165,11 +160,11 @@ public class JmxIT
|
|||
{
|
||||
ObjectName webappName = new ObjectName("org.eclipse.jetty.webapp:context=jmx-webapp,type=webappcontext,id=0");
|
||||
|
||||
String contextPath = getStringAttribute(webappName,"contextPath");
|
||||
String displayName = getStringAttribute(webappName,"displayName");
|
||||
String contextPath = getStringAttribute(webappName, "contextPath");
|
||||
assertThat("Context Path", contextPath, is("/jmx-webapp"));
|
||||
|
||||
assertThat("Context Path",contextPath,is("/jmx-webapp"));
|
||||
assertThat("Display Name",displayName,is("Test JMX WebApp"));
|
||||
String displayName = getStringAttribute(webappName, "displayName");
|
||||
assertThat("Display Name", displayName, is("Test JMX WebApp"));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -179,8 +174,8 @@ public class JmxIT
|
|||
public void testAccessToCommonComponent() throws Exception
|
||||
{
|
||||
ObjectName commonName = new ObjectName("org.eclipse.jetty.test.jmx:type=commoncomponent,context=jmx-webapp,id=0");
|
||||
String name = getStringAttribute(commonName,"name");
|
||||
assertThat("Name",name,is("i am common"));
|
||||
String name = getStringAttribute(commonName, "name");
|
||||
assertThat("Name", name, is("i am common"));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -192,12 +187,12 @@ public class JmxIT
|
|||
{
|
||||
ObjectName pingerName = new ObjectName("org.eclipse.jetty.test.jmx:type=pinger,context=jmx-webapp,id=0");
|
||||
// Get initial count
|
||||
int count = getIntegerAttribute(pingerName,"count");
|
||||
int count = getIntegerAttribute(pingerName, "count");
|
||||
// Operations
|
||||
Object val = __mbsc.invoke(pingerName,"ping",null,null);
|
||||
assertThat("ping() return",val.toString(),startsWith("Pong"));
|
||||
Object val = _mbsc.invoke(pingerName, "ping", null, null);
|
||||
assertThat("ping() return", val.toString(), startsWith("Pong"));
|
||||
// Attributes
|
||||
assertThat("count",getIntegerAttribute(pingerName,"count"),is(count+1));
|
||||
assertThat("count", getIntegerAttribute(pingerName, "count"), is(count + 1));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -209,12 +204,12 @@ public class JmxIT
|
|||
{
|
||||
ObjectName echoerName = new ObjectName("org.eclipse.jetty.test.jmx:type=echoer,context=jmx-webapp,id=0");
|
||||
// Get initial count
|
||||
int count = getIntegerAttribute(echoerName,"count");
|
||||
int count = getIntegerAttribute(echoerName, "count");
|
||||
// Operations
|
||||
Object val = __mbsc.invoke(echoerName,"echo",new Object[]{"Its Me"},new String[]{String.class.getName()});
|
||||
assertThat("echo() return",val.toString(),is("Its Me"));
|
||||
Object val = _mbsc.invoke(echoerName, "echo", new Object[]{"Its Me"}, new String[]{String.class.getName()});
|
||||
assertThat("echo() return", val.toString(), is("Its Me"));
|
||||
// Attributes
|
||||
assertThat("count",getIntegerAttribute(echoerName,"count"),is(count+1));
|
||||
assertThat("foo",getStringAttribute(echoerName,"foo"),is("foo-ish"));
|
||||
assertThat("count", getIntegerAttribute(echoerName, "count"), is(count + 1));
|
||||
assertThat("foo", getStringAttribute(echoerName, "foo"), is("foo-ish"));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue