package com.googlecode.jsonrpc4j.client; import com.fasterxml.jackson.databind.JsonNode; import com.googlecode.jsonrpc4j.JsonRpcClient; import com.googlecode.jsonrpc4j.RequestIDGenerator; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; import static com.googlecode.jsonrpc4j.JsonRpcBasicServer.ID; import static com.googlecode.jsonrpc4j.JsonRpcBasicServer.PARAMS; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; public class JsonRpcClientTest { private ByteArrayOutputStream byteArrayOutputStream; private JsonRpcClient client; @Before public void setUp() { client = new JsonRpcClient(); byteArrayOutputStream = new ByteArrayOutputStream(); } @After public void tearDown() { client = null; } @Test public void testInvokeNoParams() throws Throwable { client.invoke("test", new Object[0], byteArrayOutputStream); JsonNode node = readJSON(byteArrayOutputStream); assertFalse(node.has(PARAMS)); } private JsonNode readJSON(ByteArrayOutputStream byteArrayOutputStream) throws IOException { return client.getObjectMapper().readTree(byteArrayOutputStream.toString(StandardCharsets.UTF_8.name())); } @Test public void testInvokeArrayParams() throws Throwable { client.invoke("test", new Object[]{1, 2}, byteArrayOutputStream); JsonNode node = readJSON(byteArrayOutputStream); assertTrue(node.has(PARAMS)); assertTrue(node.get(PARAMS).isArray()); assertEquals(1, node.get(PARAMS).get(0).intValue()); assertEquals(2, node.get(PARAMS).get(1).intValue()); } @Test public void testInvokeAdditionalJsonContent() throws Throwable { final String auth = "auth"; final String authValue = "secret"; client.setAdditionalJsonContent(new HashMap<String, Object>() { { put(auth, authValue); } }); client.invoke("test", new Object[]{1, 2}, byteArrayOutputStream); JsonNode node = readJSON(byteArrayOutputStream); assertTrue(node.has(auth)); assertEquals(node.get(auth).textValue(), authValue); } @Test public void testInvokeHashParams() throws Throwable { Map<String, Object> params = new HashMap<>(); params.put("hello", "test"); params.put("x", 1); client.invoke("test", params, byteArrayOutputStream); JsonNode node = readJSON(byteArrayOutputStream); assertTrue(node.has(PARAMS)); assertTrue(node.get(PARAMS).isObject()); assertEquals("test", node.get(PARAMS).get("hello").textValue()); assertEquals(1, node.get(PARAMS).get("x").intValue()); } @Test public void testIDGeneration() throws IOException { client.setRequestIDGenerator(new RequestIDGenerator() { @Override public String generateID() { return "test"; } }); Map<String, Object> params = new HashMap<>(); params.put("hello", "test"); params.put("x", 1); client.invoke("test", params, byteArrayOutputStream); JsonNode node = readJSON(byteArrayOutputStream); assertTrue(node.has(PARAMS)); assertTrue(node.get(PARAMS).isObject()); assertEquals("test", node.get(ID).asText()); } @Test public void testRandomIDGeneration() throws IOException { Map<String, Object> params = new HashMap<>(); params.put("hello", "test"); params.put("x", 1); client.invoke("test", params, byteArrayOutputStream); JsonNode node = readJSON(byteArrayOutputStream); assertTrue(node.has(PARAMS)); assertTrue(node.get(PARAMS).isObject()); try { Long.parseLong(node.get(ID).asText()); } catch (NumberFormatException e) { fail(); } } }