Skip to content

Commit

Permalink
Tests adapataions
Browse files Browse the repository at this point in the history
  • Loading branch information
MishaDemianenko committed Aug 24, 2018
1 parent cef4ad4 commit 9d3941a
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 19 deletions.
Expand Up @@ -31,7 +31,6 @@
import org.neo4j.graphdb.DependencyResolver; import org.neo4j.graphdb.DependencyResolver;
import org.neo4j.internal.kernel.api.exceptions.TransactionFailureException; import org.neo4j.internal.kernel.api.exceptions.TransactionFailureException;
import org.neo4j.kernel.GraphDatabaseQueryService; import org.neo4j.kernel.GraphDatabaseQueryService;
import org.neo4j.kernel.availability.AvailabilityGuard;
import org.neo4j.kernel.availability.DatabaseAvailabilityGuard; import org.neo4j.kernel.availability.DatabaseAvailabilityGuard;
import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge; import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge;
import org.neo4j.kernel.impl.query.QueryExecutionEngine; import org.neo4j.kernel.impl.query.QueryExecutionEngine;
Expand Down Expand Up @@ -63,7 +62,7 @@ public void throwsWhenTxAwaitDurationExpires()
Duration txAwaitDuration = Duration.ofSeconds( 42 ); Duration txAwaitDuration = Duration.ofSeconds( 42 );
FakeClock clock = new FakeClock(); FakeClock clock = new FakeClock();


AvailabilityGuard databaseAvailabilityGuard = spy( new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, clock, NullLog.getInstance() ) ); DatabaseAvailabilityGuard databaseAvailabilityGuard = spy( new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, clock, NullLog.getInstance() ) );
when( databaseAvailabilityGuard.isAvailable() ).then( invocation -> when( databaseAvailabilityGuard.isAvailable() ).then( invocation ->
{ {
// move clock forward on the first availability check // move clock forward on the first availability check
Expand Down Expand Up @@ -119,12 +118,12 @@ private static TransactionIdStore fixedTxIdStore( long lastClosedTransactionId )
private static TransactionStateMachineV1SPI createTxSpi( Supplier<TransactionIdStore> txIdStore, Duration txAwaitDuration, private static TransactionStateMachineV1SPI createTxSpi( Supplier<TransactionIdStore> txIdStore, Duration txAwaitDuration,
Clock clock ) Clock clock )
{ {
AvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, clock, NullLog.getInstance() ); DatabaseAvailabilityGuard databaseAvailabilityGuard = new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, clock, NullLog.getInstance() );
return createTxSpi( txIdStore, txAwaitDuration, databaseAvailabilityGuard, clock ); return createTxSpi( txIdStore, txAwaitDuration, databaseAvailabilityGuard, clock );
} }


private static TransactionStateMachineV1SPI createTxSpi( Supplier<TransactionIdStore> txIdStore, Duration txAwaitDuration, private static TransactionStateMachineV1SPI createTxSpi( Supplier<TransactionIdStore> txIdStore, Duration txAwaitDuration,
AvailabilityGuard databaseAvailabilityGuard, Clock clock ) DatabaseAvailabilityGuard databaseAvailabilityGuard, Clock clock )
{ {
QueryExecutionEngine queryExecutionEngine = mock( QueryExecutionEngine.class ); QueryExecutionEngine queryExecutionEngine = mock( QueryExecutionEngine.class );


Expand All @@ -133,6 +132,7 @@ private static TransactionStateMachineV1SPI createTxSpi( Supplier<TransactionIdS
when( dependencyResolver.resolveDependency( ThreadToStatementContextBridge.class ) ).thenReturn( bridge ); when( dependencyResolver.resolveDependency( ThreadToStatementContextBridge.class ) ).thenReturn( bridge );
when( dependencyResolver.resolveDependency( QueryExecutionEngine.class ) ).thenReturn( queryExecutionEngine ); when( dependencyResolver.resolveDependency( QueryExecutionEngine.class ) ).thenReturn( queryExecutionEngine );
when( dependencyResolver.provideDependency( TransactionIdStore.class ) ).thenReturn( txIdStore ); when( dependencyResolver.provideDependency( TransactionIdStore.class ) ).thenReturn( txIdStore );
when( dependencyResolver.resolveDependency( DatabaseAvailabilityGuard.class ) ).thenReturn( databaseAvailabilityGuard );


GraphDatabaseAPI db = mock( GraphDatabaseAPI.class ); GraphDatabaseAPI db = mock( GraphDatabaseAPI.class );
when( db.getDependencyResolver() ).thenReturn( dependencyResolver ); when( db.getDependencyResolver() ).thenReturn( dependencyResolver );
Expand Down
Expand Up @@ -82,16 +82,16 @@ public KernelTransaction getKernelTransactionBoundToThisThread( boolean strict )
return transaction; return transaction;
} }


private void assertInUnterminatedTransaction( KernelTransaction transaction ) private static void assertInUnterminatedTransaction( KernelTransaction transaction )
{ {
if ( transaction.getAvailabilityGuard().isShutdown() )
{
throw new DatabaseShutdownException();
}
if ( transaction == null ) if ( transaction == null )
{ {
throw new BridgeNotInTransactionException(); throw new BridgeNotInTransactionException();
} }
if ( transaction.getAvailabilityGuard().isShutdown() )
{
throw new DatabaseShutdownException();
}
if ( transaction.isTerminated() ) if ( transaction.isTerminated() )
{ {
Status terminationReason = transaction.getReasonIfTerminated().orElse( Status.Transaction.Terminated ); Status terminationReason = transaction.getReasonIfTerminated().orElse( Status.Transaction.Terminated );
Expand Down
Expand Up @@ -21,6 +21,7 @@


import org.junit.Test; import org.junit.Test;
import org.mockito.Mockito; import org.mockito.Mockito;
import org.mockito.verification.VerificationMode;


import java.time.Clock; import java.time.Clock;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
Expand All @@ -43,10 +44,9 @@
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.atMost;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.verifyZeroInteractions;
import static org.neo4j.dbms.database.DatabaseManager.DEFAULT_DATABASE_NAME; import static org.neo4j.dbms.database.DatabaseManager.DEFAULT_DATABASE_NAME;
Expand All @@ -73,33 +73,32 @@ public void logOnAvailabilityChange()
databaseAvailabilityGuard.require( REQUIREMENT_1 ); databaseAvailabilityGuard.require( REQUIREMENT_1 );


// Then log should have been called // Then log should have been called
verify( log, atLeastOnce() ).info( anyString() ); verifyLogging( log, atLeastOnce() );


// When requirement fulfilled // When requirement fulfilled
databaseAvailabilityGuard.fulfill( REQUIREMENT_1 ); databaseAvailabilityGuard.fulfill( REQUIREMENT_1 );


// Then log should have been called // Then log should have been called
verify( log, atLeast( 2 ) ).info( anyString() ); verifyLogging( log, times( 4 ) );


// When requirement is added // When requirement is added
databaseAvailabilityGuard.require( REQUIREMENT_1 ); databaseAvailabilityGuard.require( REQUIREMENT_1 );
databaseAvailabilityGuard.require( REQUIREMENT_2 ); databaseAvailabilityGuard.require( REQUIREMENT_2 );


// Then log should have been called // Then log should have been called
verify( log, atLeast( 3 ) ).info( anyString() ); verifyLogging( log, times( 6 ) );


// When requirement fulfilled // When requirement fulfilled
databaseAvailabilityGuard.fulfill( REQUIREMENT_1 ); databaseAvailabilityGuard.fulfill( REQUIREMENT_1 );


// Then log should not have been called // Then log should not have been called
verify( log, atMost( 3 ) ).info( anyString() ); verifyLogging( log, times( 6 ) );


// When requirement fulfilled // When requirement fulfilled
databaseAvailabilityGuard.fulfill( REQUIREMENT_2 ); databaseAvailabilityGuard.fulfill( REQUIREMENT_2 );


// Then log should have been called // Then log should have been called
verify( log, atLeast( 4 ) ).info( anyString() ); verifyLogging( log, times( 8 ) );
verify( log, atMost( 4 ) ).info( anyString() );
} }


@Test @Test
Expand Down Expand Up @@ -338,6 +337,11 @@ public void shouldExplainBlockersOnCheckAvailable() throws Exception
} }
} }


private static void verifyLogging( Log log, VerificationMode mode )
{
verify( log, mode ).info( anyString(), Mockito.<Object[]>anyVararg() );
}

private static DatabaseAvailabilityGuard getDatabaseAvailabilityGuard( Clock clock, Log log ) private static DatabaseAvailabilityGuard getDatabaseAvailabilityGuard( Clock clock, Log log )
{ {
return new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, clock, log ); return new DatabaseAvailabilityGuard( DEFAULT_DATABASE_NAME, clock, log );
Expand Down
Expand Up @@ -78,6 +78,7 @@
import org.neo4j.kernel.impl.transaction.log.checkpoint.StoreCopyCheckPointMutex; import org.neo4j.kernel.impl.transaction.log.checkpoint.StoreCopyCheckPointMutex;
import org.neo4j.kernel.impl.transaction.log.files.LogFileCreationMonitor; import org.neo4j.kernel.impl.transaction.log.files.LogFileCreationMonitor;
import org.neo4j.kernel.impl.transaction.stats.DatabaseTransactionStats; import org.neo4j.kernel.impl.transaction.stats.DatabaseTransactionStats;
import org.neo4j.kernel.impl.transaction.stats.TransactionCounters;
import org.neo4j.kernel.impl.util.Dependencies; import org.neo4j.kernel.impl.util.Dependencies;
import org.neo4j.kernel.impl.util.UnsatisfiedDependencyException; import org.neo4j.kernel.impl.util.UnsatisfiedDependencyException;
import org.neo4j.kernel.impl.util.collection.CollectionsFactorySupplier; import org.neo4j.kernel.impl.util.collection.CollectionsFactorySupplier;
Expand Down Expand Up @@ -229,6 +230,8 @@ private static class TestDatabaseCreationContext implements DatabaseCreationCont
private final Function<File,FileSystemWatcherService> watcherServiceFactory; private final Function<File,FileSystemWatcherService> watcherServiceFactory;
private final GraphDatabaseFacade facade; private final GraphDatabaseFacade facade;
private final Iterable<QueryEngineProvider> engineProviders; private final Iterable<QueryEngineProvider> engineProviders;
private final DatabaseAvailability databaseAvailability;
private final CoreAPIAvailabilityGuard coreAPIAvailabilityGuard;


TestDatabaseCreationContext( String databaseName, DatabaseLayout databaseLayout, Config config, IdGeneratorFactory idGeneratorFactory, TestDatabaseCreationContext( String databaseName, DatabaseLayout databaseLayout, Config config, IdGeneratorFactory idGeneratorFactory,
LogService logService, JobScheduler scheduler, TokenNameLookup tokenNameLookup, DependencyResolver dependencyResolver, LogService logService, JobScheduler scheduler, TokenNameLookup tokenNameLookup, DependencyResolver dependencyResolver,
Expand Down Expand Up @@ -285,6 +288,8 @@ private static class TestDatabaseCreationContext implements DatabaseCreationCont
this.watcherServiceFactory = watcherServiceFactory; this.watcherServiceFactory = watcherServiceFactory;
this.facade = facade; this.facade = facade;
this.engineProviders = engineProviders; this.engineProviders = engineProviders;
this.databaseAvailability = new DatabaseAvailability( databaseAvailabilityGuard, mock( TransactionCounters.class ), clock, 0 );
this.coreAPIAvailabilityGuard = new CoreAPIAvailabilityGuard( databaseAvailabilityGuard, 0 );
} }


@Override @Override
Expand Down Expand Up @@ -474,7 +479,7 @@ public DatabaseAvailabilityGuard getDatabaseAvailabilityGuard()
@Override @Override
public CoreAPIAvailabilityGuard getCoreAPIAvailabilityGuard() public CoreAPIAvailabilityGuard getCoreAPIAvailabilityGuard()
{ {
return null; return coreAPIAvailabilityGuard;
} }


@Override @Override
Expand Down Expand Up @@ -552,7 +557,7 @@ public Iterable<QueryEngineProvider> getEngineProviders()
@Override @Override
public DatabaseAvailability getDatabaseAvailability() public DatabaseAvailability getDatabaseAvailability()
{ {
return null; return databaseAvailability;
} }
} }


Expand Down

0 comments on commit 9d3941a

Please sign in to comment.