Skip to content

Commit 8de6fdb

Browse files
author
Srilakshmi Manjunath Bharadwaj
committed
Fixing test
1 parent a844338 commit 8de6fdb

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

data-avro/src/main/java/com/linkedin/data/avro/DataTranslator.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,18 @@ public class DataTranslator implements DataTranslatorContext
6161
{
6262
protected DataTranslationOptions _dataTranslationOptions;
6363

64+
public static void backFillMissingDeafultInDataMap(DataMap map, RecordDataSchema dataSchema) {
65+
for (RecordDataSchema.Field field: dataSchema.getFields()) {
66+
DataSchema fieldType = field.getType();
67+
if ( fieldType.getDereferencedType() != DataSchema.Type.ARRAY && fieldType.getDereferencedType() != DataSchema.Type.MAP) {
68+
continue;
69+
}
70+
if (field.getDefault() != null && (!map.containsKey(field.getName()) || map.get(field.getName()) == null)) {
71+
map.put(field.getName(), field.getDefault());
72+
}
73+
}
74+
}
75+
6476
/**
6577
* Convert the given {@link DataMap} conforming to the provided {@link RecordDataSchema} to a {@link GenericRecord}.
6678
*
@@ -74,6 +86,7 @@ public class DataTranslator implements DataTranslatorContext
7486
*/
7587
public static GenericRecord dataMapToGenericRecord(DataMap map, RecordDataSchema dataSchema) throws DataTranslationException
7688
{
89+
backFillMissingDeafultInDataMap(map, dataSchema);
7790
Schema avroSchema = SchemaTranslator.dataToAvroSchema(dataSchema);
7891
return dataMapToGenericRecord(map, dataSchema, avroSchema, null);
7992
}
@@ -94,6 +107,7 @@ public static GenericRecord dataMapToGenericRecord(DataMap map, RecordDataSchema
94107
DataMapToAvroRecordTranslationOptions options)
95108
throws DataTranslationException
96109
{
110+
backFillMissingDeafultInDataMap(map, dataSchema);
97111
Schema avroSchema = SchemaTranslator.dataToAvroSchema(dataSchema);
98112
return dataMapToGenericRecord(map, dataSchema, avroSchema, options);
99113
}
@@ -102,6 +116,7 @@ public static GenericRecord dataMapToGenericRecord(DataMap map, RecordDataSchema
102116
DataMapToAvroRecordTranslationOptions options)
103117
throws DataTranslationException
104118
{
119+
backFillMissingDeafultInDataMap(map, dataSchema);
105120
DataMapToGenericRecordTranslator translator = new DataMapToGenericRecordTranslator(options);
106121
try
107122
{
@@ -116,6 +131,7 @@ public static GenericRecord dataMapToGenericRecord(DataMap map, RecordDataSchema
116131

117132
public static <T extends SpecificRecordBase> T dataMapToSpecificRecord(DataMap map, RecordDataSchema dataSchema,
118133
Schema avroSchema) throws DataTranslationException {
134+
backFillMissingDeafultInDataMap(map, dataSchema);
119135
DataMapToSpecificRecordTranslator translator = new DataMapToSpecificRecordTranslator();
120136
try {
121137
T avroRecord = translator.translate(map, dataSchema, avroSchema);
@@ -145,6 +161,7 @@ public static <T extends SpecificRecordBase> T dataMapToSpecificRecord(DataMap m
145161
*/
146162
public static GenericRecord dataMapToGenericRecord(DataMap map, RecordDataSchema dataSchema, Schema avroSchema) throws DataTranslationException
147163
{
164+
backFillMissingDeafultInDataMap(map, dataSchema);
148165
return dataMapToGenericRecord(map, dataSchema, avroSchema, null);
149166
}
150167

data-avro/src/test/java/com/linkedin/data/avro/TestDataTranslator.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package com.linkedin.data.avro;
1818

1919
import com.google.common.collect.ImmutableMap;
20+
import com.linkedin.avroutil1.compatibility.AvroCompatibilityHelper;
21+
import com.linkedin.data.Data;
2022
import com.linkedin.data.DataList;
2123
import com.linkedin.data.DataMap;
2224
import com.linkedin.data.TestUtil;
@@ -28,6 +30,7 @@
2830
import com.linkedin.data.avro.testevents.RecordArray;
2931
import com.linkedin.data.avro.testevents.RecordMap;
3032
import com.linkedin.data.avro.testevents.StringRecord;
33+
import com.linkedin.data.avro.testevents.TestArray;
3134
import com.linkedin.data.avro.testevents.TestEventRecordOfRecord;
3235
import com.linkedin.data.avro.testevents.TestEventWithUnionAndEnum;
3336
import com.linkedin.data.avro.util.AvroUtil;
@@ -1165,7 +1168,9 @@ private void testDataTranslation(String schemaText, String[][] row) throws IOExc
11651168
String expectedBeforeNamespaceProcessor = row[col][i];
11661169
String expected = TestAvroUtil.namespaceProcessor(expectedBeforeNamespaceProcessor);
11671170
if (debug && expected != expectedBeforeNamespaceProcessor) out.println(" Expected:" + expected);
1168-
1171+
if (!result.contains(expected)) {
1172+
System.out.println("RESULT: "+result+"\n"+"EXPECTED: "+expected);
1173+
}
11691174
assertTrue(result.contains(expected));
11701175
}
11711176

@@ -2291,5 +2296,29 @@ public void testMapArrayUnion() throws IOException {
22912296
Assert.assertTrue(mapOfMapOfArrayOfMapArrayUnion.get(0) instanceof Map);
22922297
Assert.assertEquals(((Map<?, ?>) mapOfMapOfArrayOfMapArrayUnion.get(0)).get("recordMap"), mapOfArrayOfMapArrayUnion);
22932298
}
2299+
2300+
@Test
2301+
public void testDataMapBackfill() throws IOException {
2302+
final String SCHEMA =
2303+
"{" +
2304+
" \"type\":\"record\"," +
2305+
" \"name\":\"Foo\"," +
2306+
" \"fields\":[" +
2307+
" {" +
2308+
" \"name\":\"arrayField\"," +
2309+
" \"type\":{" +
2310+
" \"type\":\"array\"," +
2311+
" \"items\":\"string\"" +
2312+
" }," +
2313+
" \"default\":[ ]" +
2314+
" }" +
2315+
" ]" +
2316+
"}";
2317+
RecordDataSchema recordDataSchema =
2318+
(RecordDataSchema) TestUtil.dataSchemaFromString(SCHEMA);
2319+
DataMap map = new DataMap();
2320+
GenericRecord record = DataTranslator.dataMapToGenericRecord(map, recordDataSchema);
2321+
Assert.assertEquals(record.get("arrayField"), map.get("arrayField"));
2322+
}
22942323
}
22952324

0 commit comments

Comments
 (0)