package cz.cuni.mff.d3s.been.util; import org.junit.Assert; import org.junit.Test; import cz.cuni.mff.d3s.been.util.JsonException; import cz.cuni.mff.d3s.been.util.JsonKeyHandler; import cz.cuni.mff.d3s.been.util.JsonStreamer; /** * @author Martin Sixta */ public class JsonStreamerTest extends Assert { private static final String json = "{\"created\":null,\"origin\":null,\"originContext\":null,\"name\":\"stdout\",\"level\":999,\"message\":\"ExampleTask\",\"errorTrace\":null,\"senderId\":\"d4a2d0ba-20c9-4b96-9d62-948035aa9d25\",\"contextId\":\"edabbcbd-d083-4414-9787-08da8a834d38\",\"threadName\":null,\"time\":1373118372583}"; private static final String jsonWithArray = "{\n" + "\"employees\": [\n" + "{ \"firstName\":\"John\" , \"lastName\":\"Doe\" },\n" + "{ \"firstName\":\"Anna\" , \"lastName\":\"Smith\" },\n" + "{ \"firstName\":\"Peter\" , \"lastName\":\"Jones\" }\n" + "]" + "}\n"; private static final String jsonGarbage = "a45q4ew54e6tdt"; static final String INNER_TEST = "{\"id\": \"1\", \"LogMessage\" : {\"contextId\":\"edabbcbd-d083-4414-9787-08da8a834d38\"}}"; private static class OneTimeHandler implements JsonKeyHandler { private final String key; private String actualValue; private String actualKey; private int handlerCalled = 0; OneTimeHandler(String key) { this.key = key; } @Override public void handle(final String key, final String value, final String json) { this.actualValue = value; this.actualKey = key; ++handlerCalled; } private void validate(final String expectedValue) { assertEquals(key, actualKey); assertEquals(1, handlerCalled); assertEquals(expectedValue, actualValue); } private String getActualValue() { return actualValue; } } @Test public void testKeyHandled() throws JsonException { final String key = "senderId"; final String value = "d4a2d0ba-20c9-4b96-9d62-948035aa9d25"; OneTimeHandler handler = new OneTimeHandler(key); JsonStreamer streamer = new JsonStreamer(); streamer.addHandler(key, handler); streamer.process(json); handler.validate(value); } @Test public void testMultiplyKeyHandled() throws JsonException { final String key1 = "created"; final String value1 = "null"; final String key2 = "contextId"; final String value2 = "edabbcbd-d083-4414-9787-08da8a834d38"; OneTimeHandler handler1 = new OneTimeHandler(key1); OneTimeHandler handler2 = new OneTimeHandler(key2); JsonStreamer streamer = new JsonStreamer(); streamer.addHandler(key1, handler1); streamer.addHandler(key2, handler2); streamer.process(json); handler1.validate(value1); handler2.validate(value2); } @Test public void testJsonArray() throws JsonException { // TODO //dummy final String key = "senderId"; final String value = "d4a2d0ba-20c9-4b96-9d62-948035aa9d25"; OneTimeHandler handler = new OneTimeHandler(key); JsonStreamer streamer = new JsonStreamer(); streamer.addHandler(key, handler); streamer.process(jsonWithArray); //handler.validate(value); } @Test(expected = JsonException.class) public void testJsonGarbage() throws JsonException { final String key = "senderId"; final String value = "d4a2d0ba-20c9-4b96-9d62-948035aa9d25"; OneTimeHandler handler = new OneTimeHandler(key); JsonStreamer streamer = new JsonStreamer(); streamer.addHandler(key, handler); streamer.process(jsonGarbage); } @Test public void testJsonInnerObject() throws JsonException { final String key = "contextId"; final String value = "edabbcbd-d083-4414-9787-08da8a834d38"; OneTimeHandler handler = new OneTimeHandler(key); JsonStreamer streamer = new JsonStreamer(); streamer.addHandler(key, handler); streamer.process(INNER_TEST); handler.validate(value); } }