34
34
import java .util .Arrays ;
35
35
import java .util .HashMap ;
36
36
import java .util .LinkedHashMap ;
37
+ import java .util .List ;
37
38
import java .util .Map ;
38
39
39
40
import static org .junit .jupiter .api .Assertions .*;
@@ -45,7 +46,8 @@ public class RecordConverterTest {
45
46
public static Schema OBJ_SCHEMA_1 ;
46
47
public static Struct OBJ_STRUCT_1 ;
47
48
public static Map OBJ_MAP_1 ;
48
- public static BsonDocument EXPECTED_BSON_DOC_BYTES_1 ;
49
+ public static BsonDocument EXPECTED_BSON_DOC_OBJ_STRUCT_1 ;
50
+ public static BsonDocument EXPECTED_BSON_DOC_OBJ_MAP_1 ;
49
51
public static BsonDocument EXPECTED_BSON_DOC_RAW_1 ;
50
52
51
53
@ BeforeAll
@@ -60,6 +62,8 @@ public static void initializeTestData() {
60
62
"\" myArray1\" :[\" str_1\" ,\" str_2\" ,\" ...\" ,\" str_N\" ]," +
61
63
"\" myArray2\" :[{\" k\" :\" a\" ,\" v\" :1},{\" k\" :\" b\" ,\" v\" :2},{\" k\" :\" c\" ,\" v\" :3}]," +
62
64
"\" mySubDoc2\" :{\" k1\" :9,\" k2\" :8,\" k3\" :7}," +
65
+ "\" myMapOfStrings\" :{\" k1\" : [ \" v1-a\" , \" v1-b\" ],\" k2\" : [ \" v2-a\" ],\" k3\" :[ \" v3-a\" , \" v3-b\" , \" v3-c\" ]}," +
66
+ "\" myMapOfInts\" :{\" k1\" : [ 11, 12 ],\" k2\" : [ 21 ],\" k3\" :[ 31, 32, 33 ]}," +
63
67
"\" myBytes\" :\" S2Fma2Egcm9ja3Mh\" ," +
64
68
"\" myDate\" : 1489705200000," +
65
69
"\" myTimestamp\" : 1489705200000," +
@@ -82,6 +86,8 @@ public static void initializeTestData() {
82
86
.build ())
83
87
)
84
88
.field ("mySubDoc2" , SchemaBuilder .map (Schema .STRING_SCHEMA , Schema .INT32_SCHEMA ).build ())
89
+ .field ( "myMapOfStrings" , SchemaBuilder .map (Schema .STRING_SCHEMA , SchemaBuilder .array (Schema .STRING_SCHEMA ).build ()).build ())
90
+ .field ( "myMapOfInts" , SchemaBuilder .map (Schema .STRING_SCHEMA , SchemaBuilder .array (Schema .INT32_SCHEMA ).build ()).build ())
85
91
.field ("myBytes" , Schema .BYTES_SCHEMA )
86
92
.field ("myDate" , Date .SCHEMA )
87
93
.field ("myTimestamp" , Timestamp .SCHEMA )
@@ -108,6 +114,16 @@ public static void initializeTestData() {
108
114
)
109
115
)
110
116
.put ("mySubDoc2" ,new HashMap <String ,Integer >(){{ put ("k1" ,9 ); put ("k2" ,8 ); put ("k3" ,7 );}})
117
+ .put ("myMapOfStrings" , new HashMap <String , List <String >>(){{
118
+ put ("k1" , Arrays .asList ("v1-a" , "v1-b" ));
119
+ put ("k2" , Arrays .asList ("v2-a" ));
120
+ put ("k3" , Arrays .asList ("v3-a" , "v3-b" , "v3-c" ));
121
+ }})
122
+ .put ("myMapOfInts" , new HashMap <String , List <Integer >>(){{
123
+ put ("k1" , Arrays .asList (11 , 12 ));
124
+ put ("k2" , Arrays .asList (21 ));
125
+ put ("k3" , Arrays .asList (31 , 32 , 33 ));
126
+ }})
111
127
.put ("myBytes" , new byte []{75 , 97 , 102 , 107 , 97 , 32 , 114 , 111 , 99 , 107 , 115 , 33 })
112
128
.put ("myDate" , java .util .Date .from (ZonedDateTime .of (
113
129
LocalDate .of (2017 ,3 ,17 ), LocalTime .MIDNIGHT , ZoneOffset .systemDefault ()
@@ -137,6 +153,14 @@ public static void initializeTestData() {
137
153
)
138
154
);
139
155
OBJ_MAP_1 .put ("mySubDoc2" ,new HashMap <String ,Integer >(){{ put ("k1" ,9 ); put ("k2" ,8 ); put ("k3" ,7 );}});
156
+ OBJ_MAP_1 .put ("myMapOfStrings" ,new HashMap <String ,List <String >>(){{
157
+ put ("k1" ,Arrays .asList ("v1-a" , "v1-b" ));
158
+ put ("k2" ,Arrays .asList ("v2-a" ));
159
+ put ("k3" ,Arrays .asList ("v3-a" , "v3-b" , "v3-c" ));}});
160
+ OBJ_MAP_1 .put ("myMapOfInts" ,new HashMap <String ,List <Integer >>(){{
161
+ put ("k1" ,Arrays .asList (11 , 12 ));
162
+ put ("k2" ,Arrays .asList (21 ));
163
+ put ("k3" ,Arrays .asList (31 , 32 , 33 ));}});
140
164
OBJ_MAP_1 .put ("myBytes" , new byte []{75 , 97 , 102 , 107 , 97 , 32 , 114 , 111 , 99 , 107 , 115 , 33 });
141
165
OBJ_MAP_1 .put ("myDate" , java .util .Date .from (ZonedDateTime .of (
142
166
LocalDate .of (2017 ,3 ,17 ), LocalTime .MIDNIGHT , ZoneOffset .systemDefault ()
@@ -154,7 +178,7 @@ public static void initializeTestData() {
154
178
// thus I'm cheating a little by using a Decimal128 here...
155
179
OBJ_MAP_1 .put ("myDecimal" , Decimal128 .parse ("12345.6789" ));
156
180
157
- EXPECTED_BSON_DOC_BYTES_1 = new BsonDocument ()
181
+ BsonDocument commonMapAndStructFields = new BsonDocument ()
158
182
.append ("_id" , new BsonString ("1234567890" ))
159
183
.append ("myString" , new BsonString ("some foo bla text" ))
160
184
.append ("myInt" , new BsonInt32 (42 ))
@@ -170,10 +194,31 @@ public static void initializeTestData() {
170
194
new BsonDocument ("k" , new BsonString ("a" )).append ("v" , new BsonInt32 (1 )),
171
195
new BsonDocument ("k" , new BsonString ("b" )).append ("v" , new BsonInt32 (2 )),
172
196
new BsonDocument ("k" , new BsonString ("c" )).append ("v" , new BsonInt32 (3 ))))
173
- ).append ("mySubDoc2" , new BsonDocument ("k1" , new BsonInt32 (9 ))
197
+ )
198
+ .append ("mySubDoc2" , new BsonDocument ("k1" , new BsonInt32 (9 ))
174
199
.append ("k2" , new BsonInt32 (8 ))
175
200
.append ("k3" , new BsonInt32 (7 ))
176
201
)
202
+ .append ("myMapOfStrings" , new BsonDocument ("k1" , new BsonInt32 (9 ))
203
+ .append ("k1" , new BsonArray (Arrays .asList (
204
+ new BsonString ("v1-a" ),
205
+ new BsonString ("v1-b" ))))
206
+ .append ("k2" , new BsonArray (Arrays .asList (
207
+ new BsonString ("v2-a" ))))
208
+ .append ("k3" , new BsonArray (Arrays .asList (
209
+ new BsonString ("v3-a" ),
210
+ new BsonString ("v3-b" ),
211
+ new BsonString ("v3-c" )))))
212
+ .append ("myMapOfInts" , new BsonDocument ("k1" , new BsonInt32 (9 ))
213
+ .append ("k1" , new BsonArray (Arrays .asList (
214
+ new BsonInt32 (11 ),
215
+ new BsonInt32 (12 ))))
216
+ .append ("k2" , new BsonArray (Arrays .asList (
217
+ new BsonInt32 (21 ))))
218
+ .append ("k3" , new BsonArray (Arrays .asList (
219
+ new BsonInt32 (31 ),
220
+ new BsonInt32 (32 ),
221
+ new BsonInt32 (33 )))))
177
222
.append ("myBytes" , new BsonBinary (new byte []{75 , 97 , 102 , 107 , 97 , 32 , 114 , 111 , 99 , 107 , 115 , 33 }))
178
223
.append ("myDate" , new BsonDateTime (
179
224
java .util .Date .from (ZonedDateTime .of (
@@ -192,7 +237,10 @@ public static void initializeTestData() {
192
237
))
193
238
.append ("myDecimal" , new BsonDecimal128 (new Decimal128 (new BigDecimal ("12345.6789" ))));
194
239
195
- EXPECTED_BSON_DOC_RAW_1 = EXPECTED_BSON_DOC_BYTES_1 .clone ();
240
+ EXPECTED_BSON_DOC_OBJ_STRUCT_1 = commonMapAndStructFields .clone ();
241
+ EXPECTED_BSON_DOC_OBJ_MAP_1 = commonMapAndStructFields .clone ();
242
+
243
+ EXPECTED_BSON_DOC_RAW_1 = commonMapAndStructFields .clone ();
196
244
EXPECTED_BSON_DOC_RAW_1 .replace ("myBytes" ,new BsonString ("S2Fma2Egcm9ja3Mh" ));
197
245
EXPECTED_BSON_DOC_RAW_1 .replace ("myDate" ,new BsonInt64 (1489705200000L ));
198
246
EXPECTED_BSON_DOC_RAW_1 .replace ("myTimestamp" ,new BsonInt64 (1489705200000L ));
@@ -216,7 +264,7 @@ public void testJsonRawStringConversion() {
216
264
public void testAvroOrJsonWithSchemaConversion () {
217
265
RecordConverter converter = new AvroJsonSchemafulRecordConverter ();
218
266
assertAll ("" ,
219
- () -> assertEquals (EXPECTED_BSON_DOC_BYTES_1 , converter .convert (OBJ_SCHEMA_1 , OBJ_STRUCT_1 )),
267
+ () -> assertEquals (EXPECTED_BSON_DOC_OBJ_STRUCT_1 , converter .convert (OBJ_SCHEMA_1 , OBJ_STRUCT_1 )),
220
268
() -> assertThrows (DataException .class , () -> converter .convert (OBJ_SCHEMA_1 ,null )),
221
269
() -> assertThrows (DataException .class , () -> converter .convert (null , OBJ_STRUCT_1 )),
222
270
() -> assertThrows (DataException .class , () -> converter .convert (null ,null ))
@@ -228,7 +276,7 @@ public void testAvroOrJsonWithSchemaConversion() {
228
276
public void testJsonObjectConversion () {
229
277
RecordConverter converter = new JsonSchemalessRecordConverter ();
230
278
assertAll ("" ,
231
- () -> assertEquals (EXPECTED_BSON_DOC_BYTES_1 , converter .convert (null , OBJ_MAP_1 )),
279
+ () -> assertEquals (EXPECTED_BSON_DOC_OBJ_MAP_1 , converter .convert (null , OBJ_MAP_1 )),
232
280
() -> assertThrows (DataException .class , () -> converter .convert (null ,null ))
233
281
);
234
282
}
0 commit comments