package com.ldbc.driver.runtime.scheduling;
import com.ldbc.driver.Operation;
import com.ldbc.driver.runtime.ConcurrentErrorReporter;
import com.ldbc.driver.runtime.coordination.DummyGlobalCompletionTimeReader;
import com.ldbc.driver.workloads.dummy.TimedNamedOperation1;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
public class GctDependencyCheckTest
{
@Test
public void shouldOnlyReturnTrueWhenGctIsGreaterThanOrEqualToDependencyTime()
{
// Given
long dependencyTimeAsMilli = 5;
long scheduledStartTimeAsMilli = -1;
Operation operation =
new TimedNamedOperation1( scheduledStartTimeAsMilli, scheduledStartTimeAsMilli, dependencyTimeAsMilli,
null );
DummyGlobalCompletionTimeReader dummyGlobalCompletionTimeReader = new DummyGlobalCompletionTimeReader();
ConcurrentErrorReporter errorReporter = new ConcurrentErrorReporter();
// When
GctDependencyCheck gctDependencyCheck =
new GctDependencyCheck( dummyGlobalCompletionTimeReader, errorReporter );
// Then
// GCT is clearly before Dependency Time
dummyGlobalCompletionTimeReader.setGlobalCompletionTimeAsMilli( 0 );
assertThat( gctDependencyCheck.doCheck( operation ), is( SpinnerCheck.SpinnerCheckResult.STILL_CHECKING ) );
// GCT is just before Dependency Time
dummyGlobalCompletionTimeReader.setGlobalCompletionTimeAsMilli( 4 );
assertThat( gctDependencyCheck.doCheck( operation ), is( SpinnerCheck.SpinnerCheckResult.STILL_CHECKING ) );
// GCT is equal to Dependency Time
dummyGlobalCompletionTimeReader.setGlobalCompletionTimeAsMilli( 5 );
assertThat( gctDependencyCheck.doCheck( operation ), is( SpinnerCheck.SpinnerCheckResult.PASSED ) );
// GCT is just after Dependency Time
dummyGlobalCompletionTimeReader.setGlobalCompletionTimeAsMilli( 6 );
assertThat( gctDependencyCheck.doCheck( operation ), is( SpinnerCheck.SpinnerCheckResult.PASSED ) );
// GCT is clearly after Dependency Time
dummyGlobalCompletionTimeReader.setGlobalCompletionTimeAsMilli( 10 );
assertThat( gctDependencyCheck.doCheck( operation ), is( SpinnerCheck.SpinnerCheckResult.PASSED ) );
}
}