Author: ron.sigal(a)jboss.com
Date: 2010-08-04 22:15:19 -0400 (Wed, 04 Aug 2010)
New Revision: 6048
Modified:
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/SSLWriteTimeoutTestParent.java
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/ServerThreadReuseAfterTimeoutTestCase.java
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/SocketDefaultTimeoutTestCase.java
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/SocketWriteTimeoutTestCase.java
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/WriteTimeoutTestParent.java
Log:
JBREM-1241: Added svn:eol-style subversion property.
Modified:
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/SSLWriteTimeoutTestParent.java
===================================================================
---
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/SSLWriteTimeoutTestParent.java 2010-08-05
02:14:13 UTC (rev 6047)
+++
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/SSLWriteTimeoutTestParent.java 2010-08-05
02:15:19 UTC (rev 6048)
@@ -1,580 +1,580 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2009, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* This is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Lesser General Public License as
-* published by the Free Software Foundation; either version 2.1 of
-* the License, or (at your option) any later version.
-*
-* This software is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this software; if not, write to the Free
-* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-* 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
-*/
-package org.jboss.test.remoting.transport.socket.timeout;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.lang.reflect.Constructor;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.net.SocketAddress;
-import java.net.UnknownHostException;
-import java.util.Map;
-
-import javax.net.ServerSocketFactory;
-import javax.net.SocketFactory;
-import javax.net.ssl.HandshakeCompletedListener;
-import javax.net.ssl.SSLServerSocket;
-import javax.net.ssl.SSLServerSocketFactory;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.SSLSocket;
-
-import org.apache.log4j.Logger;
-import org.jboss.remoting.InvokerLocator;
-import org.jboss.remoting.security.SSLSocketBuilder;
-import org.jboss.remoting.transport.Connector;
-
-
-/**
- * Unit tests for JBREM-1120.
- *
- * @author <a href="ron.sigal(a)jboss.com">Ron Sigal</a>
- * @version $Rev$
- * <p>
- * Copyright Apr 22, 2009
- * </p>
- */
-public abstract class SSLWriteTimeoutTestParent extends WriteTimeoutTestParent
-{
- private static Logger log = Logger.getLogger(SSLWriteTimeoutTestParent.class);
-
- private static boolean firstTime = true;
-
- protected static int SECONDARY_SERVER_SOCKET_PORT = 8765;
- protected static String SECONDARY_SERVER_SOCKET_PORT_STRING = "8765";
-
- protected String host;
- protected int port;
- protected String locatorURI;
- protected InvokerLocator serverLocator;
- protected Connector connector;
- protected TestInvocationHandler invocationHandler;
-
- protected void addExtraClientConfig(Map config) {}
- protected void addExtraServerConfig(Map config) {}
-
-
- public void setUp() throws Exception
- {
- if (firstTime)
- {
- String keyStoreFilePath =
getClass().getResource("../.keystore").getFile();
- System.setProperty("javax.net.ssl.keyStore", keyStoreFilePath);
- System.setProperty("javax.net.ssl.keyStorePassword",
"unit-tests-server");
- String trustStoreFilePath =
getClass().getResource("../.truststore").getFile();
- System.setProperty("javax.net.ssl.trustStore", trustStoreFilePath);
- System.setProperty("javax.net.ssl.trustStorePassword",
"unit-tests-client");
- }
- super.setUp();
- }
-
-
- protected String getServerSocketFactoryClassName()
- {
- return SSLTestServerSocketFactory.class.getName();
- }
-
- protected Constructor getServerSocketFactoryConstructor() throws
NoSuchMethodException
- {
- return SSLTestServerSocketFactory.class.getConstructor(new Class[]{int.class,
int.class});
- }
-
- protected String getSocketFactoryClassName()
- {
- return SSLTestSocketFactory.class.getName();
- }
-
- protected Constructor getSocketFactoryConstructor() throws NoSuchMethodException
- {
- return SSLTestSocketFactory.class.getConstructor(new Class[]{int.class,
int.class});
- }
-
- static public class SSLTestServerSocketFactory extends ServerSocketFactory
- {
- int timeout;
- ServerSocketFactory factory;
- int initialWrites;
-
- public SSLTestServerSocketFactory() throws IOException
- {
- this.timeout = 5000;
- this.initialWrites = -1;
- setupFactory();
- }
- public SSLTestServerSocketFactory(int timeout, int initialWrites) throws
IOException
- {
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- setupFactory();
- }
- public ServerSocket createServerSocket() throws IOException
- {
- ServerSocket ss = null;
- if (callbackTest)
- {
- ss = SSLServerSocketFactory.getDefault().createServerSocket();
- }
- else
- {
- ss = new SSLTestServerSocket(timeout, initialWrites, ((SSLServerSocket)
factory.createServerSocket()));
- }
- log.info("returning: " + ss);
- return ss;
- }
- public ServerSocket createServerSocket(int port) throws IOException
- {
- ServerSocket ss = null;
- if (callbackTest && port != secondaryServerSocketPort)
- {
- ss = SSLServerSocketFactory.getDefault().createServerSocket(port);
- }
- else
- {
- ss = new SSLTestServerSocket(port, timeout, initialWrites, ((SSLServerSocket)
factory.createServerSocket()));
- }
- log.info("returning: " + ss);
- return ss;
- }
-
- public ServerSocket createServerSocket(int port, int backlog) throws IOException
- {
- ServerSocket ss = null;
- if (callbackTest && port != secondaryServerSocketPort)
- {
- ss = SSLServerSocketFactory.getDefault().createServerSocket(port, backlog);
- }
- else
- {
- ss = new SSLTestServerSocket(port, backlog, timeout, initialWrites,
((SSLServerSocket) factory.createServerSocket()));
- }
- log.info("returning: " + ss);
- return ss;
- }
-
- public ServerSocket createServerSocket(int port, int backlog, InetAddress
ifAddress) throws IOException
- {
- ServerSocket ss = null;
- if (callbackTest && port != secondaryServerSocketPort)
- {
- ss = SSLServerSocketFactory.getDefault().createServerSocket(port, backlog,
ifAddress);
- }
- else
- {
- ss = new SSLTestServerSocket(port, backlog, ifAddress, timeout,
initialWrites, ((SSLServerSocket) factory.createServerSocket()));
- }
- log.info("returning: " + ss);
- return ss;
- }
-
- protected void setupFactory() throws IOException
- {
- SSLSocketBuilder sslSocketBuilder = new SSLSocketBuilder();
- sslSocketBuilder.setUseSSLServerSocketFactory(false);
- factory = sslSocketBuilder.createSSLServerSocketFactory();
- }
- }
-
-
- static class SSLTestServerSocket extends SSLServerSocket
- {
- int timeout;
- int initialWrites;
- SSLServerSocket serverSocket;
-
- public SSLTestServerSocket(int timeout, int initialWrites, SSLServerSocket
serverSocket) throws IOException
- {
- super();
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- this.serverSocket = serverSocket;
- }
- public SSLTestServerSocket(int port, int timeout, int initialWrites,
SSLServerSocket serverSocket) throws IOException
- {
- super(port);
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- this.serverSocket = serverSocket;
- bind(new InetSocketAddress(port), 50);
- }
- public SSLTestServerSocket(int port, int backlog, int timeout, int initialWrites,
SSLServerSocket serverSocket) throws IOException
- {
- super(port, backlog);
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- this.serverSocket = serverSocket;
- bind(new InetSocketAddress(port), backlog);
- }
- public SSLTestServerSocket(int port, int backlog, InetAddress bindAddr, int
timeout, int initialWrites, SSLServerSocket serverSocket) throws IOException
- {
- super(port, backlog, bindAddr);
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- this.serverSocket = serverSocket;
- bind(new InetSocketAddress(bindAddr, port), 50);
- }
- public Socket accept() throws IOException
- {
- SSLSocket s1 = (SSLSocket) serverSocket.accept();
- Socket s2 = new SSLTestSocket(timeout, initialWrites, s1);
- return s2;
- }
- public void bind(SocketAddress endpoint, int backlog) throws IOException
- {
- log.info("serverSocket: " + serverSocket);
- if (serverSocket != null) log.info("bound: " +
serverSocket.isBound());
- if (serverSocket != null && !serverSocket.isBound())
- {
- log.info("binding " + serverSocket);
- serverSocket.bind(endpoint, backlog);
- }
- }
- public String toString()
- {
- return "SSLTestServerSocket[" + serverSocket.toString() +
"]";
- }
- public boolean getEnableSessionCreation()
- {
- return serverSocket.getEnableSessionCreation();
- }
- public String[] getEnabledCipherSuites()
- {
- return serverSocket.getEnabledCipherSuites();
- }
- public String[] getEnabledProtocols()
- {
- return serverSocket.getEnabledProtocols();
- }
- public InetAddress getInetAddress()
- {
- return serverSocket.getInetAddress();
- }
- public boolean getNeedClientAuth()
- {
- return serverSocket.getNeedClientAuth();
- }
- public String[] getSupportedCipherSuites()
- {
- return serverSocket.getSupportedCipherSuites();
- }
- public String[] getSupportedProtocols()
- {
- return serverSocket.getSupportedProtocols();
- }
- public boolean getUseClientMode()
- {
- return serverSocket.getUseClientMode();
- }
- public boolean getWantClientAuth()
- {
- return serverSocket.getWantClientAuth();
- }
- public void setEnableSessionCreation(boolean arg0)
- {
- serverSocket.setEnableSessionCreation(arg0);
- }
- public void setEnabledCipherSuites(String[] arg0)
- {
- serverSocket.setEnabledCipherSuites(arg0);
- }
- public void setEnabledProtocols(String[] arg0)
- {
- serverSocket.setEnabledProtocols(arg0);
- }
- public void setNeedClientAuth(boolean arg0)
- {
- serverSocket.setNeedClientAuth(arg0);
- }
- public void setUseClientMode(boolean arg0)
- {
- serverSocket.setUseClientMode(arg0);
- }
- public void setWantClientAuth(boolean arg0)
- {
- serverSocket.setWantClientAuth(arg0);
- }
- }
-
-
- public static class SSLTestSocketFactory extends SocketFactory
- {
- int timeout;
- int initialWrites;
- SocketFactory factory;
-
- public SSLTestSocketFactory() throws IOException
- {
- timeout = 5000;
- initialWrites = -1;
- setupFactory();
- }
- public SSLTestSocketFactory(int timeout, int initialWrites) throws IOException
- {
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- setupFactory();
- }
- public Socket createSocket() throws IOException
- {
- log.info("callbackTest: " + callbackTest);
- Socket s = null;
- if (callbackTest)
- {
- s = factory.createSocket();
- }
- else
- {
- s = new TestSocket(timeout, initialWrites);
- s = new SSLTestSocket(timeout, initialWrites, ((SSLSocket)
factory.createSocket()));
- }
- log.info(this + " returning " + s);
- return s;
- }
- public Socket createSocket(String arg0, int arg1) throws IOException,
UnknownHostException
- {
- log.info("callbackTest: " + callbackTest);
- Socket s = null;
- if (callbackTest && arg1 != secondaryServerSocketPort)
- {
- s = factory.createSocket(arg0, arg1);
- }
- else
- {
- s = new TestSocket(timeout, initialWrites);
- s = new SSLTestSocket(arg0, arg1, timeout, initialWrites, ((SSLSocket)
factory.createSocket()));
- }
- log.info(this + " returning " + s);
- return s;
- }
-
- public Socket createSocket(InetAddress arg0, int arg1) throws IOException
- {
- log.info("callbackTest: " + callbackTest);
- Socket s = null;
- if (callbackTest && arg1 != secondaryServerSocketPort)
- {
- s = factory.createSocket(arg0, arg1);
- }
- else
- {
- s = new TestSocket(timeout, initialWrites);
- s = new SSLTestSocket(arg0, arg1, timeout, initialWrites, ((SSLSocket)
factory.createSocket()));
- }
- log.info(this + " returning " + s);
- return s;
- }
-
- public Socket createSocket(String arg0, int arg1, InetAddress arg2, int arg3)
throws IOException, UnknownHostException
- {
- log.info("callbackTest: " + callbackTest);
- Socket s = null;
- if (callbackTest && arg1 != secondaryServerSocketPort)
- {
- s = factory.createSocket(arg0, arg1);
- }
- else
- {
- s = new TestSocket(timeout, initialWrites);
- s = new SSLTestSocket(arg0, arg1, arg2, arg3, timeout, initialWrites,
((SSLSocket) factory.createSocket()));
- }
- log.info(this + " returning " + s);
- return s;
- }
-
- public Socket createSocket(InetAddress arg0, int arg1, InetAddress arg2, int arg3)
throws IOException
- {
- log.info("callbackTest: " + callbackTest);
- Socket s = null;
- if (callbackTest && arg1 != secondaryServerSocketPort)
- {
- s = factory.createSocket(arg0, arg1);
- }
- else
- {
- s = new TestSocket(timeout, initialWrites);
- s = new SSLTestSocket(arg0, arg1, arg2, arg3, timeout, initialWrites,
((SSLSocket) factory.createSocket()));
- }
- log.info(this + " returning " + s);
- return s;
- }
-
- protected void setupFactory() throws IOException
- {
- SSLSocketBuilder sslSocketBuilder = new SSLSocketBuilder();
- sslSocketBuilder.setUseSSLServerSocketFactory(false);
- factory = sslSocketBuilder.createSSLSocketFactory();
- }
- }
-
- static class SSLTestSocket extends SSLSocket
- {
- int timeout;
- int initialWrites;
- SSLSocket socket;
- SocketAddress endpoint;
-
- public SSLTestSocket(int timeout, int initialWrites, SSLSocket socket)
- {
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- this.socket = socket;
- }
- public SSLTestSocket(String host, int port, int timeout, int initialWrites,
SSLSocket socket) throws UnknownHostException, IOException
- {
- super(host, port);
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- this.socket = socket;
- connect(new InetSocketAddress(host, port), timeout);
- }
- public SSLTestSocket(InetAddress address, int port, int timeout, int initialWrites,
SSLSocket socket) throws IOException
- {
- super(address, port);
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- this.socket = socket;
- connect(new InetSocketAddress(address, port), timeout);
- }
- public SSLTestSocket(String host, int port, InetAddress localAddr, int localPort,
int timeout, int initialWrites, SSLSocket socket) throws IOException
- {
- super(host, port, localAddr, localPort);
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- this.socket = socket;
- bind(new InetSocketAddress(localAddr, localPort));
- connect(new InetSocketAddress(host, port), timeout);
- }
- public SSLTestSocket(InetAddress address, int port, InetAddress localAddr, int
localPort, int timeout, int initialWrites, SSLSocket socket) throws IOException
- {
- super(address, port, localAddr, localPort);
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- this.socket = socket;
- bind(new InetSocketAddress(localAddr, localPort));
- connect(new InetSocketAddress(address, port), timeout);
- }
- public String toString()
- {
- return "SSLTestSocket[" + socket.toString() + "]";
- }
- public InputStream getInputStream() throws IOException
- {
- return socket.getInputStream();
- }
- public OutputStream getOutputStream() throws IOException
- {
- return new TestOutputStream(socket.getOutputStream(), timeout, initialWrites);
- }
- public void addHandshakeCompletedListener(HandshakeCompletedListener listener)
- {
- socket.addHandshakeCompletedListener(listener);
- }
- public void bind(SocketAddress bindpoint) throws IOException
- {
- if (socket != null)
- socket.bind(bindpoint);
- }
- public void connect(SocketAddress endpoint) throws IOException
- {
- if (socket != null)
- socket.connect(endpoint);
- }
- public void connect(SocketAddress endpoint, int timeout) throws IOException
- {
- socket.connect(endpoint, timeout);
- }
- public boolean getEnableSessionCreation()
- {
- return socket.getEnableSessionCreation();
- }
- public String[] getEnabledCipherSuites()
- {
- return socket.getEnabledCipherSuites();
- }
- public String[] getEnabledProtocols()
- {
- return socket.getEnabledProtocols();
- }
- public InetAddress getInetAddress()
- {
- return socket.getInetAddress();
- }
- public boolean getNeedClientAuth()
- {
- return socket.getNeedClientAuth();
- }
- public SSLSession getSession()
- {
- return socket.getSession();
- }
- public String[] getSupportedCipherSuites()
- {
- return socket.getSupportedCipherSuites();
- }
- public String[] getSupportedProtocols()
- {
- return socket.getSupportedProtocols();
- }
- public boolean getUseClientMode()
- {
- return socket.getUseClientMode();
- }
- public boolean getWantClientAuth()
- {
- return socket.getWantClientAuth();
- }
- public void removeHandshakeCompletedListener(HandshakeCompletedListener listener)
- {
- socket.removeHandshakeCompletedListener(listener);
- }
- public void setEnableSessionCreation(boolean flag)
- {
- socket.setEnableSessionCreation(flag);
- }
- public void setEnabledCipherSuites(String[] suites)
- {
- socket.setEnabledCipherSuites(suites);
- }
- public void setEnabledProtocols(String[] protocols)
- {
- socket.setEnabledProtocols(protocols);
- }
- public void setNeedClientAuth(boolean need)
- {
- socket.setNeedClientAuth(need);
- }
- public void setUseClientMode(boolean mode)
- {
- socket.setUseClientMode(mode);
- }
- public void setWantClientAuth(boolean want)
- {
- socket.setWantClientAuth(want);
- }
- public void startHandshake() throws IOException
- {
- socket.startHandshake();
- }
- }
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+*/
+package org.jboss.test.remoting.transport.socket.timeout;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.reflect.Constructor;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.SocketAddress;
+import java.net.UnknownHostException;
+import java.util.Map;
+
+import javax.net.ServerSocketFactory;
+import javax.net.SocketFactory;
+import javax.net.ssl.HandshakeCompletedListener;
+import javax.net.ssl.SSLServerSocket;
+import javax.net.ssl.SSLServerSocketFactory;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSocket;
+
+import org.apache.log4j.Logger;
+import org.jboss.remoting.InvokerLocator;
+import org.jboss.remoting.security.SSLSocketBuilder;
+import org.jboss.remoting.transport.Connector;
+
+
+/**
+ * Unit tests for JBREM-1120.
+ *
+ * @author <a href="ron.sigal(a)jboss.com">Ron Sigal</a>
+ * @version $Rev$
+ * <p>
+ * Copyright Apr 22, 2009
+ * </p>
+ */
+public abstract class SSLWriteTimeoutTestParent extends WriteTimeoutTestParent
+{
+ private static Logger log = Logger.getLogger(SSLWriteTimeoutTestParent.class);
+
+ private static boolean firstTime = true;
+
+ protected static int SECONDARY_SERVER_SOCKET_PORT = 8765;
+ protected static String SECONDARY_SERVER_SOCKET_PORT_STRING = "8765";
+
+ protected String host;
+ protected int port;
+ protected String locatorURI;
+ protected InvokerLocator serverLocator;
+ protected Connector connector;
+ protected TestInvocationHandler invocationHandler;
+
+ protected void addExtraClientConfig(Map config) {}
+ protected void addExtraServerConfig(Map config) {}
+
+
+ public void setUp() throws Exception
+ {
+ if (firstTime)
+ {
+ String keyStoreFilePath =
getClass().getResource("../.keystore").getFile();
+ System.setProperty("javax.net.ssl.keyStore", keyStoreFilePath);
+ System.setProperty("javax.net.ssl.keyStorePassword",
"unit-tests-server");
+ String trustStoreFilePath =
getClass().getResource("../.truststore").getFile();
+ System.setProperty("javax.net.ssl.trustStore", trustStoreFilePath);
+ System.setProperty("javax.net.ssl.trustStorePassword",
"unit-tests-client");
+ }
+ super.setUp();
+ }
+
+
+ protected String getServerSocketFactoryClassName()
+ {
+ return SSLTestServerSocketFactory.class.getName();
+ }
+
+ protected Constructor getServerSocketFactoryConstructor() throws
NoSuchMethodException
+ {
+ return SSLTestServerSocketFactory.class.getConstructor(new Class[]{int.class,
int.class});
+ }
+
+ protected String getSocketFactoryClassName()
+ {
+ return SSLTestSocketFactory.class.getName();
+ }
+
+ protected Constructor getSocketFactoryConstructor() throws NoSuchMethodException
+ {
+ return SSLTestSocketFactory.class.getConstructor(new Class[]{int.class,
int.class});
+ }
+
+ static public class SSLTestServerSocketFactory extends ServerSocketFactory
+ {
+ int timeout;
+ ServerSocketFactory factory;
+ int initialWrites;
+
+ public SSLTestServerSocketFactory() throws IOException
+ {
+ this.timeout = 5000;
+ this.initialWrites = -1;
+ setupFactory();
+ }
+ public SSLTestServerSocketFactory(int timeout, int initialWrites) throws
IOException
+ {
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ setupFactory();
+ }
+ public ServerSocket createServerSocket() throws IOException
+ {
+ ServerSocket ss = null;
+ if (callbackTest)
+ {
+ ss = SSLServerSocketFactory.getDefault().createServerSocket();
+ }
+ else
+ {
+ ss = new SSLTestServerSocket(timeout, initialWrites, ((SSLServerSocket)
factory.createServerSocket()));
+ }
+ log.info("returning: " + ss);
+ return ss;
+ }
+ public ServerSocket createServerSocket(int port) throws IOException
+ {
+ ServerSocket ss = null;
+ if (callbackTest && port != secondaryServerSocketPort)
+ {
+ ss = SSLServerSocketFactory.getDefault().createServerSocket(port);
+ }
+ else
+ {
+ ss = new SSLTestServerSocket(port, timeout, initialWrites, ((SSLServerSocket)
factory.createServerSocket()));
+ }
+ log.info("returning: " + ss);
+ return ss;
+ }
+
+ public ServerSocket createServerSocket(int port, int backlog) throws IOException
+ {
+ ServerSocket ss = null;
+ if (callbackTest && port != secondaryServerSocketPort)
+ {
+ ss = SSLServerSocketFactory.getDefault().createServerSocket(port, backlog);
+ }
+ else
+ {
+ ss = new SSLTestServerSocket(port, backlog, timeout, initialWrites,
((SSLServerSocket) factory.createServerSocket()));
+ }
+ log.info("returning: " + ss);
+ return ss;
+ }
+
+ public ServerSocket createServerSocket(int port, int backlog, InetAddress
ifAddress) throws IOException
+ {
+ ServerSocket ss = null;
+ if (callbackTest && port != secondaryServerSocketPort)
+ {
+ ss = SSLServerSocketFactory.getDefault().createServerSocket(port, backlog,
ifAddress);
+ }
+ else
+ {
+ ss = new SSLTestServerSocket(port, backlog, ifAddress, timeout,
initialWrites, ((SSLServerSocket) factory.createServerSocket()));
+ }
+ log.info("returning: " + ss);
+ return ss;
+ }
+
+ protected void setupFactory() throws IOException
+ {
+ SSLSocketBuilder sslSocketBuilder = new SSLSocketBuilder();
+ sslSocketBuilder.setUseSSLServerSocketFactory(false);
+ factory = sslSocketBuilder.createSSLServerSocketFactory();
+ }
+ }
+
+
+ static class SSLTestServerSocket extends SSLServerSocket
+ {
+ int timeout;
+ int initialWrites;
+ SSLServerSocket serverSocket;
+
+ public SSLTestServerSocket(int timeout, int initialWrites, SSLServerSocket
serverSocket) throws IOException
+ {
+ super();
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ this.serverSocket = serverSocket;
+ }
+ public SSLTestServerSocket(int port, int timeout, int initialWrites,
SSLServerSocket serverSocket) throws IOException
+ {
+ super(port);
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ this.serverSocket = serverSocket;
+ bind(new InetSocketAddress(port), 50);
+ }
+ public SSLTestServerSocket(int port, int backlog, int timeout, int initialWrites,
SSLServerSocket serverSocket) throws IOException
+ {
+ super(port, backlog);
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ this.serverSocket = serverSocket;
+ bind(new InetSocketAddress(port), backlog);
+ }
+ public SSLTestServerSocket(int port, int backlog, InetAddress bindAddr, int
timeout, int initialWrites, SSLServerSocket serverSocket) throws IOException
+ {
+ super(port, backlog, bindAddr);
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ this.serverSocket = serverSocket;
+ bind(new InetSocketAddress(bindAddr, port), 50);
+ }
+ public Socket accept() throws IOException
+ {
+ SSLSocket s1 = (SSLSocket) serverSocket.accept();
+ Socket s2 = new SSLTestSocket(timeout, initialWrites, s1);
+ return s2;
+ }
+ public void bind(SocketAddress endpoint, int backlog) throws IOException
+ {
+ log.info("serverSocket: " + serverSocket);
+ if (serverSocket != null) log.info("bound: " +
serverSocket.isBound());
+ if (serverSocket != null && !serverSocket.isBound())
+ {
+ log.info("binding " + serverSocket);
+ serverSocket.bind(endpoint, backlog);
+ }
+ }
+ public String toString()
+ {
+ return "SSLTestServerSocket[" + serverSocket.toString() +
"]";
+ }
+ public boolean getEnableSessionCreation()
+ {
+ return serverSocket.getEnableSessionCreation();
+ }
+ public String[] getEnabledCipherSuites()
+ {
+ return serverSocket.getEnabledCipherSuites();
+ }
+ public String[] getEnabledProtocols()
+ {
+ return serverSocket.getEnabledProtocols();
+ }
+ public InetAddress getInetAddress()
+ {
+ return serverSocket.getInetAddress();
+ }
+ public boolean getNeedClientAuth()
+ {
+ return serverSocket.getNeedClientAuth();
+ }
+ public String[] getSupportedCipherSuites()
+ {
+ return serverSocket.getSupportedCipherSuites();
+ }
+ public String[] getSupportedProtocols()
+ {
+ return serverSocket.getSupportedProtocols();
+ }
+ public boolean getUseClientMode()
+ {
+ return serverSocket.getUseClientMode();
+ }
+ public boolean getWantClientAuth()
+ {
+ return serverSocket.getWantClientAuth();
+ }
+ public void setEnableSessionCreation(boolean arg0)
+ {
+ serverSocket.setEnableSessionCreation(arg0);
+ }
+ public void setEnabledCipherSuites(String[] arg0)
+ {
+ serverSocket.setEnabledCipherSuites(arg0);
+ }
+ public void setEnabledProtocols(String[] arg0)
+ {
+ serverSocket.setEnabledProtocols(arg0);
+ }
+ public void setNeedClientAuth(boolean arg0)
+ {
+ serverSocket.setNeedClientAuth(arg0);
+ }
+ public void setUseClientMode(boolean arg0)
+ {
+ serverSocket.setUseClientMode(arg0);
+ }
+ public void setWantClientAuth(boolean arg0)
+ {
+ serverSocket.setWantClientAuth(arg0);
+ }
+ }
+
+
+ public static class SSLTestSocketFactory extends SocketFactory
+ {
+ int timeout;
+ int initialWrites;
+ SocketFactory factory;
+
+ public SSLTestSocketFactory() throws IOException
+ {
+ timeout = 5000;
+ initialWrites = -1;
+ setupFactory();
+ }
+ public SSLTestSocketFactory(int timeout, int initialWrites) throws IOException
+ {
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ setupFactory();
+ }
+ public Socket createSocket() throws IOException
+ {
+ log.info("callbackTest: " + callbackTest);
+ Socket s = null;
+ if (callbackTest)
+ {
+ s = factory.createSocket();
+ }
+ else
+ {
+ s = new TestSocket(timeout, initialWrites);
+ s = new SSLTestSocket(timeout, initialWrites, ((SSLSocket)
factory.createSocket()));
+ }
+ log.info(this + " returning " + s);
+ return s;
+ }
+ public Socket createSocket(String arg0, int arg1) throws IOException,
UnknownHostException
+ {
+ log.info("callbackTest: " + callbackTest);
+ Socket s = null;
+ if (callbackTest && arg1 != secondaryServerSocketPort)
+ {
+ s = factory.createSocket(arg0, arg1);
+ }
+ else
+ {
+ s = new TestSocket(timeout, initialWrites);
+ s = new SSLTestSocket(arg0, arg1, timeout, initialWrites, ((SSLSocket)
factory.createSocket()));
+ }
+ log.info(this + " returning " + s);
+ return s;
+ }
+
+ public Socket createSocket(InetAddress arg0, int arg1) throws IOException
+ {
+ log.info("callbackTest: " + callbackTest);
+ Socket s = null;
+ if (callbackTest && arg1 != secondaryServerSocketPort)
+ {
+ s = factory.createSocket(arg0, arg1);
+ }
+ else
+ {
+ s = new TestSocket(timeout, initialWrites);
+ s = new SSLTestSocket(arg0, arg1, timeout, initialWrites, ((SSLSocket)
factory.createSocket()));
+ }
+ log.info(this + " returning " + s);
+ return s;
+ }
+
+ public Socket createSocket(String arg0, int arg1, InetAddress arg2, int arg3)
throws IOException, UnknownHostException
+ {
+ log.info("callbackTest: " + callbackTest);
+ Socket s = null;
+ if (callbackTest && arg1 != secondaryServerSocketPort)
+ {
+ s = factory.createSocket(arg0, arg1);
+ }
+ else
+ {
+ s = new TestSocket(timeout, initialWrites);
+ s = new SSLTestSocket(arg0, arg1, arg2, arg3, timeout, initialWrites,
((SSLSocket) factory.createSocket()));
+ }
+ log.info(this + " returning " + s);
+ return s;
+ }
+
+ public Socket createSocket(InetAddress arg0, int arg1, InetAddress arg2, int arg3)
throws IOException
+ {
+ log.info("callbackTest: " + callbackTest);
+ Socket s = null;
+ if (callbackTest && arg1 != secondaryServerSocketPort)
+ {
+ s = factory.createSocket(arg0, arg1);
+ }
+ else
+ {
+ s = new TestSocket(timeout, initialWrites);
+ s = new SSLTestSocket(arg0, arg1, arg2, arg3, timeout, initialWrites,
((SSLSocket) factory.createSocket()));
+ }
+ log.info(this + " returning " + s);
+ return s;
+ }
+
+ protected void setupFactory() throws IOException
+ {
+ SSLSocketBuilder sslSocketBuilder = new SSLSocketBuilder();
+ sslSocketBuilder.setUseSSLServerSocketFactory(false);
+ factory = sslSocketBuilder.createSSLSocketFactory();
+ }
+ }
+
+ static class SSLTestSocket extends SSLSocket
+ {
+ int timeout;
+ int initialWrites;
+ SSLSocket socket;
+ SocketAddress endpoint;
+
+ public SSLTestSocket(int timeout, int initialWrites, SSLSocket socket)
+ {
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ this.socket = socket;
+ }
+ public SSLTestSocket(String host, int port, int timeout, int initialWrites,
SSLSocket socket) throws UnknownHostException, IOException
+ {
+ super(host, port);
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ this.socket = socket;
+ connect(new InetSocketAddress(host, port), timeout);
+ }
+ public SSLTestSocket(InetAddress address, int port, int timeout, int initialWrites,
SSLSocket socket) throws IOException
+ {
+ super(address, port);
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ this.socket = socket;
+ connect(new InetSocketAddress(address, port), timeout);
+ }
+ public SSLTestSocket(String host, int port, InetAddress localAddr, int localPort,
int timeout, int initialWrites, SSLSocket socket) throws IOException
+ {
+ super(host, port, localAddr, localPort);
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ this.socket = socket;
+ bind(new InetSocketAddress(localAddr, localPort));
+ connect(new InetSocketAddress(host, port), timeout);
+ }
+ public SSLTestSocket(InetAddress address, int port, InetAddress localAddr, int
localPort, int timeout, int initialWrites, SSLSocket socket) throws IOException
+ {
+ super(address, port, localAddr, localPort);
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ this.socket = socket;
+ bind(new InetSocketAddress(localAddr, localPort));
+ connect(new InetSocketAddress(address, port), timeout);
+ }
+ public String toString()
+ {
+ return "SSLTestSocket[" + socket.toString() + "]";
+ }
+ public InputStream getInputStream() throws IOException
+ {
+ return socket.getInputStream();
+ }
+ public OutputStream getOutputStream() throws IOException
+ {
+ return new TestOutputStream(socket.getOutputStream(), timeout, initialWrites);
+ }
+ public void addHandshakeCompletedListener(HandshakeCompletedListener listener)
+ {
+ socket.addHandshakeCompletedListener(listener);
+ }
+ public void bind(SocketAddress bindpoint) throws IOException
+ {
+ if (socket != null)
+ socket.bind(bindpoint);
+ }
+ public void connect(SocketAddress endpoint) throws IOException
+ {
+ if (socket != null)
+ socket.connect(endpoint);
+ }
+ public void connect(SocketAddress endpoint, int timeout) throws IOException
+ {
+ socket.connect(endpoint, timeout);
+ }
+ public boolean getEnableSessionCreation()
+ {
+ return socket.getEnableSessionCreation();
+ }
+ public String[] getEnabledCipherSuites()
+ {
+ return socket.getEnabledCipherSuites();
+ }
+ public String[] getEnabledProtocols()
+ {
+ return socket.getEnabledProtocols();
+ }
+ public InetAddress getInetAddress()
+ {
+ return socket.getInetAddress();
+ }
+ public boolean getNeedClientAuth()
+ {
+ return socket.getNeedClientAuth();
+ }
+ public SSLSession getSession()
+ {
+ return socket.getSession();
+ }
+ public String[] getSupportedCipherSuites()
+ {
+ return socket.getSupportedCipherSuites();
+ }
+ public String[] getSupportedProtocols()
+ {
+ return socket.getSupportedProtocols();
+ }
+ public boolean getUseClientMode()
+ {
+ return socket.getUseClientMode();
+ }
+ public boolean getWantClientAuth()
+ {
+ return socket.getWantClientAuth();
+ }
+ public void removeHandshakeCompletedListener(HandshakeCompletedListener listener)
+ {
+ socket.removeHandshakeCompletedListener(listener);
+ }
+ public void setEnableSessionCreation(boolean flag)
+ {
+ socket.setEnableSessionCreation(flag);
+ }
+ public void setEnabledCipherSuites(String[] suites)
+ {
+ socket.setEnabledCipherSuites(suites);
+ }
+ public void setEnabledProtocols(String[] protocols)
+ {
+ socket.setEnabledProtocols(protocols);
+ }
+ public void setNeedClientAuth(boolean need)
+ {
+ socket.setNeedClientAuth(need);
+ }
+ public void setUseClientMode(boolean mode)
+ {
+ socket.setUseClientMode(mode);
+ }
+ public void setWantClientAuth(boolean want)
+ {
+ socket.setWantClientAuth(want);
+ }
+ public void startHandshake() throws IOException
+ {
+ socket.startHandshake();
+ }
+ }
}
\ No newline at end of file
Property changes on:
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/SSLWriteTimeoutTestParent.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified:
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/ServerThreadReuseAfterTimeoutTestCase.java
===================================================================
---
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/ServerThreadReuseAfterTimeoutTestCase.java 2010-08-05
02:14:13 UTC (rev 6047)
+++
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/ServerThreadReuseAfterTimeoutTestCase.java 2010-08-05
02:15:19 UTC (rev 6048)
@@ -1,315 +1,315 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* This is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Lesser General Public License as
-* published by the Free Software Foundation; either version 2.1 of
-* the License, or (at your option) any later version.
-*
-* This software is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this software; if not, write to the Free
-* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-* 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
-*/
-package org.jboss.test.remoting.transport.socket.timeout;
-
-import java.lang.reflect.Field;
-import java.net.InetAddress;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Set;
-
-import javax.management.MBeanServer;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.ConsoleAppender;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.apache.log4j.PatternLayout;
-import org.jboss.logging.XLevel;
-import org.jboss.remoting.Client;
-import org.jboss.remoting.InvocationRequest;
-import org.jboss.remoting.InvokerLocator;
-import org.jboss.remoting.ServerInvocationHandler;
-import org.jboss.remoting.ServerInvoker;
-import org.jboss.remoting.callback.Callback;
-import org.jboss.remoting.callback.HandleCallbackException;
-import org.jboss.remoting.callback.InvokerCallbackHandler;
-import org.jboss.remoting.transport.Connector;
-import org.jboss.remoting.transport.PortUtil;
-import org.jboss.remoting.transport.socket.LRUPool;
-import org.jboss.remoting.transport.socket.ServerThread;
-import org.jboss.remoting.transport.socket.SocketServerInvoker;
-
-
-/**
- *
- * Unit test for JBREM-1002.
- *
- * @author <a href="ron.sigal(a)jboss.com">Ron Sigal</a>
- * @version $Revision: 1.1 $
- * <p>
- * Copyright Jun 22, 2008
- * </p>
- */
-public class ServerThreadReuseAfterTimeoutTestCase extends TestCase
-{
- private static Logger log =
Logger.getLogger(ServerThreadReuseAfterTimeoutTestCase.class);
-
- private static boolean firstTime = true;
-
- protected String host;
- protected int port;
- protected String locatorURI;
- protected InvokerLocator serverLocator;
- protected Connector connector;
- protected TestInvocationHandler invocationHandler;
-
-
- public void setUp() throws Exception
- {
- if (firstTime)
- {
- firstTime = false;
- Logger.getLogger("org.jboss.remoting").setLevel(XLevel.INFO);
- Logger.getLogger("org.jboss.test.remoting").setLevel(Level.INFO);
- String pattern = "[%d{ABSOLUTE}] [%t] %5p (%F:%L) - %m%n";
- PatternLayout layout = new PatternLayout(pattern);
- ConsoleAppender consoleAppender = new ConsoleAppender(layout);
- Logger.getRootLogger().addAppender(consoleAppender);
- }
- }
-
-
- public void tearDown()
- {
- }
-
-
- public void testJavaSerializationDefault() throws Throwable
- {
- log.info("entering " + getName());
- Map config = new HashMap();
- doJavaSerializationTest(config);
- log.info(getName() + " PASSES");
- }
-
-
- public void testJavaSerializationConfigured() throws Throwable
- {
- log.info("entering " + getName());
- Map config = new HashMap();
- config.put(ServerThread.CONTINUE_AFTER_TIMEOUT, "false");
- doJavaSerializationTest(config);
- log.info(getName() + " PASSES");
- }
-
-
- public void testJBossSerializationDefault() throws Throwable
- {
- log.info("entering " + getName());
- Map config = new HashMap();
- doJBossSerializationTest(config);
- log.info(getName() + " PASSES");
- }
-
-
- public void testJBossSerializationConfigured() throws Throwable
- {
- log.info("entering " + getName());
- Map config = new HashMap();
- config.put(ServerThread.CONTINUE_AFTER_TIMEOUT, "true");
- doJBossSerializationTest(config);
- log.info(getName() + " PASSES");
- }
-
-
- public void doJavaSerializationTest(Map clientConfig) throws Throwable
- {
- log.info("entering " + getName());
-
- // Start server.
- setupServer("java");
-
- // Create client.
- InvokerLocator clientLocator = new InvokerLocator(locatorURI);
- clientConfig = new HashMap();
- clientConfig.put(InvokerLocator.FORCE_REMOTE, "true");
- addExtraClientConfig(clientConfig);
- Client client = new Client(clientLocator, clientConfig);
- client.connect();
- log.info("client is connected");
-
- // Test connections.
- assertEquals("abc", client.invoke("abc"));
- log.info("connection is good");
-
- // Get ServerThread.
- SocketServerInvoker invoker = (SocketServerInvoker) connector.getServerInvoker();
- Field field = SocketServerInvoker.class.getDeclaredField("clientpool");
- field.setAccessible(true);
- LRUPool clientpool = (LRUPool) field.get(invoker);
- assertEquals(1, clientpool.size());
- Set s = clientpool.getContents();
- ServerThread serverThread1 = (ServerThread) s.iterator().next();
-
- // Get threadpool.
- field = SocketServerInvoker.class.getDeclaredField("threadpool");
- field.setAccessible(true);
- LinkedList threadpool = (LinkedList) field.get(invoker);
- assertEquals(0, threadpool.size());
-
- // Wait for ServerThread to time out.
- Thread.sleep(6000);
- for (int i = 0; i < 5; i++)
- {
- Thread.sleep(2000);
- if (clientpool.size() == 0) break;
- }
-
- if (clientpool.size() > 0)
- {
- fail("expect clientpool.size() == 0");
- }
-
- // Verify original ServerThread was returned to threadpool.
- assertEquals(1, threadpool.size());
- assertEquals(serverThread1, threadpool.iterator().next());
-
- // Make another invocation and verify ServerThread was reused.
- client.invoke("xyz");
- assertEquals(1, clientpool.size());
- s = clientpool.getContents();
- ServerThread serverThread2 = (ServerThread) s.iterator().next();
- assertEquals(serverThread1, serverThread2);
-
- client.disconnect();
- shutdownServer();
- log.info(getName() + " PASSES");
- }
-
-
- public void doJBossSerializationTest(Map clientConfig) throws Throwable
- {
- log.info("entering " + getName());
-
- // Start server.
- setupServer("jboss");
-
- // Create client.
- InvokerLocator clientLocator = new InvokerLocator(locatorURI);
- clientConfig = new HashMap();
- clientConfig.put(InvokerLocator.FORCE_REMOTE, "true");
- addExtraClientConfig(clientConfig);
- Client client = new Client(clientLocator, clientConfig);
- client.connect();
- log.info("client is connected");
-
- // Test connections.
- assertEquals("abc", client.invoke("abc"));
- log.info("connection is good");
-
- // Get clientpool and ServerThread.
- SocketServerInvoker invoker = (SocketServerInvoker) connector.getServerInvoker();
- Field field = SocketServerInvoker.class.getDeclaredField("clientpool");
- field.setAccessible(true);
- LRUPool clientpool = (LRUPool) field.get(invoker);
- assertEquals(1, clientpool.size());
- Set clientpoolContents = clientpool.getContents();
- ServerThread serverThread1 = (ServerThread) clientpoolContents.iterator().next();
-
- // Get threadpool.
- field = SocketServerInvoker.class.getDeclaredField("threadpool");
- field.setAccessible(true);
- LinkedList threadpool = (LinkedList) field.get(invoker);
- assertEquals(0, threadpool.size());
-
- // Wait for ServerThread to time out.
- Thread.sleep(8000);
-
- // Verify original ServerThread remains in clientpool.
- assertEquals(0, threadpool.size());
- assertEquals(1, clientpool.size());
- clientpoolContents = clientpool.getContents();
- assertEquals(serverThread1, clientpoolContents.iterator().next());
-
- // Make another invocation and verify ServerThread was reused.
- client.invoke("xyz");
- assertEquals(1, clientpool.size());
- clientpoolContents = clientpool.getContents();
- ServerThread serverThread2 = (ServerThread) clientpoolContents.iterator().next();
- assertEquals(serverThread1, serverThread2);
-
- client.disconnect();
- shutdownServer();
- log.info(getName() + " PASSES");
- }
-
-
- protected String getTransport()
- {
- return "socket";
- }
-
-
- protected void addExtraClientConfig(Map config) {}
- protected void addExtraServerConfig(Map config) {}
-
-
- protected void setupServer(String serializationType) throws Exception
- {
- host = InetAddress.getLocalHost().getHostAddress();
- port = PortUtil.findFreePort(host);
- locatorURI = getTransport() + "://" + host + ":" + port +
"/?timeout=4000";
- locatorURI += "&serializationtype=" + serializationType;
- serverLocator = new InvokerLocator(locatorURI);
- log.info("Starting remoting server with locator uri of: " + locatorURI);
- HashMap config = new HashMap();
- config.put(InvokerLocator.FORCE_REMOTE, "true");
- addExtraServerConfig(config);
- connector = new Connector(serverLocator, config);
- connector.create();
- invocationHandler = new TestInvocationHandler();
- connector.addInvocationHandler("test", invocationHandler);
- connector.start();
- }
-
-
- protected void shutdownServer() throws Exception
- {
- if (connector != null)
- connector.stop();
- }
-
-
- static class TestInvocationHandler implements ServerInvocationHandler
- {
- public void addListener(InvokerCallbackHandler callbackHandler) {}
- public Object invoke(final InvocationRequest invocation) throws Throwable
- {
- return invocation.getParameter();
- }
- public void removeListener(InvokerCallbackHandler callbackHandler) {}
- public void setMBeanServer(MBeanServer server) {}
- public void setInvoker(ServerInvoker invoker) {}
- }
-
-
- static class TestCallbackHandler implements InvokerCallbackHandler
- {
- public void handleCallback(Callback callback) throws HandleCallbackException
- {
- log.info("received callback");
- }
- }
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+*/
+package org.jboss.test.remoting.transport.socket.timeout;
+
+import java.lang.reflect.Field;
+import java.net.InetAddress;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Set;
+
+import javax.management.MBeanServer;
+
+import junit.framework.TestCase;
+
+import org.apache.log4j.ConsoleAppender;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.apache.log4j.PatternLayout;
+import org.jboss.logging.XLevel;
+import org.jboss.remoting.Client;
+import org.jboss.remoting.InvocationRequest;
+import org.jboss.remoting.InvokerLocator;
+import org.jboss.remoting.ServerInvocationHandler;
+import org.jboss.remoting.ServerInvoker;
+import org.jboss.remoting.callback.Callback;
+import org.jboss.remoting.callback.HandleCallbackException;
+import org.jboss.remoting.callback.InvokerCallbackHandler;
+import org.jboss.remoting.transport.Connector;
+import org.jboss.remoting.transport.PortUtil;
+import org.jboss.remoting.transport.socket.LRUPool;
+import org.jboss.remoting.transport.socket.ServerThread;
+import org.jboss.remoting.transport.socket.SocketServerInvoker;
+
+
+/**
+ *
+ * Unit test for JBREM-1002.
+ *
+ * @author <a href="ron.sigal(a)jboss.com">Ron Sigal</a>
+ * @version $Revision: 1.1 $
+ * <p>
+ * Copyright Jun 22, 2008
+ * </p>
+ */
+public class ServerThreadReuseAfterTimeoutTestCase extends TestCase
+{
+ private static Logger log =
Logger.getLogger(ServerThreadReuseAfterTimeoutTestCase.class);
+
+ private static boolean firstTime = true;
+
+ protected String host;
+ protected int port;
+ protected String locatorURI;
+ protected InvokerLocator serverLocator;
+ protected Connector connector;
+ protected TestInvocationHandler invocationHandler;
+
+
+ public void setUp() throws Exception
+ {
+ if (firstTime)
+ {
+ firstTime = false;
+ Logger.getLogger("org.jboss.remoting").setLevel(XLevel.INFO);
+ Logger.getLogger("org.jboss.test.remoting").setLevel(Level.INFO);
+ String pattern = "[%d{ABSOLUTE}] [%t] %5p (%F:%L) - %m%n";
+ PatternLayout layout = new PatternLayout(pattern);
+ ConsoleAppender consoleAppender = new ConsoleAppender(layout);
+ Logger.getRootLogger().addAppender(consoleAppender);
+ }
+ }
+
+
+ public void tearDown()
+ {
+ }
+
+
+ public void testJavaSerializationDefault() throws Throwable
+ {
+ log.info("entering " + getName());
+ Map config = new HashMap();
+ doJavaSerializationTest(config);
+ log.info(getName() + " PASSES");
+ }
+
+
+ public void testJavaSerializationConfigured() throws Throwable
+ {
+ log.info("entering " + getName());
+ Map config = new HashMap();
+ config.put(ServerThread.CONTINUE_AFTER_TIMEOUT, "false");
+ doJavaSerializationTest(config);
+ log.info(getName() + " PASSES");
+ }
+
+
+ public void testJBossSerializationDefault() throws Throwable
+ {
+ log.info("entering " + getName());
+ Map config = new HashMap();
+ doJBossSerializationTest(config);
+ log.info(getName() + " PASSES");
+ }
+
+
+ public void testJBossSerializationConfigured() throws Throwable
+ {
+ log.info("entering " + getName());
+ Map config = new HashMap();
+ config.put(ServerThread.CONTINUE_AFTER_TIMEOUT, "true");
+ doJBossSerializationTest(config);
+ log.info(getName() + " PASSES");
+ }
+
+
+ public void doJavaSerializationTest(Map clientConfig) throws Throwable
+ {
+ log.info("entering " + getName());
+
+ // Start server.
+ setupServer("java");
+
+ // Create client.
+ InvokerLocator clientLocator = new InvokerLocator(locatorURI);
+ clientConfig = new HashMap();
+ clientConfig.put(InvokerLocator.FORCE_REMOTE, "true");
+ addExtraClientConfig(clientConfig);
+ Client client = new Client(clientLocator, clientConfig);
+ client.connect();
+ log.info("client is connected");
+
+ // Test connections.
+ assertEquals("abc", client.invoke("abc"));
+ log.info("connection is good");
+
+ // Get ServerThread.
+ SocketServerInvoker invoker = (SocketServerInvoker) connector.getServerInvoker();
+ Field field = SocketServerInvoker.class.getDeclaredField("clientpool");
+ field.setAccessible(true);
+ LRUPool clientpool = (LRUPool) field.get(invoker);
+ assertEquals(1, clientpool.size());
+ Set s = clientpool.getContents();
+ ServerThread serverThread1 = (ServerThread) s.iterator().next();
+
+ // Get threadpool.
+ field = SocketServerInvoker.class.getDeclaredField("threadpool");
+ field.setAccessible(true);
+ LinkedList threadpool = (LinkedList) field.get(invoker);
+ assertEquals(0, threadpool.size());
+
+ // Wait for ServerThread to time out.
+ Thread.sleep(6000);
+ for (int i = 0; i < 5; i++)
+ {
+ Thread.sleep(2000);
+ if (clientpool.size() == 0) break;
+ }
+
+ if (clientpool.size() > 0)
+ {
+ fail("expect clientpool.size() == 0");
+ }
+
+ // Verify original ServerThread was returned to threadpool.
+ assertEquals(1, threadpool.size());
+ assertEquals(serverThread1, threadpool.iterator().next());
+
+ // Make another invocation and verify ServerThread was reused.
+ client.invoke("xyz");
+ assertEquals(1, clientpool.size());
+ s = clientpool.getContents();
+ ServerThread serverThread2 = (ServerThread) s.iterator().next();
+ assertEquals(serverThread1, serverThread2);
+
+ client.disconnect();
+ shutdownServer();
+ log.info(getName() + " PASSES");
+ }
+
+
+ public void doJBossSerializationTest(Map clientConfig) throws Throwable
+ {
+ log.info("entering " + getName());
+
+ // Start server.
+ setupServer("jboss");
+
+ // Create client.
+ InvokerLocator clientLocator = new InvokerLocator(locatorURI);
+ clientConfig = new HashMap();
+ clientConfig.put(InvokerLocator.FORCE_REMOTE, "true");
+ addExtraClientConfig(clientConfig);
+ Client client = new Client(clientLocator, clientConfig);
+ client.connect();
+ log.info("client is connected");
+
+ // Test connections.
+ assertEquals("abc", client.invoke("abc"));
+ log.info("connection is good");
+
+ // Get clientpool and ServerThread.
+ SocketServerInvoker invoker = (SocketServerInvoker) connector.getServerInvoker();
+ Field field = SocketServerInvoker.class.getDeclaredField("clientpool");
+ field.setAccessible(true);
+ LRUPool clientpool = (LRUPool) field.get(invoker);
+ assertEquals(1, clientpool.size());
+ Set clientpoolContents = clientpool.getContents();
+ ServerThread serverThread1 = (ServerThread) clientpoolContents.iterator().next();
+
+ // Get threadpool.
+ field = SocketServerInvoker.class.getDeclaredField("threadpool");
+ field.setAccessible(true);
+ LinkedList threadpool = (LinkedList) field.get(invoker);
+ assertEquals(0, threadpool.size());
+
+ // Wait for ServerThread to time out.
+ Thread.sleep(8000);
+
+ // Verify original ServerThread remains in clientpool.
+ assertEquals(0, threadpool.size());
+ assertEquals(1, clientpool.size());
+ clientpoolContents = clientpool.getContents();
+ assertEquals(serverThread1, clientpoolContents.iterator().next());
+
+ // Make another invocation and verify ServerThread was reused.
+ client.invoke("xyz");
+ assertEquals(1, clientpool.size());
+ clientpoolContents = clientpool.getContents();
+ ServerThread serverThread2 = (ServerThread) clientpoolContents.iterator().next();
+ assertEquals(serverThread1, serverThread2);
+
+ client.disconnect();
+ shutdownServer();
+ log.info(getName() + " PASSES");
+ }
+
+
+ protected String getTransport()
+ {
+ return "socket";
+ }
+
+
+ protected void addExtraClientConfig(Map config) {}
+ protected void addExtraServerConfig(Map config) {}
+
+
+ protected void setupServer(String serializationType) throws Exception
+ {
+ host = InetAddress.getLocalHost().getHostAddress();
+ port = PortUtil.findFreePort(host);
+ locatorURI = getTransport() + "://" + host + ":" + port +
"/?timeout=4000";
+ locatorURI += "&serializationtype=" + serializationType;
+ serverLocator = new InvokerLocator(locatorURI);
+ log.info("Starting remoting server with locator uri of: " + locatorURI);
+ HashMap config = new HashMap();
+ config.put(InvokerLocator.FORCE_REMOTE, "true");
+ addExtraServerConfig(config);
+ connector = new Connector(serverLocator, config);
+ connector.create();
+ invocationHandler = new TestInvocationHandler();
+ connector.addInvocationHandler("test", invocationHandler);
+ connector.start();
+ }
+
+
+ protected void shutdownServer() throws Exception
+ {
+ if (connector != null)
+ connector.stop();
+ }
+
+
+ static class TestInvocationHandler implements ServerInvocationHandler
+ {
+ public void addListener(InvokerCallbackHandler callbackHandler) {}
+ public Object invoke(final InvocationRequest invocation) throws Throwable
+ {
+ return invocation.getParameter();
+ }
+ public void removeListener(InvokerCallbackHandler callbackHandler) {}
+ public void setMBeanServer(MBeanServer server) {}
+ public void setInvoker(ServerInvoker invoker) {}
+ }
+
+
+ static class TestCallbackHandler implements InvokerCallbackHandler
+ {
+ public void handleCallback(Callback callback) throws HandleCallbackException
+ {
+ log.info("received callback");
+ }
+ }
}
\ No newline at end of file
Property changes on:
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/ServerThreadReuseAfterTimeoutTestCase.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified:
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/SocketDefaultTimeoutTestCase.java
===================================================================
---
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/SocketDefaultTimeoutTestCase.java 2010-08-05
02:14:13 UTC (rev 6047)
+++
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/SocketDefaultTimeoutTestCase.java 2010-08-05
02:15:19 UTC (rev 6048)
@@ -1,241 +1,241 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2010, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-
-package org.jboss.test.remoting.transport.socket.timeout;
-
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.net.InetAddress;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.management.MBeanServer;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.ConsoleAppender;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.apache.log4j.PatternLayout;
-import org.jboss.logging.XLevel;
-import org.jboss.remoting.Client;
-import org.jboss.remoting.InvocationRequest;
-import org.jboss.remoting.InvokerLocator;
-import org.jboss.remoting.InvokerRegistry;
-import org.jboss.remoting.ServerInvocationHandler;
-import org.jboss.remoting.ServerInvoker;
-import org.jboss.remoting.callback.InvokerCallbackHandler;
-import org.jboss.remoting.transport.ClientFactory;
-import org.jboss.remoting.transport.ClientInvoker;
-import org.jboss.remoting.transport.Connector;
-import org.jboss.remoting.transport.PortUtil;
-import org.jboss.remoting.transport.ServerFactory;
-import org.jboss.remoting.transport.socket.ServerAddress;
-import org.jboss.remoting.transport.socket.SocketClientInvoker;
-import org.jboss.remoting.transport.socket.SocketServerInvoker;
-
-
-/**
- * Unit tests for JBREM-1188.
- *
- * @author <a href="ron.sigal(a)jboss.com">Ron Sigal</a>
- * @version $Revision: 1.1 $
- * <p>
- * Copyright Feb 16, 2010
- */
-public class SocketDefaultTimeoutTestCase extends TestCase
-{
- private static Logger log = Logger.getLogger(SocketDefaultTimeoutTestCase.class);
-
- private static boolean firstTime = true;
-
- protected String host;
- protected int port;
- protected String locatorURI;
- protected InvokerLocator serverLocator;
- protected Connector connector;
- protected TestInvocationHandler invocationHandler;
-
-
- public void setUp() throws Exception
- {
- if (firstTime)
- {
- firstTime = false;
- Logger.getLogger("org.jboss.remoting").setLevel(XLevel.INFO);
- Logger.getLogger("org.jboss.test.remoting").setLevel(Level.INFO);
- String pattern = "[%d{ABSOLUTE}] [%t] %5p (%F:%L) - %m%n";
- PatternLayout layout = new PatternLayout(pattern);
- ConsoleAppender consoleAppender = new ConsoleAppender(layout);
- Logger.getRootLogger().addAppender(consoleAppender);
- }
- InvokerRegistry.registerInvokerFactories(getTransport(), getClientFactoryClass(),
TestServerFactory.class);
- }
-
-
- public void tearDown()
- {
- }
-
-
- public void testDefaultTimeout() throws Throwable
- {
- log.info("entering " + getName());
-
- // Start server.
- setupServer();
-
- // Create client.
- InvokerLocator clientLocator = new InvokerLocator(locatorURI);
- HashMap clientConfig = new HashMap();
- clientConfig.put(InvokerLocator.FORCE_REMOTE, "true");
- addExtraClientConfig(clientConfig);
- Client client = new Client(clientLocator, clientConfig);
- client.connect();
- log.info("client is connected");
- Method getServerAddress =
getClientInvokerClass().getMethod("getServerAddress", new Class[]{});
- getServerAddress.setAccessible(true);
- ClientInvoker clientInvoker = client.getInvoker();
- ServerAddress address = (ServerAddress) getServerAddress.invoke(clientInvoker, new
Object[]{});
- log.info("timeout in use: " + address.timeout);
- assertEquals(SocketClientInvoker.SO_TIMEOUT_DEFAULT, address.timeout);
-
- client.disconnect();
- shutdownServer();
- log.info(getName() + " PASSES");
- }
-
-
- protected String getTransport()
- {
- return "test";
- }
-
-
- protected void addExtraClientConfig(Map config) {}
- protected void addExtraServerConfig(Map config) {}
-
-
- protected void setupServer() throws Exception
- {
- host = InetAddress.getLocalHost().getHostAddress();
- port = PortUtil.findFreePort(host);
- locatorURI = getTransport() + "://" + host + ":" + port;
- String metadata = System.getProperty("remoting.metadata");
- if (metadata != null)
- {
- locatorURI += "/?" + metadata;
- }
- serverLocator = new InvokerLocator(locatorURI);
- log.info("Starting remoting server with locator uri of: " + locatorURI);
- HashMap config = new HashMap();
- config.put(InvokerLocator.FORCE_REMOTE, "true");
- addExtraServerConfig(config);
- connector = new Connector(serverLocator, config);
- connector.create();
- invocationHandler = new TestInvocationHandler();
- connector.addInvocationHandler("test", invocationHandler);
- connector.start();
- }
-
-
- protected void shutdownServer() throws Exception
- {
- if (connector != null)
- connector.stop();
- }
-
-
- protected Class getClientFactoryClass()
- {
- return TestSocketClientFactory.class;
- }
-
-
- protected Class getClientInvokerClass()
- {
- return TestSocketClientInvoker.class;
- }
-
-
- static class TestInvocationHandler implements ServerInvocationHandler
- {
- public void addListener(InvokerCallbackHandler callbackHandler) {}
- public Object invoke(final InvocationRequest invocation) throws Throwable
- {
- return invocation.getParameter();
- }
- public void removeListener(InvokerCallbackHandler callbackHandler) {}
- public void setMBeanServer(MBeanServer server) {}
- public void setInvoker(ServerInvoker invoker) {}
- }
-
-
- static public class TestSocketClientInvoker extends SocketClientInvoker
- {
- public TestSocketClientInvoker(InvokerLocator locator, Map configuration) throws
IOException
- {
- super(locator, configuration);
- }
- public TestSocketClientInvoker(InvokerLocator locator)
- {
- super(locator);
- }
- public ServerAddress getServerAddress()
- {
- return address;
- }
- public String toString()
- {
- return "TestSocketClientInvoker";
- }
- }
-
-
- public static class TestSocketClientFactory implements ClientFactory
- {
- public ClientInvoker createClientInvoker(InvokerLocator locator, Map config) throws
IOException
- {
- ClientInvoker clientInvoker = new TestSocketClientInvoker(locator, config);
- log.info("TestClientFaotory.createClientInvoker() returning " +
clientInvoker);
- return clientInvoker;
- }
- public boolean supportsSSL()
- {
- return false;
- }
- }
-
-
- public static class TestServerFactory implements ServerFactory
- {
- public ServerInvoker createServerInvoker(InvokerLocator locator, Map config) throws
IOException
- {
- log.info("TestServerFactory.createServerInvoker() called");
- return new SocketServerInvoker(locator, config);
- }
- public boolean supportsSSL()
- {
- return false;
- }
- }
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.jboss.test.remoting.transport.socket.timeout;
+
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.net.InetAddress;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.management.MBeanServer;
+
+import junit.framework.TestCase;
+
+import org.apache.log4j.ConsoleAppender;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.apache.log4j.PatternLayout;
+import org.jboss.logging.XLevel;
+import org.jboss.remoting.Client;
+import org.jboss.remoting.InvocationRequest;
+import org.jboss.remoting.InvokerLocator;
+import org.jboss.remoting.InvokerRegistry;
+import org.jboss.remoting.ServerInvocationHandler;
+import org.jboss.remoting.ServerInvoker;
+import org.jboss.remoting.callback.InvokerCallbackHandler;
+import org.jboss.remoting.transport.ClientFactory;
+import org.jboss.remoting.transport.ClientInvoker;
+import org.jboss.remoting.transport.Connector;
+import org.jboss.remoting.transport.PortUtil;
+import org.jboss.remoting.transport.ServerFactory;
+import org.jboss.remoting.transport.socket.ServerAddress;
+import org.jboss.remoting.transport.socket.SocketClientInvoker;
+import org.jboss.remoting.transport.socket.SocketServerInvoker;
+
+
+/**
+ * Unit tests for JBREM-1188.
+ *
+ * @author <a href="ron.sigal(a)jboss.com">Ron Sigal</a>
+ * @version $Revision: 1.1 $
+ * <p>
+ * Copyright Feb 16, 2010
+ */
+public class SocketDefaultTimeoutTestCase extends TestCase
+{
+ private static Logger log = Logger.getLogger(SocketDefaultTimeoutTestCase.class);
+
+ private static boolean firstTime = true;
+
+ protected String host;
+ protected int port;
+ protected String locatorURI;
+ protected InvokerLocator serverLocator;
+ protected Connector connector;
+ protected TestInvocationHandler invocationHandler;
+
+
+ public void setUp() throws Exception
+ {
+ if (firstTime)
+ {
+ firstTime = false;
+ Logger.getLogger("org.jboss.remoting").setLevel(XLevel.INFO);
+ Logger.getLogger("org.jboss.test.remoting").setLevel(Level.INFO);
+ String pattern = "[%d{ABSOLUTE}] [%t] %5p (%F:%L) - %m%n";
+ PatternLayout layout = new PatternLayout(pattern);
+ ConsoleAppender consoleAppender = new ConsoleAppender(layout);
+ Logger.getRootLogger().addAppender(consoleAppender);
+ }
+ InvokerRegistry.registerInvokerFactories(getTransport(), getClientFactoryClass(),
TestServerFactory.class);
+ }
+
+
+ public void tearDown()
+ {
+ }
+
+
+ public void testDefaultTimeout() throws Throwable
+ {
+ log.info("entering " + getName());
+
+ // Start server.
+ setupServer();
+
+ // Create client.
+ InvokerLocator clientLocator = new InvokerLocator(locatorURI);
+ HashMap clientConfig = new HashMap();
+ clientConfig.put(InvokerLocator.FORCE_REMOTE, "true");
+ addExtraClientConfig(clientConfig);
+ Client client = new Client(clientLocator, clientConfig);
+ client.connect();
+ log.info("client is connected");
+ Method getServerAddress =
getClientInvokerClass().getMethod("getServerAddress", new Class[]{});
+ getServerAddress.setAccessible(true);
+ ClientInvoker clientInvoker = client.getInvoker();
+ ServerAddress address = (ServerAddress) getServerAddress.invoke(clientInvoker, new
Object[]{});
+ log.info("timeout in use: " + address.timeout);
+ assertEquals(SocketClientInvoker.SO_TIMEOUT_DEFAULT, address.timeout);
+
+ client.disconnect();
+ shutdownServer();
+ log.info(getName() + " PASSES");
+ }
+
+
+ protected String getTransport()
+ {
+ return "test";
+ }
+
+
+ protected void addExtraClientConfig(Map config) {}
+ protected void addExtraServerConfig(Map config) {}
+
+
+ protected void setupServer() throws Exception
+ {
+ host = InetAddress.getLocalHost().getHostAddress();
+ port = PortUtil.findFreePort(host);
+ locatorURI = getTransport() + "://" + host + ":" + port;
+ String metadata = System.getProperty("remoting.metadata");
+ if (metadata != null)
+ {
+ locatorURI += "/?" + metadata;
+ }
+ serverLocator = new InvokerLocator(locatorURI);
+ log.info("Starting remoting server with locator uri of: " + locatorURI);
+ HashMap config = new HashMap();
+ config.put(InvokerLocator.FORCE_REMOTE, "true");
+ addExtraServerConfig(config);
+ connector = new Connector(serverLocator, config);
+ connector.create();
+ invocationHandler = new TestInvocationHandler();
+ connector.addInvocationHandler("test", invocationHandler);
+ connector.start();
+ }
+
+
+ protected void shutdownServer() throws Exception
+ {
+ if (connector != null)
+ connector.stop();
+ }
+
+
+ protected Class getClientFactoryClass()
+ {
+ return TestSocketClientFactory.class;
+ }
+
+
+ protected Class getClientInvokerClass()
+ {
+ return TestSocketClientInvoker.class;
+ }
+
+
+ static class TestInvocationHandler implements ServerInvocationHandler
+ {
+ public void addListener(InvokerCallbackHandler callbackHandler) {}
+ public Object invoke(final InvocationRequest invocation) throws Throwable
+ {
+ return invocation.getParameter();
+ }
+ public void removeListener(InvokerCallbackHandler callbackHandler) {}
+ public void setMBeanServer(MBeanServer server) {}
+ public void setInvoker(ServerInvoker invoker) {}
+ }
+
+
+ static public class TestSocketClientInvoker extends SocketClientInvoker
+ {
+ public TestSocketClientInvoker(InvokerLocator locator, Map configuration) throws
IOException
+ {
+ super(locator, configuration);
+ }
+ public TestSocketClientInvoker(InvokerLocator locator)
+ {
+ super(locator);
+ }
+ public ServerAddress getServerAddress()
+ {
+ return address;
+ }
+ public String toString()
+ {
+ return "TestSocketClientInvoker";
+ }
+ }
+
+
+ public static class TestSocketClientFactory implements ClientFactory
+ {
+ public ClientInvoker createClientInvoker(InvokerLocator locator, Map config) throws
IOException
+ {
+ ClientInvoker clientInvoker = new TestSocketClientInvoker(locator, config);
+ log.info("TestClientFaotory.createClientInvoker() returning " +
clientInvoker);
+ return clientInvoker;
+ }
+ public boolean supportsSSL()
+ {
+ return false;
+ }
+ }
+
+
+ public static class TestServerFactory implements ServerFactory
+ {
+ public ServerInvoker createServerInvoker(InvokerLocator locator, Map config) throws
IOException
+ {
+ log.info("TestServerFactory.createServerInvoker() called");
+ return new SocketServerInvoker(locator, config);
+ }
+ public boolean supportsSSL()
+ {
+ return false;
+ }
+ }
}
\ No newline at end of file
Property changes on:
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/SocketDefaultTimeoutTestCase.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified:
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/SocketWriteTimeoutTestCase.java
===================================================================
---
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/SocketWriteTimeoutTestCase.java 2010-08-05
02:14:13 UTC (rev 6047)
+++
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/SocketWriteTimeoutTestCase.java 2010-08-05
02:15:19 UTC (rev 6048)
@@ -1,39 +1,39 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2009, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* This is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Lesser General Public License as
-* published by the Free Software Foundation; either version 2.1 of
-* the License, or (at your option) any later version.
-*
-* This software is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this software; if not, write to the Free
-* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-* 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
-*/
-package org.jboss.test.remoting.transport.socket.timeout;
-
-/**
- * Unit tests for JBREM-1120.
- *
- * @author <a href="ron.sigal(a)jboss.com">Ron Sigal</a>
- * @version $Rev$
- * <p>
- * Copyright Apr 22, 2009
- * </p>
- */
-public class SocketWriteTimeoutTestCase extends WriteTimeoutTestParent
-{
- protected String getTransport()
- {
- return "socket";
- }
-}
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+*/
+package org.jboss.test.remoting.transport.socket.timeout;
+
+/**
+ * Unit tests for JBREM-1120.
+ *
+ * @author <a href="ron.sigal(a)jboss.com">Ron Sigal</a>
+ * @version $Rev$
+ * <p>
+ * Copyright Apr 22, 2009
+ * </p>
+ */
+public class SocketWriteTimeoutTestCase extends WriteTimeoutTestParent
+{
+ protected String getTransport()
+ {
+ return "socket";
+ }
+}
Property changes on:
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/SocketWriteTimeoutTestCase.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified:
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/WriteTimeoutTestParent.java
===================================================================
---
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/WriteTimeoutTestParent.java 2010-08-05
02:14:13 UTC (rev 6047)
+++
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/WriteTimeoutTestParent.java 2010-08-05
02:15:19 UTC (rev 6048)
@@ -1,845 +1,845 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2009, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* This is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Lesser General Public License as
-* published by the Free Software Foundation; either version 2.1 of
-* the License, or (at your option) any later version.
-*
-* This software is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this software; if not, write to the Free
-* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-* 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
-*/
-package org.jboss.test.remoting.transport.socket.timeout;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.net.InetAddress;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.net.UnknownHostException;
-import java.rmi.MarshalException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import javax.management.MBeanServer;
-import javax.net.ServerSocketFactory;
-import javax.net.SocketFactory;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.ConsoleAppender;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.apache.log4j.PatternLayout;
-import org.jboss.logging.XLevel;
-import org.jboss.remoting.CannotConnectException;
-import org.jboss.remoting.Client;
-import org.jboss.remoting.InvocationRequest;
-import org.jboss.remoting.InvokerLocator;
-import org.jboss.remoting.Remoting;
-import org.jboss.remoting.ServerInvocationHandler;
-import org.jboss.remoting.ServerInvoker;
-import org.jboss.remoting.callback.Callback;
-import org.jboss.remoting.callback.HandleCallbackException;
-import org.jboss.remoting.callback.InvokerCallbackHandler;
-import org.jboss.remoting.transport.Connector;
-import org.jboss.remoting.transport.PortUtil;
-import org.jboss.remoting.transport.bisocket.Bisocket;
-import org.jboss.remoting.transport.socket.SocketServerInvoker;
-import org.jboss.remoting.transport.socket.SocketWrapper;
-
-
-/**
- * Unit tests for JBREM-1120.
- *
- * @author <a href="ron.sigal(a)jboss.com">Ron Sigal</a>
- * @version $Rev$
- * <p>
- * Copyright Apr 22, 2009
- * </p>
- */
-public abstract class WriteTimeoutTestParent extends TestCase
-{
- private static Logger log = Logger.getLogger(WriteTimeoutTestParent.class);
-
- private static boolean firstTime = true;
- protected static int secondaryServerSocketPort;
- protected static boolean callbackTest;
-
- protected String host;
- protected int port;
- protected String locatorURI;
- protected InvokerLocator serverLocator;
- protected Connector connector;
- protected TestInvocationHandler invocationHandler;
-
-
- public void setUp() throws Exception
- {
- if (firstTime)
- {
- firstTime = false;
- Logger.getLogger("org.jboss.remoting").setLevel(XLevel.INFO);
- Logger.getLogger("org.jboss.test.remoting").setLevel(Level.INFO);
- String pattern = "[%d{ABSOLUTE}] [%t] %5p (%F:%L) - %m%n";
- PatternLayout layout = new PatternLayout(pattern);
- ConsoleAppender consoleAppender = new ConsoleAppender(layout);
- Logger.getRootLogger().addAppender(consoleAppender);
- }
-
- TestOutputStream.counter = 0;
- callbackTest = false;
- }
-
-
- public void tearDown()
- {
- }
-
-
- public void testClientWriteTimeout() throws Throwable
- {
- log.info("entering " + getName());
-
- // Start server.
- setupServer(false, false, "", -1, -1);
-
- // Create client.
- InvokerLocator clientLocator = new InvokerLocator(locatorURI);
- HashMap clientConfig = new HashMap();
- clientConfig.put(InvokerLocator.FORCE_REMOTE, "true");
- clientConfig.put(SocketWrapper.WRITE_TIMEOUT, "1000");
- SocketFactory sf = (SocketFactory) getSocketFactoryConstructor().newInstance(new
Object[]{new Integer(5000), new Integer(1)});
- clientConfig.put(Remoting.CUSTOM_SOCKET_FACTORY, sf);
- addExtraClientConfig(clientConfig);
- Client client = new Client(clientLocator, clientConfig);
- client.connect();
- log.info("client is connected");
-
- log.info("**************************************");
- log.info("*** WorkerThread error is expected ***");
- log.info("**************************************");
-
- // Test client side write timeout.
- try
- {
- client.invoke("abc");
- }
- catch (MarshalException e)
- {
- log.info(e.getMessage());
- assertNotNull(e.getMessage());
- log.info("e.getMessage(): " + e.getMessage());
- assertTrue(e.getMessage().startsWith("Failed to communicate. Problem
during marshalling/unmarshalling"));
- assertTrue(e.getCause() instanceof IOException);
- IOException ioe = (IOException) e.getCause();
- assertEquals("closed", ioe.getMessage());
- log.info("got expected Exception");
- }
- catch (Throwable t)
- {
- log.error("got unexpected Exception", t);
- fail("got unexpected Exception");
- }
-
- client.disconnect();
- shutdownServer();
- log.info(getName() + " PASSES");
- }
-
-
- public void testServerWriteTimeout() throws Throwable
- {
- log.info("entering " + getName());
-
- // Start server.
- setupServer(true, false, "1000", 5000, 1);
-
- // Create client.
- InvokerLocator clientLocator = new InvokerLocator(locatorURI);
- HashMap clientConfig = new HashMap();
- clientConfig.put(InvokerLocator.FORCE_REMOTE, "true");
- clientConfig.put("numberOfCallRetries", "1");
- clientConfig.put("timeout", "10000");
- addExtraClientConfig(clientConfig);
- Client client = new Client(clientLocator, clientConfig);
- client.connect();
- log.info("client is connected");
-
- log.info("**************************************");
- log.info("*** WorkerThread error is expected ***");
- log.info("**************************************");
-
- // Test server side write timeout.
- try
- {
- client.invoke("abc");
- }
- catch (MarshalException e)
- {
- log.info(e.getMessage());
-// assertNotNull(e.getMessage());
-// assertTrue(e.getMessage().startsWith("Unable to perform
invocation"));
-// assertTrue(e.getCause() instanceof EOFException);
- log.info("got expected Exception");
- }
- catch (Throwable t)
- {
- log.error("got unexpected Exception", t);
- fail("got unexpected Exception");
- }
-
- // Test server invoker state.
- Thread.sleep(4000);
- SocketServerInvoker serverInvoker = (SocketServerInvoker)
connector.getServerInvoker();
- assertEquals(0, serverInvoker.getCurrentClientPoolSize());
- assertEquals(1, serverInvoker.getCurrentThreadPoolSize());
- log.info("used ServerThread has returned to threadPool");
-
- client.disconnect();
- shutdownServer();
- log.info(getName() + " PASSES");
- }
-
-
- public void testClientCallbackWriteTimeout() throws Throwable
- {
- log.info("entering " + getName());
-
- // Start server.
- if (isBisocket(getTransport()))
- {
- callbackTest = true;
- }
- setupServer(false, false, "", -1, -1);
-
- // Create client.
- InvokerLocator clientLocator = new InvokerLocator(locatorURI);
- HashMap clientConfig = new HashMap();
- clientConfig.put(InvokerLocator.FORCE_REMOTE, "true");
- clientConfig.put(SocketWrapper.WRITE_TIMEOUT, "1000");
- if (isBisocket(getTransport()))
- {
- SocketFactory sf = (SocketFactory) getSocketFactoryConstructor().newInstance(new
Object[]{new Integer(5000), new Integer(1)});
- clientConfig.put(Remoting.CUSTOM_SOCKET_FACTORY, sf);
- }
- else
- {
- ServerSocketFactory ssf = (ServerSocketFactory)
getServerSocketFactoryConstructor().newInstance(new Object[]{new Integer(5000), new
Integer(-1)});
- clientConfig.put(Remoting.CUSTOM_SERVER_SOCKET_FACTORY, ssf);
- }
- addExtraClientConfig(clientConfig);
- Client client = new Client(clientLocator, clientConfig);
- client.connect();
- log.info("client is connected");
-
- // Test connection
- client.invoke("abc");
- log.info("connection is good");
-
- // Test client callback write timeout.
- log.info("registering callback handler");
- log.info("**************************************");
- log.info("*** WorkerThread error is expected ***");
- log.info("**************************************");
- TestCallbackHandler callbackHandler = new TestCallbackHandler();
- HashMap metadata = new HashMap();
- if (isBisocket(getTransport()))
- {
-// metadata.put(SocketWrapper.WRITE_TIMEOUT, "1000");
- metadata.put(Remoting.SOCKET_FACTORY_NAME, getSocketFactoryClassName());
- metadata.put("numberOfCallRetries", "1");
- metadata.put(Bisocket.IS_CALLBACK_SERVER, "true");
- metadata.put(Bisocket.PING_FREQUENCY, "11111111");
- }
- else
- {
-// metadata.put(SocketWrapper.WRITE_TIMEOUT, "1000");
- metadata.put(ServerInvoker.SERVER_SOCKET_FACTORY,
getServerSocketFactoryClassName());
- metadata.put("numberOfCallRetries", "1");
- }
- client.addListener(callbackHandler, metadata, null, true);
- log.info("called Client.addListener()");
-
- // Test server invoker state.
- // Wait for local ServerThread to time out. Might take a while in bisocket
transports, since
- // the request to get a socket for the callback client invoker needs its own write
on the
- // control socket.
- Thread.sleep(20000);
- log.info("back from sleep");
- Set callbackConnectors = client.getCallbackConnectors(callbackHandler);
- assertEquals(1, callbackConnectors.size());
- Connector callbackConnector = (Connector) callbackConnectors.iterator().next();
- SocketServerInvoker serverInvoker = (SocketServerInvoker)
callbackConnector.getServerInvoker();
- assertEquals(0, serverInvoker.getCurrentClientPoolSize());
- assertEquals(1, serverInvoker.getCurrentThreadPoolSize());
- log.info("used ServerThread has returned to threadPool");
-
- client.disconnect();
- shutdownServer();
- log.info(getName() + " PASSES");
- }
-
-
- public void testServerCallbackWriteTimeout() throws Throwable
- {
- log.info("entering " + getName());
-
- // Start server.
- if (isBisocket(getTransport()))
- {
- callbackTest = true;
- setupServer(true, false, "1000", 5000, 1);
- }
- else
- {
- setupServer(false, true, "1000", 5000, 1);
- }
-
- // Create client.
- InvokerLocator clientLocator = new InvokerLocator(locatorURI);
- HashMap clientConfig = new HashMap();
- clientConfig.put(InvokerLocator.FORCE_REMOTE, "true");
- clientConfig.put("numberOfCallRetries", "1");
- addExtraClientConfig(clientConfig);
- Client client = new Client(clientLocator, clientConfig);
- client.connect();
- log.info("client is connected");
-
- // Test connection
- client.invoke("abc");
- log.info("connection is good");
-
- // Test server callback write timeout.
- log.info("registering callback handler");
- log.info("**************************************");
- log.info("*** WorkerThread error is expected ***");
- log.info("**************************************");
- HashMap metadata = new HashMap();
- if (isBisocket(getTransport()))
- {
- metadata.put(Bisocket.IS_CALLBACK_SERVER, "true");
- }
- TestCallbackHandler callbackHandler = new TestCallbackHandler();
- client.addListener(callbackHandler, metadata, null, true);
- log.info("added listener");
-
- // Test server invoker state.
- Thread.sleep(20000);
- log.info("waking up");
- Throwable t = invocationHandler.t;
- assertTrue(t instanceof HandleCallbackException);
- log.info("t.getCause:", t.getCause());
- if (t.getCause() instanceof MarshalException)
- {
- MarshalException e = (MarshalException) t.getCause();
- assertNotNull(e.getMessage());
- assertTrue(e.getMessage().startsWith("Failed to communicate. Problem
during marshalling/unmarshalling"));
- assertTrue(e.getCause() instanceof IOException);
- IOException ioe = (IOException) e.getCause();
- assertEquals("closed", ioe.getMessage());
- }
- else
- {
- assertTrue(t.getCause() instanceof CannotConnectException);
- log.info("t.getCause().getCause(): ", t.getCause().getCause());
- assertTrue(t.getCause().getCause() instanceof InvocationTargetException);
- log.info("t.getCause().getCause().getCause(): ",
t.getCause().getCause().getCause());
-// assertTrue(t.getCause().getCause().getCause() instanceof
SSLProtocolException);
- assertTrue(t.getCause().getCause().getCause() instanceof IOException);
- assertEquals("closed",
t.getCause().getCause().getCause().getMessage());
- }
- log.info("got expected Exception");
-
- client.disconnect();
- shutdownServer();
- log.info(getName() + " PASSES");
- }
-
-
- protected abstract String getTransport();
-
- protected boolean isBisocket(String transport)
- {
- return transport.indexOf("bisocket") >= 0;
- }
-
- protected String getServerSocketFactoryClassName()
- {
- return TestServerSocketFactory.class.getName();
- }
-
- protected Constructor getServerSocketFactoryConstructor() throws
NoSuchMethodException
- {
- return TestServerSocketFactory.class.getConstructor(new Class[]{int.class,
int.class});
- }
-
- protected String getSocketFactoryClassName()
- {
- return TestSocketFactory.class.getName();
- }
-
- protected Constructor getSocketFactoryConstructor() throws NoSuchMethodException
- {
- return TestSocketFactory.class.getConstructor(new Class[]{int.class, int.class});
- }
-
- protected void addExtraClientConfig(Map config) {}
- protected void addExtraServerConfig(Map config) {}
-
-
- protected void setupServer(boolean setWriteTimeout, boolean setCallbackWriteTimeout,
- String writeTimeout, int blockingTime, int initialWrites)
throws Exception
- {
- host = InetAddress.getLocalHost().getHostAddress();
- port = PortUtil.findFreePort(host);
- locatorURI = getTransport() + "://" + host + ":" + port;
- String metadata = System.getProperty("remoting.metadata");
- if (metadata != null)
- {
- locatorURI += "/?" + metadata;
- }
- serverLocator = new InvokerLocator(locatorURI);
- log.info("Starting remoting server with locator uri of: " + locatorURI);
- HashMap config = new HashMap();
- config.put(InvokerLocator.FORCE_REMOTE, "true");
- if (isBisocket(getTransport()))
- {
- secondaryServerSocketPort = PortUtil.findFreePort(host);
- config.put(Bisocket.SECONDARY_BIND_PORT,
Integer.toString(secondaryServerSocketPort));
- config.put(Bisocket.PING_FREQUENCY, "11111111");
- }
- if (setWriteTimeout)
- {
- config.put(SocketWrapper.WRITE_TIMEOUT, writeTimeout);
- ServerSocketFactory ssf = (ServerSocketFactory)
getServerSocketFactoryConstructor().newInstance(new Object[]{new Integer(blockingTime),
new Integer(initialWrites)});
- config.put(Remoting.CUSTOM_SERVER_SOCKET_FACTORY, ssf);
- }
- if (setCallbackWriteTimeout)
- {
- config.put(SocketWrapper.WRITE_TIMEOUT, writeTimeout);
- SocketFactory sf = (SocketFactory) getSocketFactoryConstructor().newInstance(new
Object[]{new Integer(blockingTime), new Integer(initialWrites)});
- config.put(Remoting.CUSTOM_SOCKET_FACTORY, sf);
- }
- if (callbackTest)
- {
- config.put("numberOfCallRetries", "1");
- }
- addExtraServerConfig(config);
- connector = new Connector(serverLocator, config);
- connector.create();
- invocationHandler = new TestInvocationHandler();
- connector.addInvocationHandler("test", invocationHandler);
- connector.start();
- }
-
-
- protected void shutdownServer() throws Exception
- {
- if (connector != null)
- connector.stop();
- }
-
-
- static class TestInvocationHandler implements ServerInvocationHandler
- {
- Throwable t;
-
- public void addListener(final InvokerCallbackHandler callbackHandler)
- {
- new Thread()
- {
- public void run()
- {
- try
- {
- log.info("sending callback");
- callbackHandler.handleCallback(new Callback("callback"));
- }
- catch (Throwable t)
- {
- log.info("throwable: ", t);
- TestInvocationHandler.this.t = t;
- }
- }
- }.start();
- }
- public Object invoke(final InvocationRequest invocation) throws Throwable
- {
- return invocation.getParameter();
- }
- public void removeListener(InvokerCallbackHandler callbackHandler) {}
- public void setMBeanServer(MBeanServer server) {}
- public void setInvoker(ServerInvoker invoker) {}
- }
-
-
- static class TestCallbackHandler implements InvokerCallbackHandler
- {
- public void handleCallback(Callback callback) throws HandleCallbackException
- {
- log.info("received callback");
- }
- }
-
-
- static public class TestServerSocketFactory extends ServerSocketFactory
- {
- int timeout;
- int initialWrites;
-
- public TestServerSocketFactory()
- {
- this.timeout = 5000;
- this.initialWrites = -1;
- }
- public TestServerSocketFactory(int timeout, int initialWrites)
- {
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- }
- public ServerSocket createServerSocket() throws IOException
- {
- ServerSocket ss = null;
- if (callbackTest)
- {
- ss = ServerSocketFactory.getDefault().createServerSocket();
- }
- else
- {
- ss = new TestServerSocket(timeout, initialWrites);
- }
- log.info("returning: " + ss);
- return ss;
- }
- public ServerSocket createServerSocket(int port) throws IOException
- {
- ServerSocket ss = null;
- if (callbackTest && port != secondaryServerSocketPort)
- {
- ss = ServerSocketFactory.getDefault().createServerSocket(port);
- }
- else
- {
- ss = new TestServerSocket(port, timeout, initialWrites);
- }
- log.info("returning: " + ss);
- return ss;
- }
-
- public ServerSocket createServerSocket(int port, int backlog) throws IOException
- {
- ServerSocket ss = null;
- if (callbackTest && port != secondaryServerSocketPort)
- {
- ss = ServerSocketFactory.getDefault().createServerSocket(port, backlog);
- }
- else
- {
- ss = new TestServerSocket(port, backlog, timeout, initialWrites);
- }
- log.info("returning: " + ss);
- return ss;
- }
-
- public ServerSocket createServerSocket(int port, int backlog, InetAddress
ifAddress) throws IOException
- {
- ServerSocket ss = null;
- if (callbackTest && port != secondaryServerSocketPort)
- {
- ss = ServerSocketFactory.getDefault().createServerSocket(port, backlog,
ifAddress);
- }
- else
- {
- ss = new TestServerSocket(port, backlog, ifAddress, timeout, initialWrites);
- }
- log.info("returning: " + ss);
- return ss;
- }
- }
-
-
- static class TestServerSocket extends ServerSocket
- {
- int timeout;
- int initialWrites;
-
- public TestServerSocket(int timeout, int initialWrites) throws IOException
- {
- super();
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- }
- public TestServerSocket(int port, int timeout, int initialWrites) throws
IOException
- {
- super(port);
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- }
- public TestServerSocket(int port, int backlog, int timeout, int initialWrites)
throws IOException
- {
- super(port, backlog);
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- }
- public TestServerSocket(int port, int backlog, InetAddress bindAddr, int timeout,
int initialWrites) throws IOException
- {
- super(port, backlog, bindAddr);
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- }
- public Socket accept() throws IOException
- {
- Socket s = new TestSocket(timeout, initialWrites);
- implAccept(s);
- return s;
- }
- public String toString()
- {
- return "TestServerSocket[" + getLocalPort() + "]";
- }
- }
-
-
- public static class TestSocketFactory extends SocketFactory
- {
- int timeout;
- int initialWrites = -1;
-
- public TestSocketFactory()
- {
- timeout = 5000;
- }
- public TestSocketFactory(int timeout, int initialWrites)
- {
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- }
- public Socket createSocket()
- {
- log.info("callbackTest: " + callbackTest);
- Socket s = null;
- if (callbackTest)
- {
- s = new Socket();
- }
- else
- {
- s = new TestSocket(timeout, initialWrites);
- }
- log.info(this + " returning " + s);
- return s;
- }
- public Socket createSocket(String arg0, int arg1) throws IOException,
UnknownHostException
- {
- log.info("callbackTest: " + callbackTest + ", port: " +
arg1);
- Socket s = null;
- if (callbackTest && arg1 != secondaryServerSocketPort)
- {
- s = new Socket(arg0, arg1);
- }
- else
- {
- s = new TestSocket(arg0, arg1, timeout, initialWrites);
- }
- log.info(this + " returning " + s);
- return s;
- }
-
- public Socket createSocket(InetAddress arg0, int arg1) throws IOException
- {
- log.info("callbackTest: " + callbackTest + ", port: " +
arg1);
- Socket s = null;
- if (callbackTest && arg1 != secondaryServerSocketPort)
- {
- s = new Socket(arg0, arg1);
- }
- else
- {
- s = new TestSocket(arg0, arg1, timeout, initialWrites);
- }
- log.info(this + " returning " + s);
- return s;
- }
-
- public Socket createSocket(String arg0, int arg1, InetAddress arg2, int arg3)
throws IOException, UnknownHostException
- {
- log.info("callbackTest: " + callbackTest + ", port: " +
arg1);
- Socket s = null;
- if (callbackTest && arg1 != secondaryServerSocketPort)
- {
- s = new Socket(arg0, arg1);
- }
- else
- {
- s = new TestSocket(arg0, arg1, arg2, arg3, timeout, initialWrites);
- }
- log.info(this + " returning " + s);
- return s;
- }
-
- public Socket createSocket(InetAddress arg0, int arg1, InetAddress arg2, int arg3)
throws IOException
- {
- log.info("callbackTest: " + callbackTest + ", port: " +
arg1);
- Socket s = null;
- if (callbackTest && arg1 != secondaryServerSocketPort)
- {
- s = new Socket(arg0, arg1);
- }
- else
- {
- s = new TestSocket(arg0, arg1, arg2, arg3, timeout, initialWrites);
- }
- log.info(this + " returning " + s);
- return s;
- }
- }
-
- static class TestSocket extends Socket
- {
- int timeout;
- int initialWrites;
-
- public TestSocket(int timeout, int initialWrites)
- {
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- }
- public TestSocket(String host, int port, int timeout, int initialWrites) throws
UnknownHostException, IOException
- {
- super(host, port);
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- }
- public TestSocket(InetAddress address, int port, int timeout, int initialWrites)
throws IOException
- {
- super(address, port);
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- }
- public TestSocket(String host, int port, InetAddress localAddr, int localPort, int
timeout, int initialWrites) throws IOException
- {
- super(host, port, localAddr, localPort);
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- }
- public TestSocket(InetAddress address, int port, InetAddress localAddr, int
localPort, int timeout, int initialWrites) throws IOException
- {
- super(address, port, localAddr, localPort);
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- }
- public OutputStream getOutputStream() throws IOException
- {
- return new TestOutputStream(super.getOutputStream(), timeout, initialWrites);
- }
- public String toString()
- {
- return "TestSocket[" + getLocalPort() + "->" + getPort()
+ "]";
- }
- }
-
- static class TestOutputStream extends OutputStream
- {
- OutputStream os;
- int timeout;
- boolean closed;
- int initialWrites;
- boolean doWait = true;
- public static int counter;
-
- public TestOutputStream(OutputStream os, int timeout, int initialWrites)
- {
- this.os = os;
- this.timeout = timeout;
- this.initialWrites = initialWrites;
- }
- public void close()throws IOException
- {
- closed = true;
- super.close();
- log.info(this + " closed");
- }
- public void write(int b) throws IOException
- {
- System.out.print("b: " + b);
- if (closed)
- {
- log.info("TestOutputStream closed, cannot write");
- throw new IOException("closed");
- }
- if (doWait && ++counter > initialWrites)
- {
- try
- {
- log.info("TestOutputStream.write() sleeping: " + timeout);
- Thread.sleep(timeout);
- }
- catch (InterruptedException e)
- {
- e.printStackTrace();
- }
- }
- os.write(b);
- }
- public void write(byte b[], int off, int len) throws IOException
- {
- System.out.print("b: ");
- for (int i = 0; i < len; i++)
- {
- System.out.print(b[i] + " ");
- }
- System.out.println("");
- if (closed)
- {
- log.info("TestOutputStream closed, cannot write");
- throw new IOException("closed");
- }
- log.info("TestOutputStream: counter = " + counter + ",
initialWrites = " + initialWrites);
- if (++counter > initialWrites)
- {
- try
- {
- log.info("TestOutputStream.write() sleeping: " + timeout);
- Thread.sleep(timeout);
- }
- catch (InterruptedException e)
- {
- e.printStackTrace();
- }
- }
- if (closed)
- {
- log.info("TestOutputStream closed, cannot write");
- throw new IOException("closed");
- }
- try
- {
- log.info(this + " calling write()");
- doWait = false;
- os.write(b, off, len);
- os.flush();
- doWait = true;
- log.info(this + " back from write()");
- }
- catch (IOException e)
- {
- log.info("exception: ", e);
- throw e;
- }
- }
- }
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+*/
+package org.jboss.test.remoting.transport.socket.timeout;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.net.InetAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.UnknownHostException;
+import java.rmi.MarshalException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import javax.management.MBeanServer;
+import javax.net.ServerSocketFactory;
+import javax.net.SocketFactory;
+
+import junit.framework.TestCase;
+
+import org.apache.log4j.ConsoleAppender;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.apache.log4j.PatternLayout;
+import org.jboss.logging.XLevel;
+import org.jboss.remoting.CannotConnectException;
+import org.jboss.remoting.Client;
+import org.jboss.remoting.InvocationRequest;
+import org.jboss.remoting.InvokerLocator;
+import org.jboss.remoting.Remoting;
+import org.jboss.remoting.ServerInvocationHandler;
+import org.jboss.remoting.ServerInvoker;
+import org.jboss.remoting.callback.Callback;
+import org.jboss.remoting.callback.HandleCallbackException;
+import org.jboss.remoting.callback.InvokerCallbackHandler;
+import org.jboss.remoting.transport.Connector;
+import org.jboss.remoting.transport.PortUtil;
+import org.jboss.remoting.transport.bisocket.Bisocket;
+import org.jboss.remoting.transport.socket.SocketServerInvoker;
+import org.jboss.remoting.transport.socket.SocketWrapper;
+
+
+/**
+ * Unit tests for JBREM-1120.
+ *
+ * @author <a href="ron.sigal(a)jboss.com">Ron Sigal</a>
+ * @version $Rev$
+ * <p>
+ * Copyright Apr 22, 2009
+ * </p>
+ */
+public abstract class WriteTimeoutTestParent extends TestCase
+{
+ private static Logger log = Logger.getLogger(WriteTimeoutTestParent.class);
+
+ private static boolean firstTime = true;
+ protected static int secondaryServerSocketPort;
+ protected static boolean callbackTest;
+
+ protected String host;
+ protected int port;
+ protected String locatorURI;
+ protected InvokerLocator serverLocator;
+ protected Connector connector;
+ protected TestInvocationHandler invocationHandler;
+
+
+ public void setUp() throws Exception
+ {
+ if (firstTime)
+ {
+ firstTime = false;
+ Logger.getLogger("org.jboss.remoting").setLevel(XLevel.INFO);
+ Logger.getLogger("org.jboss.test.remoting").setLevel(Level.INFO);
+ String pattern = "[%d{ABSOLUTE}] [%t] %5p (%F:%L) - %m%n";
+ PatternLayout layout = new PatternLayout(pattern);
+ ConsoleAppender consoleAppender = new ConsoleAppender(layout);
+ Logger.getRootLogger().addAppender(consoleAppender);
+ }
+
+ TestOutputStream.counter = 0;
+ callbackTest = false;
+ }
+
+
+ public void tearDown()
+ {
+ }
+
+
+ public void testClientWriteTimeout() throws Throwable
+ {
+ log.info("entering " + getName());
+
+ // Start server.
+ setupServer(false, false, "", -1, -1);
+
+ // Create client.
+ InvokerLocator clientLocator = new InvokerLocator(locatorURI);
+ HashMap clientConfig = new HashMap();
+ clientConfig.put(InvokerLocator.FORCE_REMOTE, "true");
+ clientConfig.put(SocketWrapper.WRITE_TIMEOUT, "1000");
+ SocketFactory sf = (SocketFactory) getSocketFactoryConstructor().newInstance(new
Object[]{new Integer(5000), new Integer(1)});
+ clientConfig.put(Remoting.CUSTOM_SOCKET_FACTORY, sf);
+ addExtraClientConfig(clientConfig);
+ Client client = new Client(clientLocator, clientConfig);
+ client.connect();
+ log.info("client is connected");
+
+ log.info("**************************************");
+ log.info("*** WorkerThread error is expected ***");
+ log.info("**************************************");
+
+ // Test client side write timeout.
+ try
+ {
+ client.invoke("abc");
+ }
+ catch (MarshalException e)
+ {
+ log.info(e.getMessage());
+ assertNotNull(e.getMessage());
+ log.info("e.getMessage(): " + e.getMessage());
+ assertTrue(e.getMessage().startsWith("Failed to communicate. Problem
during marshalling/unmarshalling"));
+ assertTrue(e.getCause() instanceof IOException);
+ IOException ioe = (IOException) e.getCause();
+ assertEquals("closed", ioe.getMessage());
+ log.info("got expected Exception");
+ }
+ catch (Throwable t)
+ {
+ log.error("got unexpected Exception", t);
+ fail("got unexpected Exception");
+ }
+
+ client.disconnect();
+ shutdownServer();
+ log.info(getName() + " PASSES");
+ }
+
+
+ public void testServerWriteTimeout() throws Throwable
+ {
+ log.info("entering " + getName());
+
+ // Start server.
+ setupServer(true, false, "1000", 5000, 1);
+
+ // Create client.
+ InvokerLocator clientLocator = new InvokerLocator(locatorURI);
+ HashMap clientConfig = new HashMap();
+ clientConfig.put(InvokerLocator.FORCE_REMOTE, "true");
+ clientConfig.put("numberOfCallRetries", "1");
+ clientConfig.put("timeout", "10000");
+ addExtraClientConfig(clientConfig);
+ Client client = new Client(clientLocator, clientConfig);
+ client.connect();
+ log.info("client is connected");
+
+ log.info("**************************************");
+ log.info("*** WorkerThread error is expected ***");
+ log.info("**************************************");
+
+ // Test server side write timeout.
+ try
+ {
+ client.invoke("abc");
+ }
+ catch (MarshalException e)
+ {
+ log.info(e.getMessage());
+// assertNotNull(e.getMessage());
+// assertTrue(e.getMessage().startsWith("Unable to perform
invocation"));
+// assertTrue(e.getCause() instanceof EOFException);
+ log.info("got expected Exception");
+ }
+ catch (Throwable t)
+ {
+ log.error("got unexpected Exception", t);
+ fail("got unexpected Exception");
+ }
+
+ // Test server invoker state.
+ Thread.sleep(4000);
+ SocketServerInvoker serverInvoker = (SocketServerInvoker)
connector.getServerInvoker();
+ assertEquals(0, serverInvoker.getCurrentClientPoolSize());
+ assertEquals(1, serverInvoker.getCurrentThreadPoolSize());
+ log.info("used ServerThread has returned to threadPool");
+
+ client.disconnect();
+ shutdownServer();
+ log.info(getName() + " PASSES");
+ }
+
+
+ public void testClientCallbackWriteTimeout() throws Throwable
+ {
+ log.info("entering " + getName());
+
+ // Start server.
+ if (isBisocket(getTransport()))
+ {
+ callbackTest = true;
+ }
+ setupServer(false, false, "", -1, -1);
+
+ // Create client.
+ InvokerLocator clientLocator = new InvokerLocator(locatorURI);
+ HashMap clientConfig = new HashMap();
+ clientConfig.put(InvokerLocator.FORCE_REMOTE, "true");
+ clientConfig.put(SocketWrapper.WRITE_TIMEOUT, "1000");
+ if (isBisocket(getTransport()))
+ {
+ SocketFactory sf = (SocketFactory) getSocketFactoryConstructor().newInstance(new
Object[]{new Integer(5000), new Integer(1)});
+ clientConfig.put(Remoting.CUSTOM_SOCKET_FACTORY, sf);
+ }
+ else
+ {
+ ServerSocketFactory ssf = (ServerSocketFactory)
getServerSocketFactoryConstructor().newInstance(new Object[]{new Integer(5000), new
Integer(-1)});
+ clientConfig.put(Remoting.CUSTOM_SERVER_SOCKET_FACTORY, ssf);
+ }
+ addExtraClientConfig(clientConfig);
+ Client client = new Client(clientLocator, clientConfig);
+ client.connect();
+ log.info("client is connected");
+
+ // Test connection
+ client.invoke("abc");
+ log.info("connection is good");
+
+ // Test client callback write timeout.
+ log.info("registering callback handler");
+ log.info("**************************************");
+ log.info("*** WorkerThread error is expected ***");
+ log.info("**************************************");
+ TestCallbackHandler callbackHandler = new TestCallbackHandler();
+ HashMap metadata = new HashMap();
+ if (isBisocket(getTransport()))
+ {
+// metadata.put(SocketWrapper.WRITE_TIMEOUT, "1000");
+ metadata.put(Remoting.SOCKET_FACTORY_NAME, getSocketFactoryClassName());
+ metadata.put("numberOfCallRetries", "1");
+ metadata.put(Bisocket.IS_CALLBACK_SERVER, "true");
+ metadata.put(Bisocket.PING_FREQUENCY, "11111111");
+ }
+ else
+ {
+// metadata.put(SocketWrapper.WRITE_TIMEOUT, "1000");
+ metadata.put(ServerInvoker.SERVER_SOCKET_FACTORY,
getServerSocketFactoryClassName());
+ metadata.put("numberOfCallRetries", "1");
+ }
+ client.addListener(callbackHandler, metadata, null, true);
+ log.info("called Client.addListener()");
+
+ // Test server invoker state.
+ // Wait for local ServerThread to time out. Might take a while in bisocket
transports, since
+ // the request to get a socket for the callback client invoker needs its own write
on the
+ // control socket.
+ Thread.sleep(20000);
+ log.info("back from sleep");
+ Set callbackConnectors = client.getCallbackConnectors(callbackHandler);
+ assertEquals(1, callbackConnectors.size());
+ Connector callbackConnector = (Connector) callbackConnectors.iterator().next();
+ SocketServerInvoker serverInvoker = (SocketServerInvoker)
callbackConnector.getServerInvoker();
+ assertEquals(0, serverInvoker.getCurrentClientPoolSize());
+ assertEquals(1, serverInvoker.getCurrentThreadPoolSize());
+ log.info("used ServerThread has returned to threadPool");
+
+ client.disconnect();
+ shutdownServer();
+ log.info(getName() + " PASSES");
+ }
+
+
+ public void testServerCallbackWriteTimeout() throws Throwable
+ {
+ log.info("entering " + getName());
+
+ // Start server.
+ if (isBisocket(getTransport()))
+ {
+ callbackTest = true;
+ setupServer(true, false, "1000", 5000, 1);
+ }
+ else
+ {
+ setupServer(false, true, "1000", 5000, 1);
+ }
+
+ // Create client.
+ InvokerLocator clientLocator = new InvokerLocator(locatorURI);
+ HashMap clientConfig = new HashMap();
+ clientConfig.put(InvokerLocator.FORCE_REMOTE, "true");
+ clientConfig.put("numberOfCallRetries", "1");
+ addExtraClientConfig(clientConfig);
+ Client client = new Client(clientLocator, clientConfig);
+ client.connect();
+ log.info("client is connected");
+
+ // Test connection
+ client.invoke("abc");
+ log.info("connection is good");
+
+ // Test server callback write timeout.
+ log.info("registering callback handler");
+ log.info("**************************************");
+ log.info("*** WorkerThread error is expected ***");
+ log.info("**************************************");
+ HashMap metadata = new HashMap();
+ if (isBisocket(getTransport()))
+ {
+ metadata.put(Bisocket.IS_CALLBACK_SERVER, "true");
+ }
+ TestCallbackHandler callbackHandler = new TestCallbackHandler();
+ client.addListener(callbackHandler, metadata, null, true);
+ log.info("added listener");
+
+ // Test server invoker state.
+ Thread.sleep(20000);
+ log.info("waking up");
+ Throwable t = invocationHandler.t;
+ assertTrue(t instanceof HandleCallbackException);
+ log.info("t.getCause:", t.getCause());
+ if (t.getCause() instanceof MarshalException)
+ {
+ MarshalException e = (MarshalException) t.getCause();
+ assertNotNull(e.getMessage());
+ assertTrue(e.getMessage().startsWith("Failed to communicate. Problem
during marshalling/unmarshalling"));
+ assertTrue(e.getCause() instanceof IOException);
+ IOException ioe = (IOException) e.getCause();
+ assertEquals("closed", ioe.getMessage());
+ }
+ else
+ {
+ assertTrue(t.getCause() instanceof CannotConnectException);
+ log.info("t.getCause().getCause(): ", t.getCause().getCause());
+ assertTrue(t.getCause().getCause() instanceof InvocationTargetException);
+ log.info("t.getCause().getCause().getCause(): ",
t.getCause().getCause().getCause());
+// assertTrue(t.getCause().getCause().getCause() instanceof
SSLProtocolException);
+ assertTrue(t.getCause().getCause().getCause() instanceof IOException);
+ assertEquals("closed",
t.getCause().getCause().getCause().getMessage());
+ }
+ log.info("got expected Exception");
+
+ client.disconnect();
+ shutdownServer();
+ log.info(getName() + " PASSES");
+ }
+
+
+ protected abstract String getTransport();
+
+ protected boolean isBisocket(String transport)
+ {
+ return transport.indexOf("bisocket") >= 0;
+ }
+
+ protected String getServerSocketFactoryClassName()
+ {
+ return TestServerSocketFactory.class.getName();
+ }
+
+ protected Constructor getServerSocketFactoryConstructor() throws
NoSuchMethodException
+ {
+ return TestServerSocketFactory.class.getConstructor(new Class[]{int.class,
int.class});
+ }
+
+ protected String getSocketFactoryClassName()
+ {
+ return TestSocketFactory.class.getName();
+ }
+
+ protected Constructor getSocketFactoryConstructor() throws NoSuchMethodException
+ {
+ return TestSocketFactory.class.getConstructor(new Class[]{int.class, int.class});
+ }
+
+ protected void addExtraClientConfig(Map config) {}
+ protected void addExtraServerConfig(Map config) {}
+
+
+ protected void setupServer(boolean setWriteTimeout, boolean setCallbackWriteTimeout,
+ String writeTimeout, int blockingTime, int initialWrites)
throws Exception
+ {
+ host = InetAddress.getLocalHost().getHostAddress();
+ port = PortUtil.findFreePort(host);
+ locatorURI = getTransport() + "://" + host + ":" + port;
+ String metadata = System.getProperty("remoting.metadata");
+ if (metadata != null)
+ {
+ locatorURI += "/?" + metadata;
+ }
+ serverLocator = new InvokerLocator(locatorURI);
+ log.info("Starting remoting server with locator uri of: " + locatorURI);
+ HashMap config = new HashMap();
+ config.put(InvokerLocator.FORCE_REMOTE, "true");
+ if (isBisocket(getTransport()))
+ {
+ secondaryServerSocketPort = PortUtil.findFreePort(host);
+ config.put(Bisocket.SECONDARY_BIND_PORT,
Integer.toString(secondaryServerSocketPort));
+ config.put(Bisocket.PING_FREQUENCY, "11111111");
+ }
+ if (setWriteTimeout)
+ {
+ config.put(SocketWrapper.WRITE_TIMEOUT, writeTimeout);
+ ServerSocketFactory ssf = (ServerSocketFactory)
getServerSocketFactoryConstructor().newInstance(new Object[]{new Integer(blockingTime),
new Integer(initialWrites)});
+ config.put(Remoting.CUSTOM_SERVER_SOCKET_FACTORY, ssf);
+ }
+ if (setCallbackWriteTimeout)
+ {
+ config.put(SocketWrapper.WRITE_TIMEOUT, writeTimeout);
+ SocketFactory sf = (SocketFactory) getSocketFactoryConstructor().newInstance(new
Object[]{new Integer(blockingTime), new Integer(initialWrites)});
+ config.put(Remoting.CUSTOM_SOCKET_FACTORY, sf);
+ }
+ if (callbackTest)
+ {
+ config.put("numberOfCallRetries", "1");
+ }
+ addExtraServerConfig(config);
+ connector = new Connector(serverLocator, config);
+ connector.create();
+ invocationHandler = new TestInvocationHandler();
+ connector.addInvocationHandler("test", invocationHandler);
+ connector.start();
+ }
+
+
+ protected void shutdownServer() throws Exception
+ {
+ if (connector != null)
+ connector.stop();
+ }
+
+
+ static class TestInvocationHandler implements ServerInvocationHandler
+ {
+ Throwable t;
+
+ public void addListener(final InvokerCallbackHandler callbackHandler)
+ {
+ new Thread()
+ {
+ public void run()
+ {
+ try
+ {
+ log.info("sending callback");
+ callbackHandler.handleCallback(new Callback("callback"));
+ }
+ catch (Throwable t)
+ {
+ log.info("throwable: ", t);
+ TestInvocationHandler.this.t = t;
+ }
+ }
+ }.start();
+ }
+ public Object invoke(final InvocationRequest invocation) throws Throwable
+ {
+ return invocation.getParameter();
+ }
+ public void removeListener(InvokerCallbackHandler callbackHandler) {}
+ public void setMBeanServer(MBeanServer server) {}
+ public void setInvoker(ServerInvoker invoker) {}
+ }
+
+
+ static class TestCallbackHandler implements InvokerCallbackHandler
+ {
+ public void handleCallback(Callback callback) throws HandleCallbackException
+ {
+ log.info("received callback");
+ }
+ }
+
+
+ static public class TestServerSocketFactory extends ServerSocketFactory
+ {
+ int timeout;
+ int initialWrites;
+
+ public TestServerSocketFactory()
+ {
+ this.timeout = 5000;
+ this.initialWrites = -1;
+ }
+ public TestServerSocketFactory(int timeout, int initialWrites)
+ {
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ }
+ public ServerSocket createServerSocket() throws IOException
+ {
+ ServerSocket ss = null;
+ if (callbackTest)
+ {
+ ss = ServerSocketFactory.getDefault().createServerSocket();
+ }
+ else
+ {
+ ss = new TestServerSocket(timeout, initialWrites);
+ }
+ log.info("returning: " + ss);
+ return ss;
+ }
+ public ServerSocket createServerSocket(int port) throws IOException
+ {
+ ServerSocket ss = null;
+ if (callbackTest && port != secondaryServerSocketPort)
+ {
+ ss = ServerSocketFactory.getDefault().createServerSocket(port);
+ }
+ else
+ {
+ ss = new TestServerSocket(port, timeout, initialWrites);
+ }
+ log.info("returning: " + ss);
+ return ss;
+ }
+
+ public ServerSocket createServerSocket(int port, int backlog) throws IOException
+ {
+ ServerSocket ss = null;
+ if (callbackTest && port != secondaryServerSocketPort)
+ {
+ ss = ServerSocketFactory.getDefault().createServerSocket(port, backlog);
+ }
+ else
+ {
+ ss = new TestServerSocket(port, backlog, timeout, initialWrites);
+ }
+ log.info("returning: " + ss);
+ return ss;
+ }
+
+ public ServerSocket createServerSocket(int port, int backlog, InetAddress
ifAddress) throws IOException
+ {
+ ServerSocket ss = null;
+ if (callbackTest && port != secondaryServerSocketPort)
+ {
+ ss = ServerSocketFactory.getDefault().createServerSocket(port, backlog,
ifAddress);
+ }
+ else
+ {
+ ss = new TestServerSocket(port, backlog, ifAddress, timeout, initialWrites);
+ }
+ log.info("returning: " + ss);
+ return ss;
+ }
+ }
+
+
+ static class TestServerSocket extends ServerSocket
+ {
+ int timeout;
+ int initialWrites;
+
+ public TestServerSocket(int timeout, int initialWrites) throws IOException
+ {
+ super();
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ }
+ public TestServerSocket(int port, int timeout, int initialWrites) throws
IOException
+ {
+ super(port);
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ }
+ public TestServerSocket(int port, int backlog, int timeout, int initialWrites)
throws IOException
+ {
+ super(port, backlog);
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ }
+ public TestServerSocket(int port, int backlog, InetAddress bindAddr, int timeout,
int initialWrites) throws IOException
+ {
+ super(port, backlog, bindAddr);
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ }
+ public Socket accept() throws IOException
+ {
+ Socket s = new TestSocket(timeout, initialWrites);
+ implAccept(s);
+ return s;
+ }
+ public String toString()
+ {
+ return "TestServerSocket[" + getLocalPort() + "]";
+ }
+ }
+
+
+ public static class TestSocketFactory extends SocketFactory
+ {
+ int timeout;
+ int initialWrites = -1;
+
+ public TestSocketFactory()
+ {
+ timeout = 5000;
+ }
+ public TestSocketFactory(int timeout, int initialWrites)
+ {
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ }
+ public Socket createSocket()
+ {
+ log.info("callbackTest: " + callbackTest);
+ Socket s = null;
+ if (callbackTest)
+ {
+ s = new Socket();
+ }
+ else
+ {
+ s = new TestSocket(timeout, initialWrites);
+ }
+ log.info(this + " returning " + s);
+ return s;
+ }
+ public Socket createSocket(String arg0, int arg1) throws IOException,
UnknownHostException
+ {
+ log.info("callbackTest: " + callbackTest + ", port: " +
arg1);
+ Socket s = null;
+ if (callbackTest && arg1 != secondaryServerSocketPort)
+ {
+ s = new Socket(arg0, arg1);
+ }
+ else
+ {
+ s = new TestSocket(arg0, arg1, timeout, initialWrites);
+ }
+ log.info(this + " returning " + s);
+ return s;
+ }
+
+ public Socket createSocket(InetAddress arg0, int arg1) throws IOException
+ {
+ log.info("callbackTest: " + callbackTest + ", port: " +
arg1);
+ Socket s = null;
+ if (callbackTest && arg1 != secondaryServerSocketPort)
+ {
+ s = new Socket(arg0, arg1);
+ }
+ else
+ {
+ s = new TestSocket(arg0, arg1, timeout, initialWrites);
+ }
+ log.info(this + " returning " + s);
+ return s;
+ }
+
+ public Socket createSocket(String arg0, int arg1, InetAddress arg2, int arg3)
throws IOException, UnknownHostException
+ {
+ log.info("callbackTest: " + callbackTest + ", port: " +
arg1);
+ Socket s = null;
+ if (callbackTest && arg1 != secondaryServerSocketPort)
+ {
+ s = new Socket(arg0, arg1);
+ }
+ else
+ {
+ s = new TestSocket(arg0, arg1, arg2, arg3, timeout, initialWrites);
+ }
+ log.info(this + " returning " + s);
+ return s;
+ }
+
+ public Socket createSocket(InetAddress arg0, int arg1, InetAddress arg2, int arg3)
throws IOException
+ {
+ log.info("callbackTest: " + callbackTest + ", port: " +
arg1);
+ Socket s = null;
+ if (callbackTest && arg1 != secondaryServerSocketPort)
+ {
+ s = new Socket(arg0, arg1);
+ }
+ else
+ {
+ s = new TestSocket(arg0, arg1, arg2, arg3, timeout, initialWrites);
+ }
+ log.info(this + " returning " + s);
+ return s;
+ }
+ }
+
+ static class TestSocket extends Socket
+ {
+ int timeout;
+ int initialWrites;
+
+ public TestSocket(int timeout, int initialWrites)
+ {
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ }
+ public TestSocket(String host, int port, int timeout, int initialWrites) throws
UnknownHostException, IOException
+ {
+ super(host, port);
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ }
+ public TestSocket(InetAddress address, int port, int timeout, int initialWrites)
throws IOException
+ {
+ super(address, port);
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ }
+ public TestSocket(String host, int port, InetAddress localAddr, int localPort, int
timeout, int initialWrites) throws IOException
+ {
+ super(host, port, localAddr, localPort);
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ }
+ public TestSocket(InetAddress address, int port, InetAddress localAddr, int
localPort, int timeout, int initialWrites) throws IOException
+ {
+ super(address, port, localAddr, localPort);
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ }
+ public OutputStream getOutputStream() throws IOException
+ {
+ return new TestOutputStream(super.getOutputStream(), timeout, initialWrites);
+ }
+ public String toString()
+ {
+ return "TestSocket[" + getLocalPort() + "->" + getPort()
+ "]";
+ }
+ }
+
+ static class TestOutputStream extends OutputStream
+ {
+ OutputStream os;
+ int timeout;
+ boolean closed;
+ int initialWrites;
+ boolean doWait = true;
+ public static int counter;
+
+ public TestOutputStream(OutputStream os, int timeout, int initialWrites)
+ {
+ this.os = os;
+ this.timeout = timeout;
+ this.initialWrites = initialWrites;
+ }
+ public void close()throws IOException
+ {
+ closed = true;
+ super.close();
+ log.info(this + " closed");
+ }
+ public void write(int b) throws IOException
+ {
+ System.out.print("b: " + b);
+ if (closed)
+ {
+ log.info("TestOutputStream closed, cannot write");
+ throw new IOException("closed");
+ }
+ if (doWait && ++counter > initialWrites)
+ {
+ try
+ {
+ log.info("TestOutputStream.write() sleeping: " + timeout);
+ Thread.sleep(timeout);
+ }
+ catch (InterruptedException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ os.write(b);
+ }
+ public void write(byte b[], int off, int len) throws IOException
+ {
+ System.out.print("b: ");
+ for (int i = 0; i < len; i++)
+ {
+ System.out.print(b[i] + " ");
+ }
+ System.out.println("");
+ if (closed)
+ {
+ log.info("TestOutputStream closed, cannot write");
+ throw new IOException("closed");
+ }
+ log.info("TestOutputStream: counter = " + counter + ",
initialWrites = " + initialWrites);
+ if (++counter > initialWrites)
+ {
+ try
+ {
+ log.info("TestOutputStream.write() sleeping: " + timeout);
+ Thread.sleep(timeout);
+ }
+ catch (InterruptedException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ if (closed)
+ {
+ log.info("TestOutputStream closed, cannot write");
+ throw new IOException("closed");
+ }
+ try
+ {
+ log.info(this + " calling write()");
+ doWait = false;
+ os.write(b, off, len);
+ os.flush();
+ doWait = true;
+ log.info(this + " back from write()");
+ }
+ catch (IOException e)
+ {
+ log.info("exception: ", e);
+ throw e;
+ }
+ }
+ }
}
\ No newline at end of file
Property changes on:
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/transport/socket/timeout/WriteTimeoutTestParent.java
___________________________________________________________________
Name: svn:eol-style
+ native