package com.ldbc.driver.validation;
import com.google.common.collect.Lists;
import com.ldbc.driver.Workload;
import com.ldbc.driver.WorkloadException;
import com.ldbc.driver.control.ConsoleAndFileDriverConfiguration;
import com.ldbc.driver.control.DriverConfigurationException;
import com.ldbc.driver.csv.simple.SimpleCsvFileReader;
import com.ldbc.driver.csv.simple.SimpleCsvFileWriter;
import com.ldbc.driver.testutils.TestUtils;
import com.ldbc.driver.util.MapUtils;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcNoResult;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery1;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery10;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery10Result;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery11;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery11Result;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery12;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery12Result;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery13;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery13Result;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery14;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery14Result;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery1Result;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery2;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery2Result;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery3;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery3Result;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery4;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery4Result;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery5;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery5Result;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery6;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery6Result;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery7;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery7Result;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery8;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery8Result;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery9;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcQuery9Result;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcShortQuery1PersonProfile;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcShortQuery1PersonProfileResult;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcShortQuery2PersonPosts;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcShortQuery2PersonPostsResult;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcShortQuery3PersonFriends;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcShortQuery3PersonFriendsResult;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcShortQuery4MessageContent;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcShortQuery4MessageContentResult;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcShortQuery5MessageCreator;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcShortQuery5MessageCreatorResult;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcShortQuery6MessageForum;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcShortQuery6MessageForumResult;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcShortQuery7MessageReplies;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcShortQuery7MessageRepliesResult;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcSnbInteractiveWorkload;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcSnbInteractiveWorkloadConfiguration;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcUpdate1AddPerson;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcUpdate2AddPostLike;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcUpdate3AddCommentLike;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcUpdate4AddForum;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcUpdate5AddForumMembership;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcUpdate6AddPost;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcUpdate7AddComment;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcUpdate8AddFriendship;
import com.ldbc.driver.workloads.ldbc.snb.interactive.db.DummyLdbcSnbInteractiveDb;
import com.ldbc.driver.workloads.ldbc.snb.interactive.db.DummyLdbcSnbInteractiveOperationInstances;
import com.ldbc.driver.workloads.ldbc.snb.interactive.db.DummyLdbcSnbInteractiveOperationResultInstances;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
public class ValidationParamsToCsvRowsToValidationParamsTest
{
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Test
public void validationParametersShouldBeUnchangedAfterSerializingAndMarshalling()
throws IOException, DriverConfigurationException, WorkloadException
{
long operationCount = 1;
String dbClassName = DummyLdbcSnbInteractiveDb.class.getName();
String workloadClassName = LdbcSnbInteractiveWorkload.class.getName();
ConsoleAndFileDriverConfiguration configuration =
ConsoleAndFileDriverConfiguration.fromDefaults( dbClassName, workloadClassName, operationCount );
Map<String,String> paramsMap = LdbcSnbInteractiveWorkloadConfiguration.defaultConfigSF1();
paramsMap.put( LdbcSnbInteractiveWorkloadConfiguration.PARAMETERS_DIRECTORY,
TestUtils.getResource( "/snb/interactive/" ).getAbsolutePath() );
paramsMap.put( LdbcSnbInteractiveWorkloadConfiguration.UPDATES_DIRECTORY,
TestUtils.getResource( "/snb/interactive/" ).getAbsolutePath() );
configuration = (ConsoleAndFileDriverConfiguration) configuration.applyArgs( paramsMap );
configuration = (ConsoleAndFileDriverConfiguration) configuration.applyArgs(
MapUtils.loadPropertiesToMap( TestUtils.getResource( "/snb/interactive/updateStream.properties" ) )
);
Workload workload = new LdbcSnbInteractiveWorkload();
workload.init( configuration );
// (1) params
List<ValidationParam> validationParamsBeforeSerializing =
buildParams( workload.dbValidationParametersFilter( 0 ) );
// (2) original->csv_rows
List<String[]> serializedValidationParamsAsCsvRows = Lists.newArrayList(
new ValidationParamsToCsvRows( validationParamsBeforeSerializing.iterator(), workload, true )
);
// (3) csv_rows->csv_file
File csvFile1 = temporaryFolder.newFile();
SimpleCsvFileWriter simpleCsvFileWriter1 =
new SimpleCsvFileWriter( csvFile1, SimpleCsvFileWriter.DEFAULT_COLUMN_SEPARATOR );
simpleCsvFileWriter1.writeRows( serializedValidationParamsAsCsvRows.iterator() );
simpleCsvFileWriter1.close();
// (4) csv_file->csv_rows
List<String[]> csvFile1Rows = Lists.newArrayList(
new SimpleCsvFileReader( csvFile1, SimpleCsvFileReader.DEFAULT_COLUMN_SEPARATOR_REGEX_STRING )
);
// (5) csv_rows->params
List<ValidationParam> validationParamsAfterSerializingAndMarshalling = Lists.newArrayList(
new ValidationParamsFromCsvRows( csvFile1Rows.iterator(), workload )
);
// (6) params->csv_rows
List<String[]> serializedValidationParamsAsCsvRowsAfterSerializingAndMarshalling = Lists.newArrayList(
new ValidationParamsToCsvRows( validationParamsAfterSerializingAndMarshalling.iterator(), workload,
true )
);
// (7) csv_rows->csv_file
File csvFile2 = temporaryFolder.newFile();
SimpleCsvFileWriter simpleCsvFileWriter2 =
new SimpleCsvFileWriter( csvFile2, SimpleCsvFileWriter.DEFAULT_COLUMN_SEPARATOR );
simpleCsvFileWriter2.writeRows( serializedValidationParamsAsCsvRowsAfterSerializingAndMarshalling.iterator() );
simpleCsvFileWriter2.close();
// (8) csv_file->csv_rows
List<String[]> csvFile2Rows = Lists.newArrayList(
new SimpleCsvFileReader( csvFile2, SimpleCsvFileReader.DEFAULT_COLUMN_SEPARATOR_REGEX_STRING )
);
// (8) csv_rows->params
List<ValidationParam> validationParamsAfterSerializingAndMarshallingAndSerializingAndMarshalling =
Lists.newArrayList(
new ValidationParamsFromCsvRows( csvFile2Rows.iterator(), workload )
);
// Then
assertThat( validationParamsBeforeSerializing, equalTo( validationParamsAfterSerializingAndMarshalling ) );
assertThat( validationParamsBeforeSerializing,
equalTo( validationParamsAfterSerializingAndMarshallingAndSerializingAndMarshalling ) );
assertThat( validationParamsAfterSerializingAndMarshalling,
equalTo( validationParamsAfterSerializingAndMarshallingAndSerializingAndMarshalling ) );
}
List<ValidationParam> buildParams( Workload.DbValidationParametersFilter dbValidationParametersFilter )
{
LdbcQuery1 read1 = DummyLdbcSnbInteractiveOperationInstances.read1();
List<LdbcQuery1Result> readResult1 = Lists.newArrayList(
DummyLdbcSnbInteractiveOperationResultInstances.read1Result()
);
ValidationParam validationParamRead1 = ValidationParam.createTyped( read1, readResult1 );
LdbcQuery2 read2 = DummyLdbcSnbInteractiveOperationInstances.read2();
List<LdbcQuery2Result> readResult2 = Lists.newArrayList(
DummyLdbcSnbInteractiveOperationResultInstances.read2Result(),
DummyLdbcSnbInteractiveOperationResultInstances.read2Result()
);
ValidationParam validationParamRead2 = ValidationParam.createTyped( read2, readResult2 );
LdbcQuery3 read3 = DummyLdbcSnbInteractiveOperationInstances.read3();
List<LdbcQuery3Result> readResult3 = Lists.newArrayList();
ValidationParam validationParamRead3 = ValidationParam.createTyped( read3, readResult3 );
LdbcQuery4 read4 = DummyLdbcSnbInteractiveOperationInstances.read4();
List<LdbcQuery4Result> readResult4 = Lists.newArrayList(
DummyLdbcSnbInteractiveOperationResultInstances.read4Result(),
DummyLdbcSnbInteractiveOperationResultInstances.read4Result(),
DummyLdbcSnbInteractiveOperationResultInstances.read4Result(),
DummyLdbcSnbInteractiveOperationResultInstances.read4Result()
);
ValidationParam validationParamRead4 = ValidationParam.createTyped( read4, readResult4 );
LdbcQuery5 read5 = DummyLdbcSnbInteractiveOperationInstances.read5();
List<LdbcQuery5Result> readResult5 = Lists.newArrayList(
DummyLdbcSnbInteractiveOperationResultInstances.read5Result(),
DummyLdbcSnbInteractiveOperationResultInstances.read5Result()
);
ValidationParam validationParamRead5 = ValidationParam.createTyped( read5, readResult5 );
LdbcQuery6 read6 = DummyLdbcSnbInteractiveOperationInstances.read6();
List<LdbcQuery6Result> readResult6 = Lists.newArrayList(
DummyLdbcSnbInteractiveOperationResultInstances.read6Result(),
DummyLdbcSnbInteractiveOperationResultInstances.read6Result(),
DummyLdbcSnbInteractiveOperationResultInstances.read6Result(),
DummyLdbcSnbInteractiveOperationResultInstances.read6Result(),
DummyLdbcSnbInteractiveOperationResultInstances.read6Result(),
DummyLdbcSnbInteractiveOperationResultInstances.read6Result(),
DummyLdbcSnbInteractiveOperationResultInstances.read6Result()
);
ValidationParam validationParamRead6 = ValidationParam.createTyped( read6, readResult6 );
LdbcQuery7 read7 = DummyLdbcSnbInteractiveOperationInstances.read7();
List<LdbcQuery7Result> readResult7 = Lists.newArrayList(
);
ValidationParam validationParamRead7 = ValidationParam.createTyped( read7, readResult7 );
LdbcQuery8 read8 = DummyLdbcSnbInteractiveOperationInstances.read8();
List<LdbcQuery8Result> readResult8 = Lists.newArrayList(
);
ValidationParam validationParamRead8 = ValidationParam.createTyped( read8, readResult8 );
LdbcQuery9 read9 = DummyLdbcSnbInteractiveOperationInstances.read9();
List<LdbcQuery9Result> readResult9 = Lists.newArrayList(
DummyLdbcSnbInteractiveOperationResultInstances.read9Result()
);
ValidationParam validationParamRead9 = ValidationParam.createTyped( read9, readResult9 );
LdbcQuery10 read10 = DummyLdbcSnbInteractiveOperationInstances.read10();
List<LdbcQuery10Result> readResult10 = Lists.newArrayList(
DummyLdbcSnbInteractiveOperationResultInstances.read10Result()
);
ValidationParam validationParamRead10 = ValidationParam.createTyped( read10, readResult10 );
LdbcQuery11 read11 = DummyLdbcSnbInteractiveOperationInstances.read11();
List<LdbcQuery11Result> readResult11 = Lists.newArrayList(
DummyLdbcSnbInteractiveOperationResultInstances.read11Result(),
DummyLdbcSnbInteractiveOperationResultInstances.read11Result()
);
ValidationParam validationParamRead11 = ValidationParam.createTyped( read11, readResult11 );
LdbcQuery12 read12 = DummyLdbcSnbInteractiveOperationInstances.read12();
List<LdbcQuery12Result> readResult12 = Lists.newArrayList(
DummyLdbcSnbInteractiveOperationResultInstances.read12Result()
);
ValidationParam validationParamRead12 = ValidationParam.createTyped( read12, readResult12 );
LdbcQuery13 read13 = DummyLdbcSnbInteractiveOperationInstances.read13();
LdbcQuery13Result readResult13 = DummyLdbcSnbInteractiveOperationResultInstances.read13Result();
ValidationParam validationParamRead13 = ValidationParam.createTyped( read13, readResult13 );
LdbcQuery14 read14 = DummyLdbcSnbInteractiveOperationInstances.read14();
List<LdbcQuery14Result> readResult14 = Lists.newArrayList(
DummyLdbcSnbInteractiveOperationResultInstances.read14Result(),
DummyLdbcSnbInteractiveOperationResultInstances.read14Result(),
DummyLdbcSnbInteractiveOperationResultInstances.read14Result()
);
ValidationParam validationParamRead14 = ValidationParam.createTyped( read14, readResult14 );
LdbcShortQuery1PersonProfile shortRead1 = DummyLdbcSnbInteractiveOperationInstances.short1();
LdbcShortQuery1PersonProfileResult shortReadResult1 =
DummyLdbcSnbInteractiveOperationResultInstances.short1Result();
ValidationParam validationParamShortRead1 = ValidationParam.createTyped( shortRead1, shortReadResult1 );
LdbcShortQuery2PersonPosts shortRead2 = DummyLdbcSnbInteractiveOperationInstances.short2();
List<LdbcShortQuery2PersonPostsResult> shortReadResult2 = Lists.newArrayList(
DummyLdbcSnbInteractiveOperationResultInstances.short2Result(),
DummyLdbcSnbInteractiveOperationResultInstances.short2Result()
);
ValidationParam validationParamShortRead2 = ValidationParam.createTyped( shortRead2, shortReadResult2 );
LdbcShortQuery3PersonFriends shortRead3 = DummyLdbcSnbInteractiveOperationInstances.short3();
List<LdbcShortQuery3PersonFriendsResult> shortReadResult3 = Lists.newArrayList(
DummyLdbcSnbInteractiveOperationResultInstances.short3Result()
);
ValidationParam validationParamShortRead3 = ValidationParam.createTyped( shortRead3, shortReadResult3 );
LdbcShortQuery4MessageContent shortRead4 = DummyLdbcSnbInteractiveOperationInstances.short4();
LdbcShortQuery4MessageContentResult shortReadResult4 =
DummyLdbcSnbInteractiveOperationResultInstances.short4Result();
ValidationParam validationParamShortRead4 = ValidationParam.createTyped( shortRead4, shortReadResult4 );
LdbcShortQuery5MessageCreator shortRead5 = DummyLdbcSnbInteractiveOperationInstances.short5();
LdbcShortQuery5MessageCreatorResult shortReadResult5 =
DummyLdbcSnbInteractiveOperationResultInstances.short5Result();
ValidationParam validationParamShortRead5 = ValidationParam.createTyped( shortRead5, shortReadResult5 );
LdbcShortQuery6MessageForum shortRead6 = DummyLdbcSnbInteractiveOperationInstances.short6();
LdbcShortQuery6MessageForumResult shortReadResult6 =
DummyLdbcSnbInteractiveOperationResultInstances.short6Result();
ValidationParam validationParamShortRead6 = ValidationParam.createTyped( shortRead6, shortReadResult6 );
LdbcShortQuery7MessageReplies shortRead7 = DummyLdbcSnbInteractiveOperationInstances.short7();
List<LdbcShortQuery7MessageRepliesResult> shortReadResult7 = Lists.newArrayList(
DummyLdbcSnbInteractiveOperationResultInstances.short7Result(),
DummyLdbcSnbInteractiveOperationResultInstances.short7Result(),
DummyLdbcSnbInteractiveOperationResultInstances.short7Result()
);
ValidationParam validationParamShortRead7 = ValidationParam.createTyped( shortRead7, shortReadResult7 );
LdbcUpdate1AddPerson write1 = DummyLdbcSnbInteractiveOperationInstances.write1();
ValidationParam validationParamWrite1 = ValidationParam.createTyped( write1, LdbcNoResult.INSTANCE );
LdbcUpdate2AddPostLike write2 = DummyLdbcSnbInteractiveOperationInstances.write2();
ValidationParam validationParamWrite2 = ValidationParam.createTyped( write2, LdbcNoResult.INSTANCE );
LdbcUpdate3AddCommentLike write3 = DummyLdbcSnbInteractiveOperationInstances.write3();
ValidationParam validationParamWrite3 = ValidationParam.createTyped( write3, LdbcNoResult.INSTANCE );
LdbcUpdate4AddForum write4 = DummyLdbcSnbInteractiveOperationInstances.write4();
ValidationParam validationParamWrite4 = ValidationParam.createTyped( write4, LdbcNoResult.INSTANCE );
LdbcUpdate5AddForumMembership write5 = DummyLdbcSnbInteractiveOperationInstances.write5();
ValidationParam validationParamWrite5 = ValidationParam.createTyped( write5, LdbcNoResult.INSTANCE );
LdbcUpdate6AddPost write6 = DummyLdbcSnbInteractiveOperationInstances.write6();
ValidationParam validationParamWrite6 = ValidationParam.createTyped( write6, LdbcNoResult.INSTANCE );
LdbcUpdate7AddComment write7 = DummyLdbcSnbInteractiveOperationInstances.write7();
ValidationParam validationParamWrite7 = ValidationParam.createTyped( write7, LdbcNoResult.INSTANCE );
LdbcUpdate8AddFriendship write8 = DummyLdbcSnbInteractiveOperationInstances.write8();
ValidationParam validationParamWrite8 = ValidationParam.createTyped( write8, LdbcNoResult.INSTANCE );
return Lists.newArrayList(
// Long Reads
validationParamRead1,
validationParamRead2,
validationParamRead3,
validationParamRead4,
validationParamRead5,
validationParamRead6,
validationParamRead7,
validationParamRead8,
validationParamRead9,
validationParamRead10,
validationParamRead11,
validationParamRead12,
validationParamRead13,
validationParamRead14,
// Short Reads
validationParamShortRead1,
validationParamShortRead2,
validationParamShortRead3,
validationParamShortRead4,
validationParamShortRead5,
validationParamShortRead6,
validationParamShortRead7,
// Writes
validationParamWrite1,
validationParamWrite2,
validationParamWrite3,
validationParamWrite4,
validationParamWrite5,
validationParamWrite6,
validationParamWrite7,
validationParamWrite8
);
}
}