public ListenableFuture<ResultMessage> call(CallMessage message) { SettableFuture<ResultMessage> future = SettableFuture.create(); message.setId(idCounter.getAndIncrement()); try { toServer.writeBytes(message.toString()); callers.put(message.getId(), future); } catch (Throwable e) { future.setException(e); log.error("Error making a call to the server: {}", e.getMessage()); triggerShutdown(); } return future; }
@Test public void testCallMessage() { CallMessage call = new CallMessage(1L, "blockchain.address.listunspent", Arrays.asList("npF3ApeWwMS8kwXJyybPZ76vNbv5txVjDf")); Assert.assertEquals(call.getId(), 1L); Assert.assertEquals(call.getMethod(), "blockchain.address.listunspent"); Assert.assertEquals("{\"id\":1,\"method\":\"blockchain.address.listunspent\"," + "\"params\":[\"npF3ApeWwMS8kwXJyybPZ76vNbv5txVjDf\"]}\n", call.toString()); }
@Test public void testCallCommand() throws Exception { client.startAsync(); client.awaitRunning(5, TimeUnit.SECONDS); CallMessage call = new CallMessage("blockchain.address.get_history", Arrays.asList("mrx4EmF6zHXky3zDoeJ1K7KvYcuNn8Mmc4")); final ListenableFuture<ResultMessage> futureReply = client.call(call); // Check if server got the correct message Assert.assertEquals(call.toString(), new String(serverInput.toByteArray())); // Reply to the client String resultJson = "{\"id\": 0, \"result\": [{" + "\"tx_hash\": \"3aa2a5a9825ca767e092bcc19487aa13969eeb217fd0fba8492543bbb8c30954\", " + "\"height\": 260144}]}"; final ResultMessage serverResult = ResultMessage.fromJson(resultJson); serverResult.setId(call.getId()); serverOutput.write(serverResult.toString().getBytes()); ResultMessage result = futureReply.get(3, TimeUnit.SECONDS); Assert.assertEquals(serverResult.toString(), result.toString()); serverOutput.close(); }
"\"e0dc94c40d4331306eb60ad55b537ee92446b8a8dc19f25dc3373d96c1904719\"}"; final ResultMessage serverResult = ResultMessage.fromJson(resultJson); serverResult.setId(call.getId());