package com.bigdata.rdf.sail.model; import java.io.IOException; import java.io.StringBufferInputStream; import java.io.StringWriter; import java.util.Iterator; import java.util.List; import junit.framework.TestCase; import com.fasterxml.jackson.core.JsonGenerationException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonMappingException; public class TestJsonModelSerialization extends TestCase { public final static String rQueryJson = "[{\"extQueryId\":\"10\",\"queryUuid\":\"2392a97d-64e7-4c63-bde0-da4fdb49ae9d\",\"begin\":1433272158065380000,\"isUpdateQuery\":false,\"cancelled\":false,\"elapsedTimeNS\":4177445000},{\"extQueryId\":\"11\",\"queryUuid\":\"e38c5441-758b-4805-ae95-05a46e279297\",\"begin\":1433272159648011000,\"isUpdateQuery\":false,\"cancelled\":false,\"elapsedTimeNS\":2594833000}]"; /** * Test the serialization from Java Objects to JSON * @throws IOException * @throws JsonMappingException * @throws JsonGenerationException */ @org.junit.Test public void testSerialToJson() throws JsonGenerationException, JsonMappingException, IOException { final List<RunningQuery> rQueriesOrig = deserialize(rQueryJson); final List<RunningQuery> rQueriesDeserial; final StringWriter sw = new StringWriter(); JsonHelper.writeRunningQueryList(sw, rQueriesOrig); final String jsonResult = sw.toString(); assert(jsonResult != null); rQueriesDeserial = deserialize(jsonResult); final Iterator<RunningQuery> it1 = rQueriesOrig.iterator(); final Iterator<RunningQuery> it2 = rQueriesDeserial.iterator(); //Can't compare directly as the elapsed time will be different while(it1.hasNext() && it2.hasNext()) { final RunningQuery r1 = it1.next(); final RunningQuery r2 = it2.next(); assertEquals(r1.getBegin(),r2.getBegin()); assertEquals(r1.getQueryUuid(),r2.getQueryUuid()); assertEquals(r1.getExtQueryId(),r2.getExtQueryId()); } //They should have the same number of elements assert(!it1.hasNext()); assert(!it2.hasNext()); } /** * Test the serialization from JSON to Java Objects */ @org.junit.Test public void testSerializedFromJson() { final List<RunningQuery> rQueries = deserialize(rQueryJson); assert(rQueries != null ); final Iterator<RunningQuery> iter = rQueries.iterator(); int i = 0; assert(iter.hasNext()); while(iter.hasNext()) { final RunningQuery r = iter.next(); i++; } assertEquals(i,2); } /** * Convenience method to deserialize JSON. * @return */ private List<RunningQuery> deserialize(String str){ //FIXME: Resolve when upgrading to newer version of Jackson that //supports writers final StringBufferInputStream reader = new StringBufferInputStream(str); try { return JsonHelper.readRunningQueryList(reader); } catch (JsonProcessingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }