11package org .embulk .output .dynamodb ;
22
33import com .amazonaws .services .dynamodbv2 .document .DynamoDB ;
4+ import com .amazonaws .services .dynamodbv2 .document .Item ;
5+ import com .amazonaws .services .dynamodbv2 .document .ItemCollection ;
6+ import com .amazonaws .services .dynamodbv2 .document .ScanOutcome ;
7+ import com .amazonaws .services .dynamodbv2 .document .Table ;
48import com .google .common .collect .ImmutableList ;
59import com .google .common .collect .ImmutableMap ;
610import com .google .common .collect .Lists ;
2226import org .junit .BeforeClass ;
2327import org .junit .Rule ;
2428import org .junit .Test ;
29+ import org .msgpack .value .Value ;
30+ import org .msgpack .value .ValueFactory ;
2531
32+ import java .math .BigDecimal ;
33+ import java .util .ArrayList ;
2634import java .util .Arrays ;
35+ import java .util .LinkedHashMap ;
2736import java .util .List ;
37+ import java .util .Map ;
2838
2939import static org .junit .Assert .assertEquals ;
3040
@@ -134,39 +144,65 @@ public List<TaskReport> run(TaskSource taskSource)
134144 });
135145 TransactionalPageOutput output = plugin .open (task .dump (), schema , 0 );
136146
137- List <Page > pages = PageTestUtils .buildPage (runtime .getBufferAllocator (), schema , 1L , 32864L , "2015-01-27T19:23:49" , "2015-01-27T00:00:00" , true , 123.45 , "embulk" );
147+ Map <Value , Value > map = new LinkedHashMap <>();
148+ map .put (ValueFactory .newString ("foo" ), ValueFactory .newString ("bar" ));
149+ map .put (ValueFactory .newString ("key1" ), ValueFactory .newString ("val1" ));
150+ List <Page > pages = PageTestUtils .buildPage (runtime .getBufferAllocator (), schema ,
151+ 1L ,
152+ 32864L ,
153+ 1L ,
154+ 1L ,
155+ true ,
156+ 123.45 ,
157+ "embulk" ,
158+ ValueFactory .newArray (ValueFactory .newInteger (1 ), ValueFactory .newInteger (2 ), ValueFactory .newInteger (3 ), ValueFactory .newArray (ValueFactory .newString ("inner" ))),
159+ ValueFactory .newMap (map )
160+ );
138161 assertEquals (1 , pages .size ());
139162 for (Page page : pages ) {
140163 output .add (page );
141164 }
142165
143- // output.finish();
144- // output.commit();
145- //
146- // DynamodbUtils dynamoDbUtils = new DynamodbUtils();
147- // DynamoDB dynamoDB = null;
148- // try {
149- // dynamoDB = dynamoDbUtils.createDynamoDB(task);
150- //
151- // Table table = dynamoDB.getTable(task.getTable());
152- // ItemCollection<ScanOutcome> items = table.scan();
153- //
154- // while (items.iterator().hasNext()) {
155- // Map<String, Object> item = items.iterator().next().asMap();
156- // assertEquals(1, item.get("id"));
157- // assertEquals(32864, item.get("account"));
158- // assertEquals("2015-01-27T19:23:49", item.get("time"));
159- // assertEquals("2015-01-27T00:00:00", item.get("purchase"));
160- // assertEquals(true, item.get("flg"));
161- // assertEquals(123.45, item.get("score"));
162- // assertEquals("embulk", item.get("comment"));
163- // }
164- // }
165- // finally {
166- // if (dynamoDB != null) {
167- // dynamoDB.shutdown();
168- // }
169- // }
166+ output .finish ();
167+ output .commit ();
168+
169+ DynamodbUtils dynamoDbUtils = new DynamodbUtils ();
170+ DynamoDB dynamoDB = null ;
171+ try {
172+ dynamoDB = dynamoDbUtils .createDynamoDB (task );
173+
174+ Table table = dynamoDB .getTable (task .getTable ());
175+ ItemCollection <ScanOutcome > items = table .scan ();
176+
177+ for (Item item1 : items ) {
178+ assertEquals (1L , item1 .getLong ("id" ));
179+ assertEquals (32864L , item1 .getLong ("account" ));
180+ assertEquals ("1970-01-01 00:00:01 UTC" , item1 .getString ("time" ));
181+ assertEquals ("1970-01-01 00:00:01 UTC" , item1 .getString ("purchase" ));
182+ assertEquals (true , item1 .getBoolean ("flg" ));
183+ assertEquals (new BigDecimal ("123.45" ), item1 .get ("score" ));
184+ assertEquals ("embulk" , item1 .getString ("comment" ));
185+
186+ List <Object > list = new ArrayList <>();
187+ List <Object > inner = new ArrayList <>();
188+ inner .add ("inner" );
189+ list .add (new BigDecimal (1 ));
190+ list .add (new BigDecimal (2 ));
191+ list .add (new BigDecimal (3 ));
192+ list .add (inner );
193+ assertEquals (list , item1 .getList ("list" ));
194+
195+ Map <String , Object > expectedMap = new LinkedHashMap <>();
196+ expectedMap .put ("foo" , "bar" );
197+ expectedMap .put ("key1" , "val1" );
198+ assertEquals (expectedMap , item1 .getMap ("map" ));
199+ }
200+ }
201+ finally {
202+ if (dynamoDB != null ) {
203+ dynamoDB .shutdown ();
204+ }
205+ }
170206 }
171207
172208 @ Test
@@ -192,7 +228,7 @@ private ConfigSource config()
192228 .set ("region" , "us-west-1" )
193229 .set ("table" , "dummy" )
194230 .set ("primary_key" , "id" )
195- .set ("primary_key_type" , "string " )
231+ .set ("primary_key_type" , "number " )
196232 .set ("read_capacity_units" , capacityUnitConfig ())
197233 .set ("write_capacity_units" , capacityUnitConfig ())
198234 .set ("auth_method" , "basic" )
@@ -244,6 +280,8 @@ private ImmutableList<Object> schemaConfig()
244280 builder .add (ImmutableMap .of ("name" , "flg" , "type" , "boolean" ));
245281 builder .add (ImmutableMap .of ("name" , "score" , "type" , "double" ));
246282 builder .add (ImmutableMap .of ("name" , "comment" , "type" , "string" ));
283+ builder .add (ImmutableMap .of ("name" , "list" , "type" , "json" ));
284+ builder .add (ImmutableMap .of ("name" , "map" , "type" , "json" ));
247285 return builder .build ();
248286 }
249287}
0 commit comments