/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package gobblin.converter.csv;
import gobblin.configuration.WorkUnitState;
import gobblin.converter.DataConversionException;
import java.io.IOException;
import java.io.InputStreamReader;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.opencsv.CSVParser;
@Test(groups = {"gobblin.converter"})
public class CsvToJsonConverterV2Test {
private String row11Cols = "20160924,desktop,Dynamic Segment,42935,0.0446255968324211,1590.4702457202748,348380,8.1141260044252945,232467,206.98603475430664,33028";
private String row10Cols = "20160924,desktop,42935,0.0446255968324211,1590.4702457202748,348380,8.1141260044252945,232467,206.98603475430664,33028";
public void convertOutput() throws IOException {
JsonParser parser = new JsonParser();
JsonElement jsonElement = parser.parse(new InputStreamReader(getClass().getResourceAsStream("/converter/csv/schema_with_10_fields.json")));
JsonArray outputSchema = jsonElement.getAsJsonArray();
CSVParser csvParser = new CSVParser();
String[] inputRecord = csvParser.parseLine(row10Cols);
CsvToJsonConverterV2 converter = new CsvToJsonConverterV2();
converter.init(new WorkUnitState());
JsonObject actual = converter.createOutput(outputSchema, inputRecord);
JsonObject expected = parser.parse(new InputStreamReader(getClass().getResourceAsStream("/converter/csv/10_fields.json")))
.getAsJsonObject();
Assert.assertEquals(expected, actual);
converter.close();
}
public void convertOutputSkippingField() throws IOException, DataConversionException {
JsonParser parser = new JsonParser();
JsonElement jsonElement = parser.parse(new InputStreamReader(getClass().getResourceAsStream("/converter/csv/schema_with_10_fields.json")));
JsonArray outputSchema = jsonElement.getAsJsonArray();
CSVParser csvParser = new CSVParser();
String[] inputRecord = csvParser.parseLine(row11Cols);
CsvToJsonConverterV2 converter = new CsvToJsonConverterV2();
WorkUnitState wuState = new WorkUnitState();
wuState.setProp(CsvToJsonConverterV2.CUSTOM_ORDERING, "0,1,3,4,5,6,7,8,9,10");
converter.init(wuState);
JsonObject actual = converter.convertRecord(outputSchema, inputRecord, wuState).iterator().next();
JsonObject expected = parser.parse(new InputStreamReader(getClass().getResourceAsStream("/converter/csv/10_fields.json")))
.getAsJsonObject();
Assert.assertEquals(expected, actual);
converter.close();
}
public void convertOutputMismatchFields() throws IOException {
JsonParser parser = new JsonParser();
JsonElement jsonElement = parser.parse(new InputStreamReader(getClass().getResourceAsStream("/converter/csv/schema_with_10_fields.json")));
JsonArray outputSchema = jsonElement.getAsJsonArray();
CSVParser csvParser = new CSVParser();
String[] inputRecord = csvParser.parseLine(row11Cols);
CsvToJsonConverterV2 converter = new CsvToJsonConverterV2();
try {
converter.createOutput(outputSchema, inputRecord);
Assert.fail();
} catch (Exception e) {
}
converter.close();
}
public void convertOutputAddingNull() throws IOException, DataConversionException {
JsonParser parser = new JsonParser();
JsonElement jsonElement = parser.parse(new InputStreamReader(getClass().getResourceAsStream("/converter/csv/schema_with_11_fields.json")));
JsonArray outputSchema = jsonElement.getAsJsonArray();
CSVParser csvParser = new CSVParser();
String[] inputRecord = csvParser.parseLine(row11Cols);
CsvToJsonConverterV2 converter = new CsvToJsonConverterV2();
WorkUnitState wuState = new WorkUnitState();
wuState.setProp(CsvToJsonConverterV2.CUSTOM_ORDERING, "0,1,-1,3,4,5,6,7,8,9,10");
converter.init(wuState);
JsonObject actual = converter.convertRecord(outputSchema, inputRecord, wuState).iterator().next();
JsonObject expected = parser.parse(new InputStreamReader(getClass().getResourceAsStream("/converter/csv/11_fields_with_null.json")))
.getAsJsonObject();
Assert.assertEquals(expected, actual);
converter.close();
}
}