Author: ron.sigal(a)jboss.com
Date: 2010-09-15 18:05:57 -0400 (Wed, 15 Sep 2010)
New Revision: 6099
Modified:
remoting3/trunk/jboss-remoting/src/test/java/org/jboss/remoting3/test/InvocationTestBase.java
Log:
JBREM-1228: Added test methods; refactored RequestListener to separate class.
Modified:
remoting3/trunk/jboss-remoting/src/test/java/org/jboss/remoting3/test/InvocationTestBase.java
===================================================================
---
remoting3/trunk/jboss-remoting/src/test/java/org/jboss/remoting3/test/InvocationTestBase.java 2010-09-07
20:55:43 UTC (rev 6098)
+++
remoting3/trunk/jboss-remoting/src/test/java/org/jboss/remoting3/test/InvocationTestBase.java 2010-09-15
22:05:57 UTC (rev 6099)
@@ -37,11 +37,13 @@
import org.jboss.remoting3.Endpoint;
import org.jboss.remoting3.Registration;
import org.jboss.remoting3.RemoteExecutionException;
+import org.jboss.remoting3.RemoteReplyException;
import org.jboss.remoting3.Remoting;
import org.jboss.remoting3.RequestContext;
import org.jboss.remoting3.RequestListener;
import org.jboss.remoting3.ServiceNotFoundException;
import org.jboss.remoting3.stream.Streams;
+import org.jboss.xnio.IoFuture;
import org.jboss.xnio.IoUtils;
import org.jboss.xnio.OptionMap;
import org.jboss.xnio.Options;
@@ -101,16 +103,7 @@
log.info("Client closed");
}
});
- return new RequestListener<InvocationTestObject,
InvocationTestObject>() {
- public void handleRequest(final
RequestContext<InvocationTestObject> objectRequestContext, final
InvocationTestObject request) throws RemoteExecutionException {
- try {
- log.info("Got request %s, sending reply %s",
request, replyObj);
- objectRequestContext.sendReply(replyObj);
- } catch (IOException e) {
- throw new RemoteExecutionException(e);
- }
- }
- };
+ return new TestRequestListener(replyObj);
}
}).register();
try {
@@ -136,6 +129,55 @@
}
}
+ public void testTypedInvoke() throws Exception {
+ enter();
+ try {
+ final InvocationTestObject requestObj = new InvocationTestObject();
+ final TypedRequestObject typedRequestObj = new TypedRequestObject(requestObj);
+ final InvocationTestObject replyObj = new InvocationTestObject();
+ final Registration registration =
endpoint.serviceBuilder().setInstanceName("foo").setServiceType("test1").setRequestType(TypedRequestObject.class).
+ setReplyType(InvocationTestObject.class).setClientListener(new
ClientListener<TypedRequestObject, InvocationTestObject>() {
+ public RequestListener<TypedRequestObject, InvocationTestObject>
handleClientOpen(final ClientContext clientContext, final OptionMap optionMap) {
+ clientContext.addCloseHandler(new CloseHandler<ClientContext>() {
+ public void handleClose(final ClientContext closed) {
+ log.debug("Client closed");
+ }
+ });
+ return new RequestListener<TypedRequestObject,
InvocationTestObject>() {
+ public void handleRequest(final
RequestContext<InvocationTestObject> objectRequestContext, final TypedRequestObject
request) throws RemoteExecutionException {
+ try {
+ log.debug("Got request %s, sending reply %s", request,
replyObj);
+ objectRequestContext.sendReply(replyObj);
+ } catch (IOException e) {
+ throw new RemoteExecutionException(e);
+ }
+ }
+ };
+ }
+ }).register();
+ try {
+ final Connection connection = getConnection();
+ try {
+ final Client<TypedRequestObject, InvocationTestObject> client =
connection.openClient("test1", "*", TypedRequestObject.class,
InvocationTestObject.class, getClass().getClassLoader(), OptionMap.EMPTY).get();
+ try {
+ assertEquals(replyObj, client.invokeTyped(typedRequestObj));
+ } finally {
+ IoUtils.safeClose(client);
+ client.awaitClosedUninterruptibly();
+ }
+ } finally {
+ IoUtils.safeClose(connection);
+ connection.awaitClosedUninterruptibly();
+ }
+ } finally {
+ IoUtils.safeClose(registration);
+ registration.awaitClosedUninterruptibly();
+ }
+ } finally {
+ exit();
+ }
+ }
+
public void testBasicSend() throws Exception {
enter();
try {
@@ -149,17 +191,7 @@
log.info("Listener closed");
}
});
- return new RequestListener<InvocationTestObject,
InvocationTestObject>() {
- public void handleRequest(final
RequestContext<InvocationTestObject> objectRequestContext, final
InvocationTestObject request) throws RemoteExecutionException {
- try {
- log.info("Got request %s, sending reply %s",
request, replyObj);
- objectRequestContext.sendReply(replyObj);
- } catch (IOException e) {
- log.error(e, "reply");
- throw new RemoteExecutionException(e);
- }
- }
- };
+ return new TestRequestListener(replyObj);
}
}).register();
try {
@@ -185,6 +217,164 @@
}
}
+ public void testBasicSendFailure() throws Exception {
+ enter();
+ try {
+ final InvocationTestObject requestObj = new
InvocationTestObject(InvocationTestObject.FAILURE);
+ final InvocationTestObject replyObj = new InvocationTestObject();
+ final Registration registration =
endpoint.serviceBuilder().setInstanceName("foo").setServiceType("test2").setRequestType(InvocationTestObject.class).
+ setReplyType(InvocationTestObject.class).setClientListener(new
ClientListener<InvocationTestObject, InvocationTestObject>() {
+ public RequestListener<InvocationTestObject, InvocationTestObject>
handleClientOpen(final ClientContext clientContext, final OptionMap optionMap) {
+ clientContext.addCloseHandler(new CloseHandler<ClientContext>()
{
+ public void handleClose(final ClientContext closed) {
+ log.debug("Listener closed");
+ }
+ });
+ return new TestRequestListener(replyObj);
+ }
+ }).register();
+ try {
+ final Connection connection = getConnection();
+ try {
+ final Client<InvocationTestObject, InvocationTestObject> client
= connection.openClient("test2", "*", InvocationTestObject.class,
InvocationTestObject.class).get();
+ try {
+ log.info("sending FAILURE request");
+ IoFuture<? extends InvocationTestObject> future =
client.send(requestObj);
+ Object o = future.get();
+ fail("expected RemoteReplyException: got " + o);
+ } catch (RemoteReplyException e) {
+ Throwable cause = e.getCause();
+ if (cause instanceof RemoteExecutionException) {
+ RemoteExecutionException ree = (RemoteExecutionException)
cause;
+ if ("failure".equals(ree.getMessage()) &&
ree.getCause() instanceof TestRequestListener.TestRequestException) {
+ log.info("got expected exception: " + e +
"(" + e.getMessage() + ", " + e.getCause() + ")");
+ } else {
+ fail("expected
RemoteReplyException(RemoteExecutionException(\"failure\")), got: " + e);
+ }
+ } else {
+ fail("expected
RemoteReplyException(RemoteExecutionException), got: " + e);
+ }
+ } catch (RemoteExecutionException e) {
+ if ("failure".equals(e.getMessage())) {
+ log.info("got expected exception: " + e +
"(" + e.getMessage() + ", " + e.getCause() + ")");
+ } else {
+ fail("expected
RemoteExecutionException(\"failure\"), got: " + e);
+ }
+ } catch (Exception e) {
+ fail("expected RemoteExecutionException: got " + e);
+ }
+ finally {
+ IoUtils.safeClose(client);
+ client.awaitClosedUninterruptibly();
+ }
+ } finally {
+ IoUtils.safeClose(connection);
+ connection.awaitClosedUninterruptibly();
+ }
+ } finally {
+ IoUtils.safeClose(registration);
+ registration.awaitClosedUninterruptibly();
+ }
+ } finally {
+ exit();
+ }
+ }
+
+ public void testBasicSendCancel() throws Exception {
+ enter();
+ try {
+ final InvocationTestObject requestObj = new
InvocationTestObject(InvocationTestObject.CANCEL);
+ final InvocationTestObject replyObj = new InvocationTestObject();
+ final Registration registration =
endpoint.serviceBuilder().setInstanceName("foo").setServiceType("test2").setRequestType(InvocationTestObject.class).
+ setReplyType(InvocationTestObject.class).setClientListener(new
ClientListener<InvocationTestObject, InvocationTestObject>() {
+ public RequestListener<InvocationTestObject, InvocationTestObject>
handleClientOpen(final ClientContext clientContext, final OptionMap optionMap) {
+ clientContext.addCloseHandler(new CloseHandler<ClientContext>() {
+ public void handleClose(final ClientContext closed) {
+ log.debug("Listener closed");
+ }
+ });
+ return new TestRequestListener(replyObj);
+ }
+ }).register();
+ try {
+ final Connection connection = getConnection();
+ try {
+ final Client<InvocationTestObject, InvocationTestObject> client =
connection.openClient("test2", "*", InvocationTestObject.class,
InvocationTestObject.class).get();
+ try {
+ log.info("sending CANCEL request");
+ IoFuture<? extends InvocationTestObject> future =
client.send(requestObj);
+ } catch (RemoteReplyException e) {
+ log.info("got expected exception: " + e + "(" +
e.getMessage() + ", " + e.getCause() + ")");
+ } catch (Exception e) {
+ fail("expected RemoteReplyException: got " + e);
+ }
+ finally {
+ IoUtils.safeClose(client);
+ client.awaitClosedUninterruptibly();
+ }
+ } finally {
+ IoUtils.safeClose(connection);
+ connection.awaitClosedUninterruptibly();
+ }
+ } finally {
+ IoUtils.safeClose(registration);
+ registration.awaitClosedUninterruptibly();
+ }
+ } finally {
+ exit();
+ }
+ }
+
+ public void testTypedSend() throws Exception {
+ enter();
+ try {
+ final InvocationTestObject requestObj = new InvocationTestObject();
+ final TypedRequestObject typedRequestObj = new TypedRequestObject(requestObj);
+ final InvocationTestObject replyObj = new InvocationTestObject();
+ final Registration registration =
endpoint.serviceBuilder().setInstanceName("foo").setServiceType("test2").setRequestType(TypedRequestObject.class).
+ setReplyType(InvocationTestObject.class).setClientListener(new
ClientListener<TypedRequestObject, InvocationTestObject>() {
+ public RequestListener<TypedRequestObject, InvocationTestObject>
handleClientOpen(final ClientContext clientContext, final OptionMap optionMap) {
+ clientContext.addCloseHandler(new CloseHandler<ClientContext>() {
+ public void handleClose(final ClientContext closed) {
+ log.debug("Listener closed");
+ }
+ });
+ return new RequestListener<TypedRequestObject,
InvocationTestObject>() {
+ public void handleRequest(final
RequestContext<InvocationTestObject> objectRequestContext, final TypedRequestObject
request) throws RemoteExecutionException {
+ try {
+ log.debug("Got request %s, sending reply %s", request,
replyObj);
+ objectRequestContext.sendReply(replyObj);
+ } catch (IOException e) {
+ log.error(e, "reply");
+ throw new RemoteExecutionException(e);
+ }
+ }
+ };
+ }
+ }).register();
+ try {
+ final Connection connection = getConnection();
+ try {
+ final Client<TypedRequestObject, InvocationTestObject> client =
connection.openClient("test2", "*", TypedRequestObject.class,
InvocationTestObject.class).get();
+ try {
+ assertEquals(replyObj, client.sendTyped(typedRequestObj).get());
+ } finally {
+ IoUtils.safeClose(client);
+ client.awaitClosedUninterruptibly();
+ }
+ } finally {
+ IoUtils.safeClose(connection);
+ connection.awaitClosedUninterruptibly();
+ }
+ } finally {
+ IoUtils.safeClose(registration);
+ registration.awaitClosedUninterruptibly();
+ }
+ } finally {
+ exit();
+ }
+ }
+
public void testBasicClientConnector() throws Exception {
enter();
try {