@Test public void test() throws UnknownHostException, ExecutionException, InterruptedException { final JavaSerializer serializer = new JavaSerializer(); RPCHandler handler1 = new RPCHandler(serializer); RPCHandler handler2 = new RPCHandler(serializer); RoutingHandler router = new RoutingHandler( ImmutableMap.<String, ChannelHandler>builder() .put("/one", handler1) .put("/two", handler2) .build()); HTTPServer server = new HTTPServer( TcpOptions.create().localAddress(new InetSocketAddress(InetAddress.getLocalHost(), 0)), 2, router); RPCClient client1 = new RPCClient(TcpOptions.create(), "/one", 2, serializer); RPCClient client2 = new RPCClient(TcpOptions.create(), "/two", 2, serializer); RPCClient client3 = new RPCClient(TcpOptions.create(), "/noexisting", 2, serializer); RPC<Void, String> signature = RPC.signature("/method", Void.class, String.class); server.startAsync().awaitRunning(); try { handler1.register( signature, new ServerMethod<Void, String>() { @Override public ListenableFuture<String> call(Envelope envelope, Void argument) { return Futures.immediateFuture("one"); } }); handler2.register( signature, new ServerMethod<Void, String>() { @Override public ListenableFuture<String> call(Envelope envelope, Void argument) { return Futures.immediateFuture("two"); } }); ClientMethod<Void, String> method1 = client1.createMethod(signature); ClientMethod<Void, String> method2 = client2.createMethod(signature); ClientMethod<Void, String> method3 = client3.createMethod(signature); Envelope envelope = new Envelope(1000, "asdfasdfas"); assertEquals(method1.call(server.getLocalAddress(), envelope, null).get(), "one"); assertEquals(method2.call(server.getLocalAddress(), envelope, null).get(), "two"); try { assertEquals(method3.call(server.getLocalAddress(), envelope, null).get(), "wtf?"); fail(); } catch (ExecutionException e) { assertTrue(e.getCause() instanceof BadResponseException); assertTrue(e.getCause().getMessage().contains("404")); } } finally { client1.stopAsync().awaitTerminated(); client2.stopAsync().awaitTerminated(); client3.stopAsync().awaitTerminated(); server.stopAsync().awaitTerminated(); } }