package com.ldbc.driver.generator; import com.google.common.collect.Lists; import com.ldbc.driver.Operation; import com.ldbc.driver.util.Function1; import com.ldbc.driver.workloads.dummy.TimedNamedOperation1; import com.ldbc.driver.workloads.dummy.TimedNamedOperation2; import org.junit.Test; import java.util.Iterator; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; public class ConservativeDependencyTimeAssigningOperationGeneratorTest { @Test public void testAssignDependencyTimesEqualToLastEncounteredLowerDependencyStartTime() { // Given GeneratorFactory gf = new GeneratorFactory( new RandomDataGeneratorFactory( 42l ) ); long initialDependencyTime = 0l; Iterator<Operation> operations = Lists.<Operation>newArrayList( new TimedNamedOperation1( 1l, 1l, -1, null ), // R_W new TimedNamedOperation2( 2l, 2l, -1, null ), // R new TimedNamedOperation1( 3l, 3l, -1, null ), // R_W new TimedNamedOperation2( 3l, 3l, -1, null ), // R new TimedNamedOperation1( 5l, 5l, -1, null ), // R_W new TimedNamedOperation2( 6l, 6l, -1, null ), // R new TimedNamedOperation1( 7l, 7l, -1, null ), // R_W new TimedNamedOperation2( 7l, 7l, -1, null ), // R new TimedNamedOperation2( 8l, 8l, -1, null ) // R ).iterator(); Function1<Operation,Boolean,RuntimeException> isDependency = new Function1<Operation,Boolean,RuntimeException>() { @Override public Boolean apply( Operation operation ) { return operation.getClass().equals( TimedNamedOperation1.class ); } }; boolean canOverwriteDependencyTime = true; // When Iterator<Operation> operationsWithDependencyTimes = gf.assignDependencyTimesEqualToLastEncounteredLowerDependencyTimeStamp( operations, isDependency, initialDependencyTime, canOverwriteDependencyTime ); // Then Operation operation1 = operationsWithDependencyTimes.next(); assertThat( operation1.scheduledStartTimeAsMilli(), equalTo( 1l ) ); assertThat( operation1.timeStamp(), equalTo( 1l ) ); assertThat( operation1.dependencyTimeStamp(), equalTo( 0l ) ); Operation operation2 = operationsWithDependencyTimes.next(); assertThat( operation2.scheduledStartTimeAsMilli(), equalTo( 2l ) ); assertThat( operation2.timeStamp(), equalTo( 2l ) ); assertThat( operation2.dependencyTimeStamp(), equalTo( 1l ) ); Operation operation3 = operationsWithDependencyTimes.next(); assertThat( operation3.scheduledStartTimeAsMilli(), equalTo( 3l ) ); assertThat( operation3.timeStamp(), equalTo( 3l ) ); assertThat( operation3.dependencyTimeStamp(), equalTo( 1l ) ); Operation operation4 = operationsWithDependencyTimes.next(); assertThat( operation4.scheduledStartTimeAsMilli(), equalTo( 3l ) ); assertThat( operation4.timeStamp(), equalTo( 3l ) ); assertThat( operation4.dependencyTimeStamp(), equalTo( 1l ) ); Operation operation5 = operationsWithDependencyTimes.next(); assertThat( operation5.scheduledStartTimeAsMilli(), equalTo( 5l ) ); assertThat( operation5.timeStamp(), equalTo( 5l ) ); assertThat( operation5.dependencyTimeStamp(), equalTo( 3l ) ); Operation operation6 = operationsWithDependencyTimes.next(); assertThat( operation6.scheduledStartTimeAsMilli(), equalTo( 6l ) ); assertThat( operation6.timeStamp(), equalTo( 6l ) ); assertThat( operation6.dependencyTimeStamp(), equalTo( 5l ) ); Operation operation7 = operationsWithDependencyTimes.next(); assertThat( operation7.scheduledStartTimeAsMilli(), equalTo( 7l ) ); assertThat( operation7.timeStamp(), equalTo( 7l ) ); assertThat( operation7.dependencyTimeStamp(), equalTo( 5l ) ); Operation operation8 = operationsWithDependencyTimes.next(); assertThat( operation8.scheduledStartTimeAsMilli(), equalTo( 7l ) ); assertThat( operation8.timeStamp(), equalTo( 7l ) ); assertThat( operation8.dependencyTimeStamp(), equalTo( 5l ) ); Operation operation9 = operationsWithDependencyTimes.next(); assertThat( operation9.scheduledStartTimeAsMilli(), equalTo( 8l ) ); assertThat( operation9.timeStamp(), equalTo( 8l ) ); assertThat( operation9.dependencyTimeStamp(), equalTo( 7l ) ); assertThat( operationsWithDependencyTimes.hasNext(), is( false ) ); } @Test public void testAssignDependencyTimesEqualToLastEncounteredDependencyStartTime() { // Given GeneratorFactory gf = new GeneratorFactory( new RandomDataGeneratorFactory( 42l ) ); long initialDependencyTime = 0l; Iterator<Operation> operations = Lists.<Operation>newArrayList( new TimedNamedOperation1( 1l, 1l, -1, null ), // R_W new TimedNamedOperation2( 2l, 2l, -1, null ), // R new TimedNamedOperation1( 3l, 3l, -1, null ), // R_W new TimedNamedOperation2( 3l, 3l, -1, null ), // R new TimedNamedOperation1( 5l, 5l, -1, null ), // R_W new TimedNamedOperation2( 6l, 6l, -1, null ), // R new TimedNamedOperation1( 7l, 7l, -1, null ), // R_W new TimedNamedOperation2( 7l, 7l, -1, null ), // R new TimedNamedOperation2( 8l, 8l, -1, null ) // R ).iterator(); Function1<Operation,Boolean,RuntimeException> isDependency = new Function1<Operation,Boolean,RuntimeException>() { @Override public Boolean apply( Operation operation ) { return operation.getClass().equals( TimedNamedOperation1.class ); } }; boolean canOverwriteDependencyTime = true; // When Iterator<Operation> operationsWithDependencyTimes = gf.assignDependencyTimesEqualToLastEncounteredDependencyTimeStamp( operations, isDependency, initialDependencyTime, canOverwriteDependencyTime ); // Then Operation operation1 = operationsWithDependencyTimes.next(); assertThat( operation1.scheduledStartTimeAsMilli(), equalTo( 1l ) ); assertThat( operation1.timeStamp(), equalTo( 1l ) ); assertThat( operation1.dependencyTimeStamp(), equalTo( 0l ) ); Operation operation2 = operationsWithDependencyTimes.next(); assertThat( operation2.scheduledStartTimeAsMilli(), equalTo( 2l ) ); assertThat( operation2.timeStamp(), equalTo( 2l ) ); assertThat( operation2.dependencyTimeStamp(), equalTo( 1l ) ); Operation operation3 = operationsWithDependencyTimes.next(); assertThat( operation3.scheduledStartTimeAsMilli(), equalTo( 3l ) ); assertThat( operation3.timeStamp(), equalTo( 3l ) ); assertThat( operation3.dependencyTimeStamp(), equalTo( 1l ) ); Operation operation4 = operationsWithDependencyTimes.next(); assertThat( operation4.scheduledStartTimeAsMilli(), equalTo( 3l ) ); assertThat( operation4.timeStamp(), equalTo( 3l ) ); assertThat( operation4.dependencyTimeStamp(), equalTo( 3l ) ); Operation operation5 = operationsWithDependencyTimes.next(); assertThat( operation5.scheduledStartTimeAsMilli(), equalTo( 5l ) ); assertThat( operation5.timeStamp(), equalTo( 5l ) ); assertThat( operation5.dependencyTimeStamp(), equalTo( 3l ) ); Operation operation6 = operationsWithDependencyTimes.next(); assertThat( operation6.scheduledStartTimeAsMilli(), equalTo( 6l ) ); assertThat( operation6.timeStamp(), equalTo( 6l ) ); assertThat( operation6.dependencyTimeStamp(), equalTo( 5l ) ); Operation operation7 = operationsWithDependencyTimes.next(); assertThat( operation7.scheduledStartTimeAsMilli(), equalTo( 7l ) ); assertThat( operation7.timeStamp(), equalTo( 7l ) ); assertThat( operation7.dependencyTimeStamp(), equalTo( 5l ) ); Operation operation8 = operationsWithDependencyTimes.next(); assertThat( operation8.scheduledStartTimeAsMilli(), equalTo( 7l ) ); assertThat( operation8.timeStamp(), equalTo( 7l ) ); assertThat( operation8.dependencyTimeStamp(), equalTo( 7l ) ); Operation operation9 = operationsWithDependencyTimes.next(); assertThat( operation9.scheduledStartTimeAsMilli(), equalTo( 8l ) ); assertThat( operation9.timeStamp(), equalTo( 8l ) ); assertThat( operation9.dependencyTimeStamp(), equalTo( 7l ) ); assertThat( operationsWithDependencyTimes.hasNext(), is( false ) ); } @Test public void testAssignConservativeDependencyTimes() { // Given GeneratorFactory gf = new GeneratorFactory( new RandomDataGeneratorFactory( 42l ) ); long initialDependencyTime = 0l; Iterator<Operation> operations = Lists.<Operation>newArrayList( new TimedNamedOperation1( 1l, 1l, -1, null ), // R_W new TimedNamedOperation2( 2l, 2l, -1, null ), // R new TimedNamedOperation1( 3l, 3l, -1, null ), // R_W new TimedNamedOperation2( 3l, 3l, -1, null ), // R new TimedNamedOperation1( 5l, 5l, -1, null ), // R_W new TimedNamedOperation2( 6l, 6l, -1, null ), // R new TimedNamedOperation1( 7l, 7l, -1, null ), // R_W new TimedNamedOperation2( 7l, 7l, -1, null ), // R new TimedNamedOperation2( 8l, 8l, -1, null ) // R ).iterator(); boolean canOverwriteDependencyTime = true; // When Iterator<Operation> operationsWithDependencyTimes = gf.assignConservativeDependencyTimes( operations, initialDependencyTime, canOverwriteDependencyTime ); // Then Operation operation1 = operationsWithDependencyTimes.next(); assertThat( operation1.scheduledStartTimeAsMilli(), equalTo( 1l ) ); assertThat( operation1.timeStamp(), equalTo( 1l ) ); assertThat( operation1.dependencyTimeStamp(), equalTo( 0l ) ); Operation operation2 = operationsWithDependencyTimes.next(); assertThat( operation2.scheduledStartTimeAsMilli(), equalTo( 2l ) ); assertThat( operation2.timeStamp(), equalTo( 2l ) ); assertThat( operation2.dependencyTimeStamp(), equalTo( 1l ) ); Operation operation3 = operationsWithDependencyTimes.next(); assertThat( operation3.scheduledStartTimeAsMilli(), equalTo( 3l ) ); assertThat( operation3.timeStamp(), equalTo( 3l ) ); assertThat( operation3.dependencyTimeStamp(), equalTo( 2l ) ); Operation operation4 = operationsWithDependencyTimes.next(); assertThat( operation4.scheduledStartTimeAsMilli(), equalTo( 3l ) ); assertThat( operation4.timeStamp(), equalTo( 3l ) ); assertThat( operation4.dependencyTimeStamp(), equalTo( 3l ) ); Operation operation5 = operationsWithDependencyTimes.next(); assertThat( operation5.scheduledStartTimeAsMilli(), equalTo( 5l ) ); assertThat( operation5.timeStamp(), equalTo( 5l ) ); assertThat( operation5.dependencyTimeStamp(), equalTo( 3l ) ); Operation operation6 = operationsWithDependencyTimes.next(); assertThat( operation6.scheduledStartTimeAsMilli(), equalTo( 6l ) ); assertThat( operation6.timeStamp(), equalTo( 6l ) ); assertThat( operation6.dependencyTimeStamp(), equalTo( 5l ) ); Operation operation7 = operationsWithDependencyTimes.next(); assertThat( operation7.scheduledStartTimeAsMilli(), equalTo( 7l ) ); assertThat( operation7.timeStamp(), equalTo( 7l ) ); assertThat( operation7.dependencyTimeStamp(), equalTo( 6l ) ); Operation operation8 = operationsWithDependencyTimes.next(); assertThat( operation8.scheduledStartTimeAsMilli(), equalTo( 7l ) ); assertThat( operation8.timeStamp(), equalTo( 7l ) ); assertThat( operation8.dependencyTimeStamp(), equalTo( 7l ) ); Operation operation9 = operationsWithDependencyTimes.next(); assertThat( operation9.scheduledStartTimeAsMilli(), equalTo( 8l ) ); assertThat( operation9.timeStamp(), equalTo( 8l ) ); assertThat( operation9.dependencyTimeStamp(), equalTo( 7l ) ); assertThat( operationsWithDependencyTimes.hasNext(), is( false ) ); } }