package com.ldbc.driver.control; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.ldbc.driver.util.MapUtils; import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcSnbInteractiveWorkload; import com.ldbc.driver.workloads.ldbc.snb.interactive.db.DummyLdbcSnbInteractiveDb; import org.junit.Test; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; import java.util.concurrent.TimeUnit; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; import static org.junit.Assert.assertThat; public class ConsoleAndFileDriverConfigurationTest { @Test public void applyShouldWork() throws DriverConfigurationException { ConsoleAndFileDriverConfiguration configuration = ConsoleAndFileDriverConfiguration.fromDefaults( "db1", "workload1", 1 ); assertThat( configuration.dbClassName(), equalTo( "db1" ) ); assertThat( configuration.workloadClassName(), equalTo( "workload1" ) ); assertThat( configuration.operationCount(), equalTo( 1l ) ); configuration = (ConsoleAndFileDriverConfiguration) configuration .applyArg( ConsoleAndFileDriverConfiguration.DB_ARG, "db2" ); assertThat( configuration.dbClassName(), equalTo( "db2" ) ); configuration = (ConsoleAndFileDriverConfiguration) configuration .applyArg( ConsoleAndFileDriverConfiguration.WORKLOAD_ARG, "workload2" ); assertThat( configuration.workloadClassName(), equalTo( "workload2" ) ); configuration = (ConsoleAndFileDriverConfiguration) configuration .applyArg( ConsoleAndFileDriverConfiguration.OPERATION_COUNT_ARG, "2" ); assertThat( configuration.operationCount(), equalTo( 2l ) ); } @Test public void applyMapShouldWork() throws DriverConfigurationException { ConsoleAndFileDriverConfiguration configuration1 = ConsoleAndFileDriverConfiguration.fromDefaults( "db1", "workload1", 1 ); assertThat( configuration1.dbClassName(), equalTo( "db1" ) ); assertThat( configuration1.workloadClassName(), equalTo( "workload1" ) ); assertThat( configuration1.operationCount(), equalTo( 1l ) ); Map<String,String> configurationUpdate2 = new HashMap<>(); configurationUpdate2.put( ConsoleAndFileDriverConfiguration.DB_ARG, "db2" ); configurationUpdate2.put( ConsoleAndFileDriverConfiguration.WORKLOAD_ARG, "workload2" ); configurationUpdate2.put( ConsoleAndFileDriverConfiguration.OPERATION_COUNT_ARG, "2" ); ConsoleAndFileDriverConfiguration configuration2 = (ConsoleAndFileDriverConfiguration) configuration1.applyArgs( configurationUpdate2 ); assertThat( configuration2.dbClassName(), equalTo( "db2" ) ); assertThat( configuration2.workloadClassName(), equalTo( "workload2" ) ); assertThat( configuration2.operationCount(), equalTo( 2l ) ); } @Test public void toMapThenFromMapShouldEqualEvenWhenRequiredParamsAreNotSet() throws DriverConfigurationException { String databaseClassName = null; String workloadClassName = null; long operationCount = 2; ConsoleAndFileDriverConfiguration configurationBefore = ConsoleAndFileDriverConfiguration.fromDefaults( databaseClassName, workloadClassName, operationCount ); DriverConfiguration configurationAfter = ConsoleAndFileDriverConfiguration.fromParamsMap( configurationBefore.asMap() ); assertThat( configurationBefore, equalTo( configurationAfter ) ); } @Test public void toMapThenFromMapShouldReturnSameResultWhenAllParamsAreInitiallySetViaConstructor() throws DriverConfigurationException { long operationCount = 2; int threadCount = 4; int statusDisplayInterval = 1000; TimeUnit timeUnit = TimeUnit.MILLISECONDS; String resultDirPath = "results dir"; Double timeCompressionRatio = 1.0; Set<String> peerIds = new HashSet<>(); ConsoleAndFileDriverConfiguration.ConsoleAndFileValidationParamOptions validationCreationParams = null; String databaseValidationFilePath = null; boolean calculateWorkloadStatistics = false; long spinnerSleepDuration = 0l; boolean printHelp = false; String name = "LDBC-SNB"; boolean ignoreScheduledStartTimes = true; long warmupCount = 5; long skipCount = 6; Map<String,String> paramsMap = new HashMap<>(); ConsoleAndFileDriverConfiguration configurationBefore = new ConsoleAndFileDriverConfiguration( paramsMap, name, DummyLdbcSnbInteractiveDb.class.getName(), LdbcSnbInteractiveWorkload.class.getName(), operationCount, threadCount, statusDisplayInterval, timeUnit, resultDirPath, timeCompressionRatio, peerIds, validationCreationParams, databaseValidationFilePath, calculateWorkloadStatistics, spinnerSleepDuration, printHelp, ignoreScheduledStartTimes, warmupCount, skipCount ); DriverConfiguration configurationAfter = ConsoleAndFileDriverConfiguration.fromParamsMap( configurationBefore.asMap() ); assertThat( configurationBefore, equalTo( configurationAfter ) ); } @Test public void toArgsThenFromArgsShouldEqualEvenWhenRequiredParamsAreNotSet() throws DriverConfigurationException { String databaseClassName = null; String workloadClassName = null; long operationCount = 2; ConsoleAndFileDriverConfiguration configurationBefore = ConsoleAndFileDriverConfiguration.fromDefaults( databaseClassName, workloadClassName, operationCount ); DriverConfiguration configurationAfter = ConsoleAndFileDriverConfiguration.fromArgs( configurationBefore.toArgs() ); assertThat( configurationBefore, equalTo( configurationAfter ) ); } @Test public void toArgsThenFromArgsShouldReturnSameResultWhenAllParamsThatCanBeEmptyAreEmpty() throws DriverConfigurationException { String databaseClassName = "db"; String workloadClassName = "workload"; long operationCount = 2; Map<String,String> paramsFromPublicStaticDefaultValuesAsMap = new HashMap<>(); // required params paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.DB_ARG, databaseClassName ); paramsFromPublicStaticDefaultValuesAsMap .put( ConsoleAndFileDriverConfiguration.WORKLOAD_ARG, workloadClassName ); paramsFromPublicStaticDefaultValuesAsMap .put( ConsoleAndFileDriverConfiguration.OPERATION_COUNT_ARG, Long.toString( operationCount ) ); ConsoleAndFileDriverConfiguration configurationBefore = ConsoleAndFileDriverConfiguration.fromParamsMap( paramsFromPublicStaticDefaultValuesAsMap ); ConsoleAndFileDriverConfiguration configurationAfter = ConsoleAndFileDriverConfiguration.fromArgs( configurationBefore.toArgs() ); assertThat( configurationBefore, equalTo( configurationAfter ) ); } @Test public void toArgsThenFromArgsShouldReturnSameResultWhenAllParamsThatCanBeEmptyAreNotEmpty() throws DriverConfigurationException { String databaseClassName = "db"; String workloadClassName = "workload"; long operationCount = 2; Set<String> peerIds = Sets.newHashSet( "peer1", "peer2" ); ConsoleAndFileDriverConfiguration.ConsoleAndFileValidationParamOptions validationParamOptions = new ConsoleAndFileDriverConfiguration.ConsoleAndFileValidationParamOptions( "file", 2 ); Map<String,String> paramsFromPublicStaticDefaultValuesAsMap = new HashMap<>(); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.THREADS_ARG, ConsoleAndFileDriverConfiguration.THREADS_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.SHOW_STATUS_ARG, ConsoleAndFileDriverConfiguration.SHOW_STATUS_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.TIME_UNIT_ARG, ConsoleAndFileDriverConfiguration.TIME_UNIT_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.NAME_ARG, ConsoleAndFileDriverConfiguration.NAME_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.RESULT_DIR_PATH_ARG, ConsoleAndFileDriverConfiguration.RESULT_DIR_PATH_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.TIME_COMPRESSION_RATIO_ARG, ConsoleAndFileDriverConfiguration.TIME_COMPRESSION_RATIO_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.PEER_IDS_ARG, ConsoleAndFileDriverConfiguration.serializePeerIdsToCommandline( peerIds ) ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.CREATE_VALIDATION_PARAMS_ARG, validationParamOptions.toCommandlineString() ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.DB_VALIDATION_FILE_PATH_ARG, ConsoleAndFileDriverConfiguration.DB_VALIDATION_FILE_PATH_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.CALCULATE_WORKLOAD_STATISTICS_ARG, ConsoleAndFileDriverConfiguration.CALCULATE_WORKLOAD_STATISTICS_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.HELP_ARG, ConsoleAndFileDriverConfiguration.HELP_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.IGNORE_SCHEDULED_START_TIMES_ARG, ConsoleAndFileDriverConfiguration.IGNORE_SCHEDULED_START_TIMES_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.SPINNER_SLEEP_DURATION_ARG, ConsoleAndFileDriverConfiguration.SPINNER_SLEEP_DURATION_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.WARMUP_COUNT_ARG, ConsoleAndFileDriverConfiguration.WARMUP_COUNT_DEFAULT_STRING ); // required params paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.DB_ARG, databaseClassName ); paramsFromPublicStaticDefaultValuesAsMap .put( ConsoleAndFileDriverConfiguration.WORKLOAD_ARG, workloadClassName ); paramsFromPublicStaticDefaultValuesAsMap .put( ConsoleAndFileDriverConfiguration.OPERATION_COUNT_ARG, Long.toString( operationCount ) ); ConsoleAndFileDriverConfiguration configurationBefore = ConsoleAndFileDriverConfiguration.fromParamsMap( paramsFromPublicStaticDefaultValuesAsMap ); ConsoleAndFileDriverConfiguration configurationAfter = ConsoleAndFileDriverConfiguration.fromArgs( configurationBefore.toArgs() ); assertThat( configurationBefore, equalTo( configurationAfter ) ); } @Test public void toConfigurationPropertiesStringMethodShouldOutputValidConfigurationFile() throws DriverConfigurationException, IOException { String databaseClassName = "db"; String workloadClassName = "workload"; long operationCount = 100; ConsoleAndFileDriverConfiguration configurationBefore = ConsoleAndFileDriverConfiguration.fromDefaults( databaseClassName, workloadClassName, operationCount ); Properties configurationProperties = new Properties(); configurationProperties.load( new ByteArrayInputStream( configurationBefore.toPropertiesString().getBytes() ) ); DriverConfiguration configurationAfter = ConsoleAndFileDriverConfiguration .fromParamsMap( MapUtils.<String,String>propertiesToMap( configurationProperties ) ); assertThat( configurationBefore, equalTo( configurationAfter ) ); } @Test public void fromDefaultsWithoutChecksShouldNotFailIfRequiredAreNotProvided() throws DriverConfigurationException { String databaseClassName = null; String workloadClassName = null; long operationCount = 0; DriverConfiguration configuration = ConsoleAndFileDriverConfiguration.fromDefaults( databaseClassName, workloadClassName, operationCount ); assertThat( configuration.dbClassName(), is( nullValue() ) ); assertThat( configuration.workloadClassName(), is( nullValue() ) ); assertThat( configuration.operationCount(), is( 0l ) ); } @Test public void fromDefaultsShouldNotFailWhenRequiredAreNotProvided() { DriverConfiguration configuration = null; boolean exceptionThrown = false; try { String databaseClassName = null; String workloadClassName = null; long operationCount = 0; configuration = ConsoleAndFileDriverConfiguration .fromDefaults( databaseClassName, workloadClassName, operationCount ); } catch ( DriverConfigurationException e ) { exceptionThrown = true; } assertThat( exceptionThrown, is( false ) ); assertThat( configuration, is( notNullValue() ) ); assertThat( configuration.dbClassName(), is( nullValue() ) ); assertThat( configuration.workloadClassName(), is( nullValue() ) ); assertThat( configuration.operationCount(), is( 0l ) ); } @Test public void fromDefaultsAndFromPublicStaticDefaultValuesAndFromDefaultParamsMapShouldAllBeEqual() throws DriverConfigurationException { String databaseClassName = "db"; String workloadClassName = "workload"; long operationCount = 2; Map<String,String> paramsFromPublicStaticDefaultValuesAsMap = new HashMap<>(); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.THREADS_ARG, ConsoleAndFileDriverConfiguration.THREADS_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.SHOW_STATUS_ARG, ConsoleAndFileDriverConfiguration.SHOW_STATUS_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.TIME_UNIT_ARG, ConsoleAndFileDriverConfiguration.TIME_UNIT_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.NAME_ARG, ConsoleAndFileDriverConfiguration.NAME_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.RESULT_DIR_PATH_ARG, ConsoleAndFileDriverConfiguration.RESULT_DIR_PATH_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.TIME_COMPRESSION_RATIO_ARG, ConsoleAndFileDriverConfiguration.TIME_COMPRESSION_RATIO_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.PEER_IDS_ARG, ConsoleAndFileDriverConfiguration.PEER_IDS_DEFAULT_STRING ); if ( null != ConsoleAndFileDriverConfiguration.CREATE_VALIDATION_PARAMS_DEFAULT ) { paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.CREATE_VALIDATION_PARAMS_ARG, ConsoleAndFileDriverConfiguration.CREATE_VALIDATION_PARAMS_DEFAULT.toCommandlineString() ); } paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.DB_VALIDATION_FILE_PATH_ARG, ConsoleAndFileDriverConfiguration.DB_VALIDATION_FILE_PATH_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.CALCULATE_WORKLOAD_STATISTICS_ARG, ConsoleAndFileDriverConfiguration.CALCULATE_WORKLOAD_STATISTICS_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.HELP_ARG, ConsoleAndFileDriverConfiguration.HELP_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.IGNORE_SCHEDULED_START_TIMES_ARG, ConsoleAndFileDriverConfiguration.IGNORE_SCHEDULED_START_TIMES_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.SPINNER_SLEEP_DURATION_ARG, ConsoleAndFileDriverConfiguration.SPINNER_SLEEP_DURATION_DEFAULT_STRING ); paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.WARMUP_COUNT_ARG, ConsoleAndFileDriverConfiguration.WARMUP_COUNT_DEFAULT_STRING ); // add required params paramsFromPublicStaticDefaultValuesAsMap.put( ConsoleAndFileDriverConfiguration.DB_ARG, databaseClassName ); paramsFromPublicStaticDefaultValuesAsMap .put( ConsoleAndFileDriverConfiguration.WORKLOAD_ARG, workloadClassName ); paramsFromPublicStaticDefaultValuesAsMap .put( ConsoleAndFileDriverConfiguration.OPERATION_COUNT_ARG, Long.toString( operationCount ) ); DriverConfiguration configurationFromPublicStaticDefaultValuesAsMap = ConsoleAndFileDriverConfiguration.fromParamsMap( paramsFromPublicStaticDefaultValuesAsMap ); DriverConfiguration configurationFromDefault = ConsoleAndFileDriverConfiguration.fromDefaults( databaseClassName, workloadClassName, operationCount ); Map<String,String> defaultOptionalParamsMap = ConsoleAndFileDriverConfiguration.defaultsAsMap(); defaultOptionalParamsMap.put( ConsoleAndFileDriverConfiguration.DB_ARG, databaseClassName ); defaultOptionalParamsMap.put( ConsoleAndFileDriverConfiguration.WORKLOAD_ARG, workloadClassName ); defaultOptionalParamsMap .put( ConsoleAndFileDriverConfiguration.OPERATION_COUNT_ARG, Long.toString( operationCount ) ); DriverConfiguration configurationFromDefaultOptionalParamsMap = ConsoleAndFileDriverConfiguration.fromParamsMap( defaultOptionalParamsMap ); assertThat( configurationFromPublicStaticDefaultValuesAsMap, equalTo( configurationFromDefault ) ); assertThat( configurationFromPublicStaticDefaultValuesAsMap, equalTo( configurationFromDefaultOptionalParamsMap ) ); assertThat( configurationFromDefault, equalTo( configurationFromDefaultOptionalParamsMap ) ); } @Test public void shouldReturnSameConfigurationUsingFromArgsAsUsingFromParamsMap() throws DriverConfigurationException { Set<String> peerIds = Sets.newHashSet( "peerId1", "peerId2" ); // Required Map<String,String> requiredParamsMap = new HashMap<>(); requiredParamsMap.put( ConsoleAndFileDriverConfiguration.OPERATION_COUNT_ARG, "1" ); requiredParamsMap.put( ConsoleAndFileDriverConfiguration.WORKLOAD_ARG, "workload class name" ); requiredParamsMap.put( ConsoleAndFileDriverConfiguration.DB_ARG, "db class name" ); // Optional Map<String,String> optionalParamsMap = new HashMap<>(); optionalParamsMap.put( ConsoleAndFileDriverConfiguration.THREADS_ARG, ConsoleAndFileDriverConfiguration.THREADS_DEFAULT_STRING ); optionalParamsMap.put( ConsoleAndFileDriverConfiguration.SHOW_STATUS_ARG, ConsoleAndFileDriverConfiguration.SHOW_STATUS_DEFAULT_STRING ); optionalParamsMap.put( ConsoleAndFileDriverConfiguration.TIME_UNIT_ARG, ConsoleAndFileDriverConfiguration.TIME_UNIT_DEFAULT_STRING ); optionalParamsMap.put( ConsoleAndFileDriverConfiguration.NAME_ARG, ConsoleAndFileDriverConfiguration.NAME_DEFAULT_STRING ); optionalParamsMap.put( ConsoleAndFileDriverConfiguration.RESULT_DIR_PATH_ARG, ConsoleAndFileDriverConfiguration.RESULT_DIR_PATH_DEFAULT_STRING ); optionalParamsMap.put( ConsoleAndFileDriverConfiguration.TIME_COMPRESSION_RATIO_ARG, ConsoleAndFileDriverConfiguration.TIME_COMPRESSION_RATIO_DEFAULT_STRING ); optionalParamsMap.put( ConsoleAndFileDriverConfiguration.PEER_IDS_ARG, ConsoleAndFileDriverConfiguration.serializePeerIdsToCommandline( peerIds ) ); if ( null != ConsoleAndFileDriverConfiguration.CREATE_VALIDATION_PARAMS_DEFAULT ) { optionalParamsMap.put( ConsoleAndFileDriverConfiguration.CREATE_VALIDATION_PARAMS_ARG, ConsoleAndFileDriverConfiguration.CREATE_VALIDATION_PARAMS_DEFAULT.toCommandlineString() ); } if ( null != ConsoleAndFileDriverConfiguration.DB_VALIDATION_FILE_PATH_DEFAULT_STRING ) { optionalParamsMap.put( ConsoleAndFileDriverConfiguration.DB_VALIDATION_FILE_PATH_ARG, ConsoleAndFileDriverConfiguration.DB_VALIDATION_FILE_PATH_DEFAULT_STRING ); } optionalParamsMap.put( ConsoleAndFileDriverConfiguration.CALCULATE_WORKLOAD_STATISTICS_ARG, ConsoleAndFileDriverConfiguration.CALCULATE_WORKLOAD_STATISTICS_DEFAULT_STRING ); optionalParamsMap.put( ConsoleAndFileDriverConfiguration.HELP_ARG, ConsoleAndFileDriverConfiguration.HELP_DEFAULT_STRING ); optionalParamsMap.put( ConsoleAndFileDriverConfiguration.IGNORE_SCHEDULED_START_TIMES_ARG, ConsoleAndFileDriverConfiguration.IGNORE_SCHEDULED_START_TIMES_DEFAULT_STRING ); optionalParamsMap.put( ConsoleAndFileDriverConfiguration.SPINNER_SLEEP_DURATION_ARG, ConsoleAndFileDriverConfiguration.SPINNER_SLEEP_DURATION_DEFAULT_STRING ); optionalParamsMap.put( ConsoleAndFileDriverConfiguration.WARMUP_COUNT_ARG, ConsoleAndFileDriverConfiguration.WARMUP_COUNT_DEFAULT_STRING ); // Extra optionalParamsMap.put( "extra_key", "extra_value" ); // Required List<String> requiredParamsArgsList = new ArrayList<>(); requiredParamsArgsList .addAll( Lists.newArrayList( "-" + ConsoleAndFileDriverConfiguration.OPERATION_COUNT_ARG, "1" ) ); requiredParamsArgsList.addAll( Lists.newArrayList( "-" + ConsoleAndFileDriverConfiguration.WORKLOAD_ARG, "workload class name" ) ); requiredParamsArgsList .addAll( Lists.newArrayList( "-" + ConsoleAndFileDriverConfiguration.DB_ARG, "db class name" ) ); // Optional List<String> optionalParamsArgsList = new ArrayList<>(); optionalParamsArgsList.addAll( Lists.newArrayList( "-" + ConsoleAndFileDriverConfiguration.THREADS_ARG, ConsoleAndFileDriverConfiguration.THREADS_DEFAULT_STRING ) ); optionalParamsArgsList.addAll( Lists.newArrayList( "-" + ConsoleAndFileDriverConfiguration.SHOW_STATUS_ARG, ConsoleAndFileDriverConfiguration.SHOW_STATUS_DEFAULT_STRING ) ); optionalParamsArgsList.addAll( Lists.newArrayList( "-" + ConsoleAndFileDriverConfiguration.TIME_UNIT_ARG, ConsoleAndFileDriverConfiguration.TIME_UNIT_DEFAULT_STRING ) ); if ( null != ConsoleAndFileDriverConfiguration.NAME_ARG ) { optionalParamsArgsList.addAll( Lists.newArrayList( "-" + ConsoleAndFileDriverConfiguration.NAME_ARG, ConsoleAndFileDriverConfiguration.NAME_DEFAULT_STRING ) ); } if ( null != ConsoleAndFileDriverConfiguration.RESULT_DIR_PATH_DEFAULT ) { optionalParamsArgsList.addAll( Lists.newArrayList( "-" + ConsoleAndFileDriverConfiguration.RESULT_DIR_PATH_ARG, ConsoleAndFileDriverConfiguration.RESULT_DIR_PATH_DEFAULT_STRING ) ); } optionalParamsArgsList.addAll( Lists.newArrayList( "-" + ConsoleAndFileDriverConfiguration.TIME_COMPRESSION_RATIO_ARG, ConsoleAndFileDriverConfiguration.TIME_COMPRESSION_RATIO_DEFAULT_STRING ) ); optionalParamsArgsList.addAll( Lists.newArrayList( "-" + ConsoleAndFileDriverConfiguration.PEER_IDS_ARG, ConsoleAndFileDriverConfiguration.serializePeerIdsToCommandline( peerIds ) ) ); if ( null != ConsoleAndFileDriverConfiguration.CREATE_VALIDATION_PARAMS_DEFAULT ) { optionalParamsArgsList.addAll( Lists.newArrayList( "-" + ConsoleAndFileDriverConfiguration.CREATE_VALIDATION_PARAMS_ARG, ConsoleAndFileDriverConfiguration.CREATE_VALIDATION_PARAMS_DEFAULT .toCommandlineString() ) ); } if ( null != ConsoleAndFileDriverConfiguration.DB_VALIDATION_FILE_PATH_DEFAULT_STRING ) { optionalParamsArgsList.addAll( Lists.newArrayList( "-" + ConsoleAndFileDriverConfiguration.DB_VALIDATION_FILE_PATH_ARG, ConsoleAndFileDriverConfiguration.DB_VALIDATION_FILE_PATH_DEFAULT_STRING ) ); } if ( ConsoleAndFileDriverConfiguration.CALCULATE_WORKLOAD_STATISTICS_DEFAULT ) { optionalParamsArgsList.addAll( Lists.newArrayList( "-" + ConsoleAndFileDriverConfiguration.CALCULATE_WORKLOAD_STATISTICS_ARG ) ); } if ( ConsoleAndFileDriverConfiguration.HELP_DEFAULT ) { optionalParamsArgsList.addAll( Lists.newArrayList( "-" + ConsoleAndFileDriverConfiguration.HELP_ARG ) ); } if ( ConsoleAndFileDriverConfiguration.IGNORE_SCHEDULED_START_TIMES_DEFAULT ) { optionalParamsArgsList.addAll( Lists.newArrayList( "-" + ConsoleAndFileDriverConfiguration.IGNORE_SCHEDULED_START_TIMES_ARG ) ); } optionalParamsArgsList.addAll( Lists.newArrayList( "-" + ConsoleAndFileDriverConfiguration.SPINNER_SLEEP_DURATION_ARG, ConsoleAndFileDriverConfiguration.SPINNER_SLEEP_DURATION_DEFAULT_STRING ) ); optionalParamsArgsList.addAll( Lists.newArrayList( "-" + ConsoleAndFileDriverConfiguration.WARMUP_COUNT_ARG, ConsoleAndFileDriverConfiguration.WARMUP_COUNT_DEFAULT_STRING ) ); // Extra optionalParamsArgsList.addAll( Lists.newArrayList( "-p", "extra_key", "extra_value" ) ); // When Map<String,String> paramsMap = MapUtils.mergeMaps( requiredParamsMap, optionalParamsMap, false ); DriverConfiguration configurationFromParamsMap = ConsoleAndFileDriverConfiguration.fromParamsMap( paramsMap ); String[] requiredParamsArgs = requiredParamsArgsList.toArray( new String[requiredParamsArgsList.size()] ); String[] optionalParamsArgs = optionalParamsArgsList.toArray( new String[optionalParamsArgsList.size()] ); System.arraycopy( requiredParamsArgs, 0, optionalParamsArgs, 0, requiredParamsArgs.length ); DriverConfiguration configurationFromParamsArgs = ConsoleAndFileDriverConfiguration.fromArgs( optionalParamsArgs ); // Then assertThat( configurationFromParamsMap, equalTo( configurationFromParamsArgs ) ); assertThat( configurationFromParamsMap.asMap(), equalTo( configurationFromParamsArgs.asMap() ) ); } @Test public void shouldWorkWhenOnlyRequiredParametersAreGivenAndAssignCorrectDefaultsForOptionalParametersThatAreNotProvided() throws DriverConfigurationException { // Given Map<String,String> requiredParams = new HashMap<>(); requiredParams.put( ConsoleAndFileDriverConfiguration.OPERATION_COUNT_ARG, "1" ); requiredParams.put( ConsoleAndFileDriverConfiguration.WORKLOAD_ARG, "workload class name" ); requiredParams.put( ConsoleAndFileDriverConfiguration.DB_ARG, "db class name" ); // When ConsoleAndFileDriverConfiguration configurationFromParams = ConsoleAndFileDriverConfiguration.fromParamsMap( requiredParams ); // Then assertThat( configurationFromParams.name(), equalTo( ConsoleAndFileDriverConfiguration.NAME_DEFAULT ) ); assertThat( configurationFromParams.dbClassName(), equalTo( "db class name" ) ); assertThat( configurationFromParams.workloadClassName(), equalTo( "workload class name" ) ); assertThat( configurationFromParams.operationCount(), is( 1l ) ); assertThat( configurationFromParams.threadCount(), is( ConsoleAndFileDriverConfiguration.THREADS_DEFAULT ) ); assertThat( configurationFromParams.statusDisplayIntervalAsSeconds(), is( ConsoleAndFileDriverConfiguration.SHOW_STATUS_DEFAULT ) ); assertThat( configurationFromParams.timeUnit(), is( ConsoleAndFileDriverConfiguration.TIME_UNIT_DEFAULT ) ); assertThat( new File( configurationFromParams.resultDirPath() ).getName(), is( ConsoleAndFileDriverConfiguration.RESULT_DIR_PATH_DEFAULT ) ); assertThat( configurationFromParams.timeCompressionRatio(), is( ConsoleAndFileDriverConfiguration.TIME_COMPRESSION_RATIO_DEFAULT ) ); assertThat( configurationFromParams.peerIds(), is( ConsoleAndFileDriverConfiguration.PEER_IDS_DEFAULT ) ); assertThat( configurationFromParams.validationParamsCreationOptions(), is( (DriverConfiguration.ValidationParamOptions) ConsoleAndFileDriverConfiguration .CREATE_VALIDATION_PARAMS_DEFAULT ) ); assertThat( configurationFromParams.databaseValidationFilePath(), is( ConsoleAndFileDriverConfiguration.DB_VALIDATION_FILE_PATH_DEFAULT ) ); assertThat( configurationFromParams.calculateWorkloadStatistics(), is( ConsoleAndFileDriverConfiguration.CALCULATE_WORKLOAD_STATISTICS_DEFAULT ) ); assertThat( configurationFromParams.shouldPrintHelpString(), is( ConsoleAndFileDriverConfiguration.HELP_DEFAULT ) ); assertThat( configurationFromParams.ignoreScheduledStartTimes(), is( ConsoleAndFileDriverConfiguration.IGNORE_SCHEDULED_START_TIMES_DEFAULT ) ); assertThat( configurationFromParams.spinnerSleepDurationAsMilli(), is( ConsoleAndFileDriverConfiguration.SPINNER_SLEEP_DURATION_DEFAULT ) ); assertThat( configurationFromParams.warmupCount(), is( ConsoleAndFileDriverConfiguration.WARMUP_COUNT_DEFAULT ) ); } @Test public void shouldReturnSameAsConstructedWith() { Map<String,String> paramsMap = new HashMap<>(); String name = "name"; String dbClassName = "dbClassName"; String workloadClassName = "workloadClassName"; long operationCount = 1; int threadCount = 3; int statusDisplayInterval = 1000; TimeUnit timeUnit = TimeUnit.SECONDS; String resultDirPath = null; Double timeCompressionRatio = 1.0; Set<String> peerIds = Sets.newHashSet( "1" ); ConsoleAndFileDriverConfiguration.ConsoleAndFileValidationParamOptions validationParams = new ConsoleAndFileDriverConfiguration.ConsoleAndFileValidationParamOptions( "file", 1 ); String dbValidationFilePath = null; boolean calculateWorkloadStatistics = false; long spinnerSleepDuration = 0l; boolean printHelp = false; boolean ignoreScheduledStartTimes = false; long warmupCount = 10; long skipCount = 100; ConsoleAndFileDriverConfiguration params = new ConsoleAndFileDriverConfiguration( paramsMap, name, dbClassName, workloadClassName, operationCount, threadCount, statusDisplayInterval, timeUnit, resultDirPath, timeCompressionRatio, peerIds, validationParams, dbValidationFilePath, calculateWorkloadStatistics, spinnerSleepDuration, printHelp, ignoreScheduledStartTimes, warmupCount, skipCount ); assertThat( params.asMap(), equalTo( paramsMap ) ); assertThat( params.name(), equalTo( name ) ); assertThat( params.dbClassName(), equalTo( dbClassName ) ); assertThat( params.workloadClassName(), equalTo( workloadClassName ) ); assertThat( params.operationCount(), equalTo( operationCount ) ); assertThat( params.threadCount(), equalTo( threadCount ) ); assertThat( params.statusDisplayIntervalAsSeconds(), equalTo( statusDisplayInterval ) ); assertThat( params.timeUnit(), equalTo( timeUnit ) ); assertThat( params.resultDirPath(), equalTo( resultDirPath ) ); assertThat( params.timeCompressionRatio(), equalTo( timeCompressionRatio ) ); assertThat( params.peerIds(), equalTo( peerIds ) ); assertThat( params.validationParamsCreationOptions(), equalTo( (DriverConfiguration.ValidationParamOptions) validationParams ) ); assertThat( params.databaseValidationFilePath(), equalTo( dbValidationFilePath ) ); assertThat( params.calculateWorkloadStatistics(), equalTo( calculateWorkloadStatistics ) ); assertThat( params.shouldPrintHelpString(), equalTo( printHelp ) ); assertThat( params.ignoreScheduledStartTimes(), equalTo( ignoreScheduledStartTimes ) ); assertThat( params.spinnerSleepDurationAsMilli(), equalTo( spinnerSleepDuration ) ); } @Test // Make sure that all tests that use test resources configuration file are using the same file as in the public // directory public void testResourcesBaseConfigurationFileAndPublicBaseConfigurationFilesShouldBeEqual() throws DriverConfigurationException, IOException { File ldbcDriverConfigurationInTestResourcesFile = DriverConfigurationFileHelper.getBaseConfigurationFilePublicLocation(); Properties ldbcDriverConfigurationInTestResourcesProperties = new Properties(); ldbcDriverConfigurationInTestResourcesProperties .load( new FileInputStream( ldbcDriverConfigurationInTestResourcesFile ) ); Map<String,String> configurationInTestResourcesAsMap = MapUtils.propertiesToMap( ldbcDriverConfigurationInTestResourcesProperties ); File ldbcDriverConfigurationInWorkloadsDirectoryFile = DriverConfigurationFileHelper.getBaseConfigurationFilePublicLocation(); Properties ldbcDriverConfigurationInWorkloadsDirectoryProperties = new Properties(); ldbcDriverConfigurationInWorkloadsDirectoryProperties .load( new FileInputStream( ldbcDriverConfigurationInWorkloadsDirectoryFile ) ); Map<String,String> configurationInWorkloadsDirectoryAsMap = MapUtils.propertiesToMap( ldbcDriverConfigurationInWorkloadsDirectoryProperties ); assertThat( configurationInTestResourcesAsMap, equalTo( configurationInWorkloadsDirectoryAsMap ) ); Map<String,String> requiredParamsAsMap = new HashMap<>(); requiredParamsAsMap.put( ConsoleAndFileDriverConfiguration.DB_ARG, DummyLdbcSnbInteractiveDb.class.getName() ); requiredParamsAsMap .put( ConsoleAndFileDriverConfiguration.WORKLOAD_ARG, LdbcSnbInteractiveWorkload.class.getName() ); requiredParamsAsMap.put( ConsoleAndFileDriverConfiguration.OPERATION_COUNT_ARG, Long.toString( 1000 ) ); DriverConfiguration configurationFromTestResources = ConsoleAndFileDriverConfiguration.fromParamsMap( MapUtils.mergeMaps( configurationInTestResourcesAsMap, requiredParamsAsMap, true ) ); DriverConfiguration configurationFromWorkloadsDirectory = ConsoleAndFileDriverConfiguration.fromParamsMap( MapUtils.mergeMaps( configurationInWorkloadsDirectoryAsMap, requiredParamsAsMap, true ) ); assertThat( configurationFromTestResources, equalTo( configurationFromWorkloadsDirectory ) ); } @Test public void shouldSerializeAndParsePeerIds() { // Given Set<String> peerIds0 = Sets.newHashSet(); Set<String> peerIds1 = Sets.newHashSet( "1", "2" ); Set<String> peerIds2 = Sets.newHashSet( "1", "2", "3" ); // When String peerIdsString0 = ConsoleAndFileDriverConfiguration.serializePeerIdsToCommandline( peerIds0 ); String peerIdsString1 = ConsoleAndFileDriverConfiguration.serializePeerIdsToCommandline( peerIds1 ); String peerIdsString2 = ConsoleAndFileDriverConfiguration.serializePeerIdsToCommandline( peerIds2 ); // Then assertThat( ConsoleAndFileDriverConfiguration.parsePeerIdsFromCommandline( peerIdsString0 ), equalTo( peerIds0 ) ); assertThat( ConsoleAndFileDriverConfiguration.parsePeerIdsFromCommandline( peerIdsString1 ), equalTo( peerIds1 ) ); assertThat( ConsoleAndFileDriverConfiguration.parsePeerIdsFromCommandline( peerIdsString2 ), equalTo( peerIds2 ) ); } @Test public void shouldParsePeerIds() { // Given String peerIds1String = ""; String peerIds2String = "|"; String peerIds3String = "|1"; String peerIds4String = "|1"; String peerIds5String = "|1|"; String peerIds6String = "|1|2"; String peerIds7String = "1|2|"; String peerIds8String = "1"; String peerIds9String = "1|2"; String peerIds10String = "1|2|3"; Set<String> peerIds1Expected = Sets.newHashSet(); Set<String> peerIds2Expected = Sets.newHashSet(); Set<String> peerIds3Expected = Sets.newHashSet( "1" ); Set<String> peerIds4Expected = Sets.newHashSet( "1" ); Set<String> peerIds5Expected = Sets.newHashSet( "1" ); Set<String> peerIds6Expected = Sets.newHashSet( "1", "2" ); Set<String> peerIds7Expected = Sets.newHashSet( "1", "2" ); Set<String> peerIds8Expected = Sets.newHashSet( "1" ); Set<String> peerIds9Expected = Sets.newHashSet( "1", "2" ); Set<String> peerIds10Expected = Sets.newHashSet( "1", "2", "3" ); // When Set<String> peerIds1 = ConsoleAndFileDriverConfiguration.parsePeerIdsFromCommandline( peerIds1String ); Set<String> peerIds2 = ConsoleAndFileDriverConfiguration.parsePeerIdsFromCommandline( peerIds2String ); Set<String> peerIds3 = ConsoleAndFileDriverConfiguration.parsePeerIdsFromCommandline( peerIds3String ); Set<String> peerIds4 = ConsoleAndFileDriverConfiguration.parsePeerIdsFromCommandline( peerIds4String ); Set<String> peerIds5 = ConsoleAndFileDriverConfiguration.parsePeerIdsFromCommandline( peerIds5String ); Set<String> peerIds6 = ConsoleAndFileDriverConfiguration.parsePeerIdsFromCommandline( peerIds6String ); Set<String> peerIds7 = ConsoleAndFileDriverConfiguration.parsePeerIdsFromCommandline( peerIds7String ); Set<String> peerIds8 = ConsoleAndFileDriverConfiguration.parsePeerIdsFromCommandline( peerIds8String ); Set<String> peerIds9 = ConsoleAndFileDriverConfiguration.parsePeerIdsFromCommandline( peerIds9String ); Set<String> peerIds10 = ConsoleAndFileDriverConfiguration.parsePeerIdsFromCommandline( peerIds10String ); // Then assertThat( peerIds1, equalTo( peerIds1Expected ) ); assertThat( peerIds2, equalTo( peerIds2Expected ) ); assertThat( peerIds3, equalTo( peerIds3Expected ) ); assertThat( peerIds4, equalTo( peerIds4Expected ) ); assertThat( peerIds5, equalTo( peerIds5Expected ) ); assertThat( peerIds6, equalTo( peerIds6Expected ) ); assertThat( peerIds7, equalTo( peerIds7Expected ) ); assertThat( peerIds8, equalTo( peerIds8Expected ) ); assertThat( peerIds9, equalTo( peerIds9Expected ) ); assertThat( peerIds10, equalTo( peerIds10Expected ) ); } }