package com.amazonaws.services.dynamodbv2.json.converter; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.File; import java.util.ArrayList; import java.util.Map; import org.junit.Before; import org.junit.Test; import com.amazonaws.services.dynamodbv2.json.converter.impl.JacksonStreamReaderImpl; import com.amazonaws.services.dynamodbv2.model.AttributeValue; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonParser; public class TestJacksonStreamReader { private static final String imageManifest = ClassLoader.getSystemResource("image_manifest_converter.json").getFile(); private static final String imageManifestBroken = ClassLoader.getSystemResource("image_manifest_broken.json") .getFile(); private static final String flickrPhoto = ClassLoader.getSystemResource("flickr.json").getFile(); private JsonFactory jsonFactory; @Test public void getFirstSolMetadata() throws Exception { final JsonParser jp = jsonFactory.createJsonParser(new File(imageManifest)); final JacksonStreamReaderImpl reader = new JacksonStreamReaderImpl(jp); // Seek for sols array assertTrue(reader.seek("sols")); final Map<String, AttributeValue> item = reader.getNextItem(); assertEquals("1", item.get("sol").getN()); assertEquals("150", item.get("num_images").getN()); assertEquals("2004-01-30T08:11:15.222Z", item.get("most_recent_image").getS()); assertEquals("2013-12-05T20:37:00.000Z", item.get("last_manifest_update").getS()); assertEquals("http://merpublic.s3.amazonaws.com/oss/merb/images/images_sol1.json", item.get("url").getS()); } @Test public void getLastSolMetadata() throws Exception { final JsonParser jp = jsonFactory.createJsonParser(new File(imageManifest)); final JacksonStreamReaderImpl reader = new JacksonStreamReaderImpl(jp); // Seek for sols array assertTrue(reader.seek("sols")); Map<String, AttributeValue> item = null; Map<String, AttributeValue> next; while ((next = reader.getNextItem()) != null) { item = next; } assertEquals("3760", item.get("sol").getN()); assertEquals("0", item.get("num_images").getN()); assertEquals("1900", item.get("most_recent_image").getS()); assertEquals("2014-08-22T19:06:50.000Z", item.get("last_manifest_update").getS()); assertEquals("http://merpublic.s3.amazonaws.com/oss/merb/images/images_sol3760.json", item.get("url").getS()); assertEquals(null, reader.getNextItem()); } @Test public void loadBrokenJsonFile() throws Exception { final JsonParser jp = jsonFactory.createJsonParser(new File(imageManifestBroken)); final JacksonStreamReaderImpl reader = new JacksonStreamReaderImpl(jp); // Seek for sols array assertTrue(reader.seek("sols")); final Map<String, AttributeValue> item = reader.getNextItem(); // First item can be read correctly assertEquals("1", item.get("sol").getN()); try { // Second one should fail because the second item is corrupted reader.getNextItem(); } catch (final JsonParseException e) { // Expected behavior } } @Test public void loadEmptyArray() throws Exception { final JsonParser jp = jsonFactory.createJsonParser("[]"); final JacksonStreamReaderImpl reader = new JacksonStreamReaderImpl(jp); final Map<String, AttributeValue> item = reader.getNextItem(); assert (item == null); } @Test public void loadEmptyObject() throws Exception { final JsonParser jp = jsonFactory.createJsonParser("{}"); final JacksonStreamReaderImpl reader = new JacksonStreamReaderImpl(jp); final Map<String, AttributeValue> item = reader.getNextItem(); assertEquals(0, item.size()); } @Test public void loadFlickrMetadata() throws Exception { final JsonParser jp = jsonFactory.createJsonParser(new File(flickrPhoto)); final JacksonStreamReaderImpl reader = new JacksonStreamReaderImpl(jp); final Map<String, AttributeValue> item = reader.getNextItem(); final ArrayList<AttributeValue> fans = new ArrayList<AttributeValue>(); fans.add(new AttributeValue().withS("kentay")); assertEquals(new AttributeValue().withS("14911691861"), item.get("id")); assertEquals(new AttributeValue().withN("6"), item.get("farm")); assertEquals(new AttributeValue().withL(fans), item.get("fans")); assertEquals(new AttributeValue().withN("2.14735356869"), item.get("views-index")); assertEquals(new AttributeValue().withNULL(true), item.get("video")); } @Test public void loadImageManifestAsASingleItem() throws Exception { final JsonParser jp = jsonFactory.createJsonParser(new File(imageManifest)); final JacksonStreamReaderImpl reader = new JacksonStreamReaderImpl(jp); final Map<String, AttributeValue> item = reader.getNextItem(); assertEquals("mer-images-manifest-1.0", item.get("type").getS()); assertEquals(3286, item.get("sols").getL().size()); } @Before public void setup() { jsonFactory = new JsonFactory(); } }