1
package org.jboss.test.remoting.transport.socket.ssl.builder;
3
import org.apache.log4j.Level;
4
import org.jboss.jrunit.extensions.ServerTestCase;
5
import org.jboss.logging.Logger;
6
import org.jboss.remoting.ServerInvocationHandler;
7
import org.jboss.remoting.security.SSLServerSocketFactoryService;
8
import org.jboss.remoting.security.SSLSocketBuilder;
9
import org.jboss.remoting.security.ServerSocketFactoryMBean;
10
import org.jboss.remoting.transport.Connector;
11
import org.jboss.test.remoting.TestUtil;
12
import org.jboss.test.remoting.transport.mock.MockServerInvocationHandler;
13
import org.jboss.test.remoting.transport.socket.ssl.SSLInvokerConstants;
14
import org.w3c.dom.Document;
16
import javax.management.MBeanServer;
17
import javax.management.MBeanServerFactory;
18
import javax.management.ObjectName;
19
import javax.xml.parsers.DocumentBuilderFactory;
20
import java.io.ByteArrayInputStream;
21
import java.io.IOException;
24
* This is the server for the test case to verify can have push callbacks using ssl where
25
* the client mode is used for the client calling back on the callback server living within the
26
* client test instance.
28
* @author <a href="mailto:tom.elrod@jboss.com">Tom Elrod</a>
30
public class SSLSocketInvokerTestServer extends ServerTestCase implements SSLInvokerConstants
32
private int serverPort;
33
private Connector connector = null;
34
private SSLSocketBuilder socketBuilder = null;
36
private static final Logger log = Logger.getLogger(SSLSocketInvokerTestServer.class);
38
public void init() throws Exception
40
serverPort = getPort();
43
serverPort = TestUtil.getRandomPort();
45
log.debug("port = " + serverPort);
48
MBeanServer server = MBeanServerFactory.createMBeanServer();
50
// create and register socket server factory service
51
createSSLSocketBuilder();
53
ServerSocketFactoryMBean serverSocketFactoryMBean = createServerSocketFactoryMBean();
54
String serverSocketFactoryObjName = "test:type=serversocketfactory";
55
server.registerMBean(serverSocketFactoryMBean, new ObjectName(serverSocketFactoryObjName));
57
connector = new Connector();
58
server.registerMBean(connector, new ObjectName("test:type=connector,transport=sslsocket"));
59
StringBuffer buf = new StringBuffer();
60
buf.append("<?xml version=\"1.0\"?>\n");
61
buf.append("<config>");
62
buf.append("<invoker transport=\"" + getTransport() + "\">");
63
buf.append("<attribute name=\"serverSocketFactory\">" + serverSocketFactoryObjName + "</attribute>");
64
buf.append("<attribute name=\"serverBindAddress\">" + host + "</attribute>");
65
buf.append("<attribute name=\"serverBindPort\">" + serverPort + "</attribute>");
66
buf.append("<attribute name=\"leasePeriod\">" + 20000 + "</attribute>");
67
buf.append("<attribute name=\"timeout\">" + 0 + "</attribute>");
68
buf.append("<attribute name=\"socket.check_connection\" isParam=\"true\">" + 0 + "</attribute>");
69
buf.append("</invoker>");
70
buf.append("<handlers>");
71
buf.append(" <handler subsystem=\"" + getSubsystem() + "\">" + getServerInvocationHandler().getClass().getName() + "</handler>\n");
72
buf.append("</handlers>");
73
buf.append("</config>");
74
Document xml = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(buf.toString().getBytes()));
75
connector.setConfiguration(xml.getDocumentElement());
80
private ServerSocketFactoryMBean createServerSocketFactoryMBean() throws Exception
82
ServerSocketFactoryMBean serverSocketFactoryMBean = null;
83
SSLServerSocketFactoryService sslServerSocketFactoryService = new SSLServerSocketFactoryService();
84
sslServerSocketFactoryService.setSSLSocketBuilder(socketBuilder);
85
sslServerSocketFactoryService.start();
86
serverSocketFactoryMBean = sslServerSocketFactoryService;
88
return serverSocketFactoryMBean;
91
private void createSSLSocketBuilder() throws IOException
93
socketBuilder = new SSLSocketBuilder();
94
socketBuilder.setUseSSLServerSocketFactory(false);
96
// socketBuilder.setSecureSocketProtocol("SSL");
97
socketBuilder.setSecureSocketProtocol("TLS");
98
socketBuilder.setKeyStoreAlgorithm("SunX509");
100
socketBuilder.setKeyStoreType("JKS");
101
String keyStoreFilePath = this.getClass().getResource("../.keystore").getFile();
102
// String keyStoreFilePath = this.getClass().getResource("messaging.keystore").getFile();
103
socketBuilder.setKeyStoreURL(keyStoreFilePath);
104
socketBuilder.setKeyStorePassword("unit-tests-server");
105
// socketBuilder.setKeyStorePassword("secureexample");
107
* This is optional since if not set, will use
108
* the key store password (and are the same in this case)
110
// socketBuilder.setKeyPassword("secureexample");
111
socketBuilder.setKeyPassword("unit-tests-server");
116
protected String getTransport()
121
protected int getPort()
126
protected String getSubsystem()
131
protected ServerInvocationHandler getServerInvocationHandler()
133
return new MockServerInvocationHandler();
136
protected void setUp() throws Exception
138
org.apache.log4j.BasicConfigurator.configure();
139
org.apache.log4j.Category.getRoot().setLevel(Level.INFO);
140
org.apache.log4j.Category.getInstance("org.jgroups").setLevel(Level.INFO);
141
org.apache.log4j.Category.getInstance("org.jboss.remoting").setLevel(Level.DEBUG);
142
org.apache.log4j.Category.getInstance("test").setLevel(Level.DEBUG);
147
protected void tearDown() throws Exception
149
if (connector != null)
156
public static void main(String[] args)
158
SSLSocketInvokerTestServer server = new SSLSocketInvokerTestServer();
163
Thread.sleep(600000);