package com.ldbc.driver.generator;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.ldbc.driver.Operation;
import com.ldbc.driver.Workload;
import com.ldbc.driver.WorkloadException;
import com.ldbc.driver.WorkloadStreams;
import com.ldbc.driver.control.ConsoleAndFileDriverConfiguration;
import com.ldbc.driver.control.DriverConfigurationException;
import com.ldbc.driver.temporal.SystemTimeSource;
import com.ldbc.driver.temporal.TimeSource;
import com.ldbc.driver.testutils.TestUtils;
import com.ldbc.driver.util.MapUtils;
import com.ldbc.driver.workloads.dummy.TimedNamedOperation1;
import com.ldbc.driver.workloads.dummy.TimedNamedOperation1Factory;
import com.ldbc.driver.workloads.dummy.TimedNamedOperation2;
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.db.DummyLdbcSnbInteractiveDb;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
public class TimeMappingOperationGeneratorTest
{
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
private TimeSource timeSource = new SystemTimeSource();
private final long RANDOM_SEED = 42;
private GeneratorFactory gf = null;
@Before
public final void initGeneratorFactory()
{
gf = new GeneratorFactory( new RandomDataGeneratorFactory( RANDOM_SEED ) );
}
@Test
public void shouldOffset()
{
// Given
Iterator<Operation> operations = gf.limit(
new TimedNamedOperation1Factory(
// start times
gf.incrementing( 0l, 100l ),
// dependency times
gf.incrementing( 0l, 50l ),
// names
gf.constant( "name1" )
),
11
);
List<Operation> operationsList = ImmutableList.copyOf( operations );
assertThat( operationsList.size(), is( 11 ) );
assertThat( operationsList.get( 0 ).scheduledStartTimeAsMilli(), equalTo( 0l ) );
assertThat( operationsList.get( 0 ).timeStamp(), equalTo( 0l ) );
assertThat( operationsList.get( 0 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( operationsList.get( 1 ).scheduledStartTimeAsMilli(), equalTo( 100l ) );
assertThat( operationsList.get( 1 ).timeStamp(), equalTo( 100l ) );
assertThat( operationsList.get( 1 ).dependencyTimeStamp(), equalTo( 50l ) );
assertThat( operationsList.get( 2 ).scheduledStartTimeAsMilli(), equalTo( 200l ) );
assertThat( operationsList.get( 2 ).timeStamp(), equalTo( 200l ) );
assertThat( operationsList.get( 2 ).dependencyTimeStamp(), equalTo( 100l ) );
assertThat( operationsList.get( 3 ).scheduledStartTimeAsMilli(), equalTo( 300l ) );
assertThat( operationsList.get( 3 ).timeStamp(), equalTo( 300l ) );
assertThat( operationsList.get( 3 ).dependencyTimeStamp(), equalTo( 150l ) );
assertThat( operationsList.get( 4 ).scheduledStartTimeAsMilli(), equalTo( 400l ) );
assertThat( operationsList.get( 4 ).timeStamp(), equalTo( 400l ) );
assertThat( operationsList.get( 4 ).dependencyTimeStamp(), equalTo( 200l ) );
assertThat( operationsList.get( 5 ).scheduledStartTimeAsMilli(), equalTo( 500l ) );
assertThat( operationsList.get( 5 ).timeStamp(), equalTo( 500l ) );
assertThat( operationsList.get( 5 ).dependencyTimeStamp(), equalTo( 250l ) );
assertThat( operationsList.get( 6 ).scheduledStartTimeAsMilli(), equalTo( 600l ) );
assertThat( operationsList.get( 6 ).timeStamp(), equalTo( 600l ) );
assertThat( operationsList.get( 6 ).dependencyTimeStamp(), equalTo( 300l ) );
assertThat( operationsList.get( 7 ).scheduledStartTimeAsMilli(), equalTo( 700l ) );
assertThat( operationsList.get( 7 ).timeStamp(), equalTo( 700l ) );
assertThat( operationsList.get( 7 ).dependencyTimeStamp(), equalTo( 350l ) );
assertThat( operationsList.get( 8 ).scheduledStartTimeAsMilli(), equalTo( 800l ) );
assertThat( operationsList.get( 8 ).timeStamp(), equalTo( 800l ) );
assertThat( operationsList.get( 8 ).dependencyTimeStamp(), equalTo( 400l ) );
assertThat( operationsList.get( 9 ).scheduledStartTimeAsMilli(), equalTo( 900l ) );
assertThat( operationsList.get( 9 ).timeStamp(), equalTo( 900l ) );
assertThat( operationsList.get( 9 ).dependencyTimeStamp(), equalTo( 450l ) );
assertThat( operationsList.get( 10 ).scheduledStartTimeAsMilli(), equalTo( 1000l ) );
assertThat( operationsList.get( 10 ).timeStamp(), equalTo( 1000l ) );
assertThat( operationsList.get( 10 ).dependencyTimeStamp(), equalTo( 500l ) );
// When
long newStartTime = 500l;
List<Operation> offsetOperationsList =
ImmutableList.copyOf( gf.timeOffset( operationsList.iterator(), newStartTime ) );
// Then
assertThat( offsetOperationsList.size(), is( 11 ) );
assertThat( offsetOperationsList.get( 0 ).scheduledStartTimeAsMilli(), equalTo( 500l ) );
assertThat( offsetOperationsList.get( 0 ).timeStamp(), equalTo( 0l ) );
assertThat( offsetOperationsList.get( 0 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( offsetOperationsList.get( 1 ).scheduledStartTimeAsMilli(), equalTo( 600l ) );
assertThat( offsetOperationsList.get( 1 ).timeStamp(), equalTo( 100l ) );
assertThat( offsetOperationsList.get( 1 ).dependencyTimeStamp(), equalTo( 50l ) );
assertThat( offsetOperationsList.get( 2 ).scheduledStartTimeAsMilli(), equalTo( 700l ) );
assertThat( offsetOperationsList.get( 2 ).timeStamp(), equalTo( 200l ) );
assertThat( offsetOperationsList.get( 2 ).dependencyTimeStamp(), equalTo( 100l ) );
assertThat( offsetOperationsList.get( 3 ).scheduledStartTimeAsMilli(), equalTo( 800l ) );
assertThat( offsetOperationsList.get( 3 ).timeStamp(), equalTo( 300l ) );
assertThat( offsetOperationsList.get( 3 ).dependencyTimeStamp(), equalTo( 150l ) );
assertThat( offsetOperationsList.get( 4 ).scheduledStartTimeAsMilli(), equalTo( 900l ) );
assertThat( offsetOperationsList.get( 4 ).timeStamp(), equalTo( 400l ) );
assertThat( offsetOperationsList.get( 4 ).dependencyTimeStamp(), equalTo( 200l ) );
assertThat( offsetOperationsList.get( 5 ).scheduledStartTimeAsMilli(), equalTo( 1000l ) );
assertThat( offsetOperationsList.get( 5 ).timeStamp(), equalTo( 500l ) );
assertThat( offsetOperationsList.get( 5 ).dependencyTimeStamp(), equalTo( 250l ) );
assertThat( offsetOperationsList.get( 6 ).scheduledStartTimeAsMilli(), equalTo( 1100l ) );
assertThat( offsetOperationsList.get( 6 ).timeStamp(), equalTo( 600l ) );
assertThat( offsetOperationsList.get( 6 ).dependencyTimeStamp(), equalTo( 300l ) );
assertThat( offsetOperationsList.get( 7 ).scheduledStartTimeAsMilli(), equalTo( 1200l ) );
assertThat( offsetOperationsList.get( 7 ).timeStamp(), equalTo( 700l ) );
assertThat( offsetOperationsList.get( 7 ).dependencyTimeStamp(), equalTo( 350l ) );
assertThat( offsetOperationsList.get( 8 ).scheduledStartTimeAsMilli(), equalTo( 1300l ) );
assertThat( offsetOperationsList.get( 8 ).timeStamp(), equalTo( 800l ) );
assertThat( offsetOperationsList.get( 8 ).dependencyTimeStamp(), equalTo( 400l ) );
assertThat( offsetOperationsList.get( 9 ).scheduledStartTimeAsMilli(), equalTo( 1400l ) );
assertThat( offsetOperationsList.get( 9 ).timeStamp(), equalTo( 900l ) );
assertThat( offsetOperationsList.get( 9 ).dependencyTimeStamp(), equalTo( 450l ) );
assertThat( offsetOperationsList.get( 10 ).scheduledStartTimeAsMilli(), equalTo( 1500l ) );
assertThat( offsetOperationsList.get( 10 ).timeStamp(), equalTo( 1000l ) );
assertThat( offsetOperationsList.get( 10 ).dependencyTimeStamp(), equalTo( 500l ) );
}
@Test
public void shouldOffsetAndCompress()
{
// Given
Iterator<Operation> operations = gf.limit(
new TimedNamedOperation1Factory(
// start times
gf.incrementing( 1000l, 100l ),
// dependency times
gf.incrementing( 900l, 50l ),
// names
gf.constant( "name1" )
),
11
);
List<Operation> operationsList = ImmutableList.copyOf( operations );
assertThat( operationsList.size(), is( 11 ) );
assertThat( operationsList.get( 0 ).scheduledStartTimeAsMilli(), equalTo( 1000l ) );
assertThat( operationsList.get( 0 ).timeStamp(), equalTo( 1000l ) );
assertThat( operationsList.get( 0 ).dependencyTimeStamp(), equalTo( 900l ) );
assertThat( operationsList.get( 1 ).scheduledStartTimeAsMilli(), equalTo( 1100l ) );
assertThat( operationsList.get( 1 ).timeStamp(), equalTo( 1100l ) );
assertThat( operationsList.get( 1 ).dependencyTimeStamp(), equalTo( 950l ) );
assertThat( operationsList.get( 2 ).scheduledStartTimeAsMilli(), equalTo( 1200l ) );
assertThat( operationsList.get( 2 ).timeStamp(), equalTo( 1200l ) );
assertThat( operationsList.get( 2 ).dependencyTimeStamp(), equalTo( 1000l ) );
assertThat( operationsList.get( 3 ).scheduledStartTimeAsMilli(), equalTo( 1300l ) );
assertThat( operationsList.get( 3 ).timeStamp(), equalTo( 1300l ) );
assertThat( operationsList.get( 3 ).dependencyTimeStamp(), equalTo( 1050l ) );
assertThat( operationsList.get( 4 ).scheduledStartTimeAsMilli(), equalTo( 1400l ) );
assertThat( operationsList.get( 4 ).timeStamp(), equalTo( 1400l ) );
assertThat( operationsList.get( 4 ).dependencyTimeStamp(), equalTo( 1100l ) );
assertThat( operationsList.get( 5 ).scheduledStartTimeAsMilli(), equalTo( 1500l ) );
assertThat( operationsList.get( 5 ).timeStamp(), equalTo( 1500l ) );
assertThat( operationsList.get( 5 ).dependencyTimeStamp(), equalTo( 1150l ) );
assertThat( operationsList.get( 6 ).scheduledStartTimeAsMilli(), equalTo( 1600l ) );
assertThat( operationsList.get( 6 ).timeStamp(), equalTo( 1600l ) );
assertThat( operationsList.get( 6 ).dependencyTimeStamp(), equalTo( 1200l ) );
assertThat( operationsList.get( 7 ).scheduledStartTimeAsMilli(), equalTo( 1700l ) );
assertThat( operationsList.get( 7 ).timeStamp(), equalTo( 1700l ) );
assertThat( operationsList.get( 7 ).dependencyTimeStamp(), equalTo( 1250l ) );
assertThat( operationsList.get( 8 ).scheduledStartTimeAsMilli(), equalTo( 1800l ) );
assertThat( operationsList.get( 8 ).timeStamp(), equalTo( 1800l ) );
assertThat( operationsList.get( 8 ).dependencyTimeStamp(), equalTo( 1300l ) );
assertThat( operationsList.get( 9 ).scheduledStartTimeAsMilli(), equalTo( 1900l ) );
assertThat( operationsList.get( 9 ).timeStamp(), equalTo( 1900l ) );
assertThat( operationsList.get( 9 ).dependencyTimeStamp(), equalTo( 1350l ) );
assertThat( operationsList.get( 10 ).scheduledStartTimeAsMilli(), equalTo( 2000l ) );
assertThat( operationsList.get( 10 ).timeStamp(), equalTo( 2000l ) );
assertThat( operationsList.get( 10 ).dependencyTimeStamp(), equalTo( 1400l ) );
// When
long newStartTime = 500l;
Double compressionRatio = 0.2;
List<Operation> offsetAndCompressedOperationsList = ImmutableList.copyOf(
gf.timeOffsetAndCompress(
operationsList.iterator(),
newStartTime,
compressionRatio
)
);
// Then
assertThat( offsetAndCompressedOperationsList.size(), is( 11 ) );
assertThat( offsetAndCompressedOperationsList.get( 0 ).scheduledStartTimeAsMilli(), equalTo( 500l ) );
assertThat( offsetAndCompressedOperationsList.get( 0 ).timeStamp(), equalTo( 1000l ) );
assertThat( offsetAndCompressedOperationsList.get( 0 ).dependencyTimeStamp(), equalTo( 900l ) );
assertThat( offsetAndCompressedOperationsList.get( 1 ).scheduledStartTimeAsMilli(), equalTo( 520l ) );
assertThat( offsetAndCompressedOperationsList.get( 1 ).timeStamp(), equalTo( 1100l ) );
assertThat( offsetAndCompressedOperationsList.get( 1 ).dependencyTimeStamp(), equalTo( 950l ) );
assertThat( offsetAndCompressedOperationsList.get( 2 ).scheduledStartTimeAsMilli(), equalTo( 540l ) );
assertThat( offsetAndCompressedOperationsList.get( 2 ).timeStamp(), equalTo( 1200l ) );
assertThat( offsetAndCompressedOperationsList.get( 2 ).dependencyTimeStamp(), equalTo( 1000l ) );
assertThat( offsetAndCompressedOperationsList.get( 3 ).scheduledStartTimeAsMilli(), equalTo( 560l ) );
assertThat( offsetAndCompressedOperationsList.get( 3 ).timeStamp(), equalTo( 1300l ) );
assertThat( offsetAndCompressedOperationsList.get( 3 ).dependencyTimeStamp(), equalTo( 1050l ) );
assertThat( offsetAndCompressedOperationsList.get( 4 ).scheduledStartTimeAsMilli(), equalTo( 580l ) );
assertThat( offsetAndCompressedOperationsList.get( 4 ).timeStamp(), equalTo( 1400l ) );
assertThat( offsetAndCompressedOperationsList.get( 4 ).dependencyTimeStamp(), equalTo( 1100l ) );
assertThat( offsetAndCompressedOperationsList.get( 5 ).scheduledStartTimeAsMilli(), equalTo( 600l ) );
assertThat( offsetAndCompressedOperationsList.get( 5 ).timeStamp(), equalTo( 1500l ) );
assertThat( offsetAndCompressedOperationsList.get( 5 ).dependencyTimeStamp(), equalTo( 1150l ) );
assertThat( offsetAndCompressedOperationsList.get( 6 ).scheduledStartTimeAsMilli(), equalTo( 620l ) );
assertThat( offsetAndCompressedOperationsList.get( 6 ).timeStamp(), equalTo( 1600l ) );
assertThat( offsetAndCompressedOperationsList.get( 6 ).dependencyTimeStamp(), equalTo( 1200l ) );
assertThat( offsetAndCompressedOperationsList.get( 7 ).scheduledStartTimeAsMilli(), equalTo( 640l ) );
assertThat( offsetAndCompressedOperationsList.get( 7 ).timeStamp(), equalTo( 1700l ) );
assertThat( offsetAndCompressedOperationsList.get( 7 ).dependencyTimeStamp(), equalTo( 1250l ) );
assertThat( offsetAndCompressedOperationsList.get( 8 ).scheduledStartTimeAsMilli(), equalTo( 660l ) );
assertThat( offsetAndCompressedOperationsList.get( 8 ).timeStamp(), equalTo( 1800l ) );
assertThat( offsetAndCompressedOperationsList.get( 8 ).dependencyTimeStamp(), equalTo( 1300l ) );
assertThat( offsetAndCompressedOperationsList.get( 9 ).scheduledStartTimeAsMilli(), equalTo( 680l ) );
assertThat( offsetAndCompressedOperationsList.get( 9 ).timeStamp(), equalTo( 1900l ) );
assertThat( offsetAndCompressedOperationsList.get( 9 ).dependencyTimeStamp(), equalTo( 1350l ) );
assertThat( offsetAndCompressedOperationsList.get( 10 ).scheduledStartTimeAsMilli(), equalTo( 700l ) );
assertThat( offsetAndCompressedOperationsList.get( 10 ).timeStamp(), equalTo( 2000l ) );
assertThat( offsetAndCompressedOperationsList.get( 10 ).dependencyTimeStamp(), equalTo( 1400l ) );
}
@Test
public void shouldOffsetAndCompressWhenTimesAreVeryCloseTogetherWithoutRoundingErrors()
{
// Given
Iterator<Operation> operations = gf.limit(
new TimedNamedOperation1Factory(
// start times
gf.incrementing( 0l, 1l ),
// dependency times
gf.incrementing( 0l, 0l ),
// names
gf.constant( "name1" )
),
11
);
List<Operation> operationsList = ImmutableList.copyOf( operations );
assertThat( operationsList.size(), is( 11 ) );
assertThat( operationsList.get( 0 ).scheduledStartTimeAsMilli(), equalTo( 0l ) );
assertThat( operationsList.get( 0 ).timeStamp(), equalTo( 0l ) );
assertThat( operationsList.get( 0 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( operationsList.get( 1 ).scheduledStartTimeAsMilli(), equalTo( 1l ) );
assertThat( operationsList.get( 1 ).timeStamp(), equalTo( 1l ) );
assertThat( operationsList.get( 1 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( operationsList.get( 2 ).scheduledStartTimeAsMilli(), equalTo( 2l ) );
assertThat( operationsList.get( 2 ).timeStamp(), equalTo( 2l ) );
assertThat( operationsList.get( 2 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( operationsList.get( 3 ).scheduledStartTimeAsMilli(), equalTo( 3l ) );
assertThat( operationsList.get( 3 ).timeStamp(), equalTo( 3l ) );
assertThat( operationsList.get( 3 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( operationsList.get( 4 ).scheduledStartTimeAsMilli(), equalTo( 4l ) );
assertThat( operationsList.get( 4 ).timeStamp(), equalTo( 4l ) );
assertThat( operationsList.get( 4 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( operationsList.get( 5 ).scheduledStartTimeAsMilli(), equalTo( 5l ) );
assertThat( operationsList.get( 5 ).timeStamp(), equalTo( 5l ) );
assertThat( operationsList.get( 5 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( operationsList.get( 6 ).scheduledStartTimeAsMilli(), equalTo( 6l ) );
assertThat( operationsList.get( 6 ).timeStamp(), equalTo( 6l ) );
assertThat( operationsList.get( 6 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( operationsList.get( 7 ).scheduledStartTimeAsMilli(), equalTo( 7l ) );
assertThat( operationsList.get( 7 ).timeStamp(), equalTo( 7l ) );
assertThat( operationsList.get( 7 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( operationsList.get( 8 ).scheduledStartTimeAsMilli(), equalTo( 8l ) );
assertThat( operationsList.get( 8 ).timeStamp(), equalTo( 8l ) );
assertThat( operationsList.get( 8 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( operationsList.get( 9 ).scheduledStartTimeAsMilli(), equalTo( 9l ) );
assertThat( operationsList.get( 9 ).timeStamp(), equalTo( 9l ) );
assertThat( operationsList.get( 9 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( operationsList.get( 10 ).scheduledStartTimeAsMilli(), equalTo( 10l ) );
assertThat( operationsList.get( 10 ).timeStamp(), equalTo( 10l ) );
assertThat( operationsList.get( 10 ).dependencyTimeStamp(), equalTo( 0l ) );
// When
long newStartTime = 0l;
Double compressionRatio = 0.5;
List<Operation> offsetAndCompressedOperations = ImmutableList
.copyOf( gf.timeOffsetAndCompress( operationsList.iterator(), newStartTime, compressionRatio ) );
// Then
assertThat( offsetAndCompressedOperations.size(), is( 11 ) );
assertThat( offsetAndCompressedOperations.get( 0 ).scheduledStartTimeAsMilli(), equalTo( 0l ) );
assertThat( offsetAndCompressedOperations.get( 0 ).timeStamp(), equalTo( 0l ) );
assertThat( offsetAndCompressedOperations.get( 0 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( offsetAndCompressedOperations.get( 1 ).scheduledStartTimeAsMilli(), equalTo( 1l ) );
assertThat( offsetAndCompressedOperations.get( 1 ).timeStamp(), equalTo( 1l ) );
assertThat( offsetAndCompressedOperations.get( 1 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( offsetAndCompressedOperations.get( 2 ).scheduledStartTimeAsMilli(), equalTo( 1l ) );
assertThat( offsetAndCompressedOperations.get( 2 ).timeStamp(), equalTo( 2l ) );
assertThat( offsetAndCompressedOperations.get( 2 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( offsetAndCompressedOperations.get( 3 ).scheduledStartTimeAsMilli(), equalTo( 2l ) );
assertThat( offsetAndCompressedOperations.get( 3 ).timeStamp(), equalTo( 3l ) );
assertThat( offsetAndCompressedOperations.get( 3 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( offsetAndCompressedOperations.get( 4 ).scheduledStartTimeAsMilli(), equalTo( 2l ) );
assertThat( offsetAndCompressedOperations.get( 4 ).timeStamp(), equalTo( 4l ) );
assertThat( offsetAndCompressedOperations.get( 4 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( offsetAndCompressedOperations.get( 5 ).scheduledStartTimeAsMilli(), equalTo( 3l ) );
assertThat( offsetAndCompressedOperations.get( 5 ).timeStamp(), equalTo( 5l ) );
assertThat( offsetAndCompressedOperations.get( 5 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( offsetAndCompressedOperations.get( 6 ).scheduledStartTimeAsMilli(), equalTo( 3l ) );
assertThat( offsetAndCompressedOperations.get( 6 ).timeStamp(), equalTo( 6l ) );
assertThat( offsetAndCompressedOperations.get( 6 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( offsetAndCompressedOperations.get( 7 ).scheduledStartTimeAsMilli(), equalTo( 4l ) );
assertThat( offsetAndCompressedOperations.get( 7 ).timeStamp(), equalTo( 7l ) );
assertThat( offsetAndCompressedOperations.get( 7 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( offsetAndCompressedOperations.get( 8 ).scheduledStartTimeAsMilli(), equalTo( 4l ) );
assertThat( offsetAndCompressedOperations.get( 8 ).timeStamp(), equalTo( 8l ) );
assertThat( offsetAndCompressedOperations.get( 8 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( offsetAndCompressedOperations.get( 9 ).scheduledStartTimeAsMilli(), equalTo( 5l ) );
assertThat( offsetAndCompressedOperations.get( 9 ).timeStamp(), equalTo( 9l ) );
assertThat( offsetAndCompressedOperations.get( 9 ).dependencyTimeStamp(), equalTo( 0l ) );
assertThat( offsetAndCompressedOperations.get( 10 ).scheduledStartTimeAsMilli(), equalTo( 5l ) );
assertThat( offsetAndCompressedOperations.get( 10 ).timeStamp(), equalTo( 10l ) );
assertThat( offsetAndCompressedOperations.get( 10 ).dependencyTimeStamp(), equalTo( 0l ) );
}
@Test
public void shouldNotBreakTheMonotonicallyIncreasingScheduledStartTimesOfOperationsFromLdbcWorkload()
throws WorkloadException, IOException, DriverConfigurationException
{
Map<String,String> paramsMap = LdbcSnbInteractiveWorkloadConfiguration.defaultConfigSF1();
// LDBC Interactive Workload-specific parameters
paramsMap.put( LdbcSnbInteractiveWorkloadConfiguration.PARAMETERS_DIRECTORY,
TestUtils.getResource( "/snb/interactive/" ).getAbsolutePath() );
// Driver-specific parameters
String name = "name";
String dbClassName = DummyLdbcSnbInteractiveDb.class.getName();
String workloadClassName = LdbcSnbInteractiveWorkload.class.getName();
long operationCount = 100;
int threadCount = 1;
int statusDisplayInterval = 1;
TimeUnit timeUnit = TimeUnit.MILLISECONDS;
String resultDirPath = temporaryFolder.newFolder().getAbsolutePath();
double timeCompressionRatio = 1.0;
Set<String> peerIds = new HashSet<>();
ConsoleAndFileDriverConfiguration.ConsoleAndFileValidationParamOptions validationParams = null;
String dbValidationFilePath = null;
boolean calculateWorkloadStatistics = false;
long spinnerSleepDuration = 0l;
boolean printHelp = false;
boolean ignoreScheduledStartTimes = false;
long warmupCount = 0;
long skipCount = 0;
ConsoleAndFileDriverConfiguration configuration = new ConsoleAndFileDriverConfiguration(
paramsMap,
name,
dbClassName,
workloadClassName,
operationCount,
threadCount,
statusDisplayInterval,
timeUnit,
resultDirPath,
timeCompressionRatio,
peerIds,
validationParams,
dbValidationFilePath,
calculateWorkloadStatistics,
spinnerSleepDuration,
printHelp,
ignoreScheduledStartTimes,
warmupCount,
skipCount
);
Map<String,String> updateStreamParams = MapUtils.loadPropertiesToMap(
TestUtils.getResource( "/snb/interactive/updateStream.properties" )
);
configuration = (ConsoleAndFileDriverConfiguration) configuration.applyArgs( updateStreamParams );
Workload workload = new LdbcSnbInteractiveWorkload();
workload.init( configuration );
GeneratorFactory gf = new GeneratorFactory( new RandomDataGeneratorFactory( 42L ) );
List<Operation> operations = Lists.newArrayList(
gf.limit(
WorkloadStreams.mergeSortedByStartTimeExcludingChildOperationGenerators( gf,
workload.streams( gf, false ) ),
configuration.operationCount()
)
);
long prevOperationScheduledStartTime = operations.get( 0 ).scheduledStartTimeAsMilli() - 1;
for ( Operation operation : operations )
{
assertThat( operation.scheduledStartTimeAsMilli() >= prevOperationScheduledStartTime, is( true ) );
prevOperationScheduledStartTime = operation.scheduledStartTimeAsMilli();
}
List<Operation> offsetOperations =
Lists.newArrayList( gf.timeOffset( operations.iterator(), timeSource.nowAsMilli() + 500 ) );
long prevOffsetOperationScheduledStartTime = offsetOperations.get( 0 ).scheduledStartTimeAsMilli() - 1;
for ( Operation operation : offsetOperations )
{
assertThat( operation.scheduledStartTimeAsMilli() >= prevOffsetOperationScheduledStartTime, is( true ) );
prevOffsetOperationScheduledStartTime = operation.scheduledStartTimeAsMilli();
}
workload.close();
}
@Test
public void shouldAlwaysProduceTheSameOutputWhenGivenTheSameInput()
{
// Given
List<Operation> operations = Lists.<Operation>newArrayList(
new TimedNamedOperation2( 10l, 10l, 0l, "name2" ),
new TimedNamedOperation2( 11l, 11l, 1l, "name2" ),
new TimedNamedOperation1( 12l, 12l, 2l, "name1" )
);
long now = new SystemTimeSource().nowAsMilli();
List<Operation> offsetOperations1 = Lists.newArrayList( gf.timeOffset( operations.iterator(), now ) );
List<Operation> offsetOperations2 = Lists.newArrayList( gf.timeOffset( operations.iterator(), now ) );
List<Operation> offsetOperations3 = Lists.newArrayList( gf.timeOffset( operations.iterator(), now ) );
List<Operation> offsetOperations4 = Lists.newArrayList( gf.timeOffset( operations.iterator(), now ) );
// When
GeneratorFactory.OperationStreamComparisonResult stream1Stream2Comparison =
gf.compareOperationStreams( offsetOperations1.iterator(), offsetOperations2.iterator(), true );
GeneratorFactory.OperationStreamComparisonResult stream1Stream3Comparison =
gf.compareOperationStreams( offsetOperations1.iterator(), offsetOperations3.iterator(), true );
GeneratorFactory.OperationStreamComparisonResult stream1Stream4Comparison =
gf.compareOperationStreams( offsetOperations1.iterator(), offsetOperations4.iterator(), true );
GeneratorFactory.OperationStreamComparisonResult stream2Stream1Comparison =
gf.compareOperationStreams( offsetOperations2.iterator(), offsetOperations1.iterator(), true );
GeneratorFactory.OperationStreamComparisonResult stream2Stream3Comparison =
gf.compareOperationStreams( offsetOperations2.iterator(), offsetOperations3.iterator(), true );
GeneratorFactory.OperationStreamComparisonResult stream2Stream4Comparison =
gf.compareOperationStreams( offsetOperations2.iterator(), offsetOperations4.iterator(), true );
GeneratorFactory.OperationStreamComparisonResult stream3Stream1Comparison =
gf.compareOperationStreams( offsetOperations3.iterator(), offsetOperations1.iterator(), true );
GeneratorFactory.OperationStreamComparisonResult stream3Stream2Comparison =
gf.compareOperationStreams( offsetOperations3.iterator(), offsetOperations2.iterator(), true );
GeneratorFactory.OperationStreamComparisonResult stream3Stream4Comparison =
gf.compareOperationStreams( offsetOperations3.iterator(), offsetOperations4.iterator(), true );
GeneratorFactory.OperationStreamComparisonResult stream4Stream1Comparison =
gf.compareOperationStreams( offsetOperations4.iterator(), offsetOperations1.iterator(), true );
GeneratorFactory.OperationStreamComparisonResult stream4Stream2Comparison =
gf.compareOperationStreams( offsetOperations4.iterator(), offsetOperations2.iterator(), true );
GeneratorFactory.OperationStreamComparisonResult stream4Stream3Comparison =
gf.compareOperationStreams( offsetOperations4.iterator(), offsetOperations3.iterator(), true );
// Then
assertThat( stream1Stream2Comparison.errorMessage(), stream1Stream2Comparison.resultType(),
is( GeneratorFactory.OperationStreamComparisonResultType.PASS ) );
assertThat( stream1Stream3Comparison.errorMessage(), stream1Stream3Comparison.resultType(),
is( GeneratorFactory.OperationStreamComparisonResultType.PASS ) );
assertThat( stream1Stream4Comparison.errorMessage(), stream1Stream4Comparison.resultType(),
is( GeneratorFactory.OperationStreamComparisonResultType.PASS ) );
assertThat( stream2Stream1Comparison.errorMessage(), stream2Stream1Comparison.resultType(),
is( GeneratorFactory.OperationStreamComparisonResultType.PASS ) );
assertThat( stream2Stream3Comparison.errorMessage(), stream2Stream3Comparison.resultType(),
is( GeneratorFactory.OperationStreamComparisonResultType.PASS ) );
assertThat( stream2Stream4Comparison.errorMessage(), stream2Stream4Comparison.resultType(),
is( GeneratorFactory.OperationStreamComparisonResultType.PASS ) );
assertThat( stream3Stream1Comparison.errorMessage(), stream3Stream1Comparison.resultType(),
is( GeneratorFactory.OperationStreamComparisonResultType.PASS ) );
assertThat( stream3Stream2Comparison.errorMessage(), stream3Stream2Comparison.resultType(),
is( GeneratorFactory.OperationStreamComparisonResultType.PASS ) );
assertThat( stream3Stream4Comparison.errorMessage(), stream3Stream4Comparison.resultType(),
is( GeneratorFactory.OperationStreamComparisonResultType.PASS ) );
assertThat( stream4Stream1Comparison.errorMessage(), stream4Stream1Comparison.resultType(),
is( GeneratorFactory.OperationStreamComparisonResultType.PASS ) );
assertThat( stream4Stream2Comparison.errorMessage(), stream4Stream2Comparison.resultType(),
is( GeneratorFactory.OperationStreamComparisonResultType.PASS ) );
assertThat( stream4Stream3Comparison.errorMessage(), stream4Stream3Comparison.resultType(),
is( GeneratorFactory.OperationStreamComparisonResultType.PASS ) );
}
}