use of org.opennms.core.rpc.echo.EchoRequest in project opennms by OpenNMS.
the class EchoRpcIT method throwsRequestTimedOutExceptionOnTimeout.
@Test(timeout = CamelRpcClientPreProcessor.CAMEL_JMS_REQUEST_TIMEOUT_DEFAULT * 4)
public void throwsRequestTimedOutExceptionOnTimeout() throws Exception {
assertNotEquals(REMOTE_LOCATION_NAME, identity.getLocation());
EchoRpcModule echoRpcModule = new EchoRpcModule();
CamelContext context = getContext();
context.getShutdownStrategy().setTimeout(5);
context.getShutdownStrategy().setTimeUnit(TimeUnit.SECONDS);
CamelRpcServerRouteManager routeManager = getRouteManager(context);
routeManager.bind(echoRpcModule);
EchoRequest request = new EchoRequest("HELLO!!!");
request.setLocation(REMOTE_LOCATION_NAME);
request.setDelay(CamelRpcClientPreProcessor.CAMEL_JMS_REQUEST_TIMEOUT_DEFAULT * 2);
try {
echoClient.execute(request).get();
fail("Did not get ExecutionException");
} catch (ExecutionException e) {
assertTrue("Cause is not of type RequestTimedOutException: " + ExceptionUtils.getStackTrace(e), e.getCause() instanceof RequestTimedOutException);
// Verify that the exchange error was logged
MockLogAppender.assertLogMatched(Level.ERROR, "Message History");
MockLogAppender.assertLogMatched(Level.ERROR, "direct://executeRpc");
// Verify that the message body was suppressed
MockLogAppender.assertNoLogMatched(Level.ERROR, "HELLO!!!");
}
routeManager.unbind(echoRpcModule);
context.stop();
}
use of org.opennms.core.rpc.echo.EchoRequest in project opennms by OpenNMS.
the class EchoRpcIT method failsWithTimeoutWhenSystemIdDoesNotExist.
/**
* Issues a RPC to a location at which a listener is registered,
* but specifies a system id that is not equal to the listener's.
* Since no matching system can process the request, the request
* should time out.
*/
@Test(timeout = 60000)
public void failsWithTimeoutWhenSystemIdDoesNotExist() throws Exception {
assertNotEquals(REMOTE_LOCATION_NAME, identity.getLocation());
EchoRpcModule echoRpcModule = new EchoRpcModule();
CamelContext context = getContext();
context.start();
MinionIdentity minionIdentity = new MockMinionIdentity(REMOTE_LOCATION_NAME);
CamelRpcServerRouteManager routeManager = getRouteManager(context);
routeManager.bind(echoRpcModule);
EchoRequest request = new EchoRequest("HELLO!!!");
// Use a different system id, other than the one that's actually listening
request.setSystemId(minionIdentity.getId() + "!");
request.setLocation(REMOTE_LOCATION_NAME);
try {
echoClient.execute(request).get();
fail("Did not get ExecutionException");
} catch (ExecutionException e) {
assertTrue("Cause is not of type RequestTimedOutException: " + ExceptionUtils.getStackTrace(e), e.getCause() instanceof RequestTimedOutException);
}
routeManager.unbind(echoRpcModule);
context.stop();
}
use of org.opennms.core.rpc.echo.EchoRequest in project opennms by OpenNMS.
the class EchoRpcThreadIT method canProcessManyRequestsAsynchronously.
@Test(timeout = 60000)
public void canProcessManyRequestsAsynchronously() throws Exception {
// Execute a request via a remote location
assertNotEquals(REMOTE_LOCATION_NAME, identity.getLocation());
// Lock the run method in our RPC module, we want to validate
// the number of threads that are "running" the module
CompletableFuture<Integer> runLockedFuture = lockingRpcModule.getRunLocker().waitForThreads(NTHREADS);
// Fire off NTHREADS request
ThreadLockingEchoClient client = new ThreadLockingEchoClient(rpcClientFactory, lockingRpcModule);
List<CompletableFuture<EchoResponse>> futures = new ArrayList<>();
for (int i = 0; i < NTHREADS; i++) {
EchoRequest request = new EchoRequest("ping");
request.setTimeToLiveMs(30000L);
request.setLocation(REMOTE_LOCATION_NAME);
futures.add(client.execute(request));
}
// Wait for all the threads calling run() to be locked
runLockedFuture.get();
// Release and verify that all the futures return
lockingRpcModule.getRunLocker().release();
CompletableFuture.allOf(futures.toArray(new CompletableFuture<?>[NTHREADS])).get();
}
Aggregations