@Override public void log( @Nonnull String format, @Nonnull Object... arguments ) { matcher = builder.info( messageMatcher( format ), arguments ); }
@Override public void log( @Nonnull String message ) { matcher = builder.info( messageMatcher( message ) ); }
public LogMatcher info( String format, Object... arguments ) { return info( equalTo( format ), arguments ); }
@Test public void shouldLogJobProgress() throws Exception { // Given createNode( map( name, "irrelephant" ), FIRST ); AssertableLogProvider logProvider = new AssertableLogProvider(); FlippableIndexProxy index = mock( FlippableIndexProxy.class ); when( index.getState() ).thenReturn( InternalIndexState.ONLINE ); IndexPopulator populator = spy( indexPopulator( false ) ); try { IndexPopulationJob job = newIndexPopulationJob( populator, index, indexStoreView, logProvider, EntityType.NODE, indexDescriptor( FIRST, name, false ) ); // When job.run(); // Then LogMatcherBuilder match = inLog( IndexPopulationJob.class ); logProvider.assertExactly( match.info( "Index population started: [%s]", ":FIRST(name)" ), match.info( "Index creation finished. Index [%s] is %s.", ":FIRST(name)", "ONLINE" ) ); } finally { populator.close( true ); } }
@Test void shouldRemoveLogProviderFromDuplication() { // Given AssertableLogProvider logProvider1 = new AssertableLogProvider(); AssertableLogProvider logProvider2 = new AssertableLogProvider(); DuplicatingLogProvider logProvider = new DuplicatingLogProvider( logProvider1, logProvider2 ); // When Log log = logProvider.getLog( getClass() ); log.info( "When the going gets weird" ); assertTrue( logProvider.remove( logProvider1 ) ); log.info( "The weird turn pro" ); // Then logProvider1.assertExactly( AssertableLogProvider.inLog( getClass() ).info( "When the going gets weird" ) ); logProvider2.assertExactly( AssertableLogProvider.inLog( getClass() ).info( "When the going gets weird" ), AssertableLogProvider.inLog( getClass() ).info( "The weird turn pro" ) ); } }
@Test public void logConstraintJobProgress() throws Exception { // Given createNode( map( name, "irrelephant" ), FIRST ); AssertableLogProvider logProvider = new AssertableLogProvider(); FlippableIndexProxy index = mock( FlippableIndexProxy.class ); when( index.getState() ).thenReturn( InternalIndexState.POPULATING ); IndexPopulator populator = spy( indexPopulator( false ) ); try { IndexPopulationJob job = newIndexPopulationJob( populator, index, indexStoreView, logProvider, EntityType.NODE, indexDescriptor( FIRST, name, true ) ); // When job.run(); // Then LogMatcherBuilder match = inLog( IndexPopulationJob.class ); logProvider.assertExactly( match.info( "Index population started: [%s]", ":FIRST(name)" ), match.info( "Index created. Starting data checks. Index [%s] is %s.", ":FIRST(name)", "POPULATING" ) ); } finally { populator.close( true ); } }
@Test void shouldRemoveLoggersFromDuplication() { // Given AssertableLogProvider logProvider = new AssertableLogProvider(); Log log1 = logProvider.getLog( "log 1" ); Log log2 = logProvider.getLog( "log 2" ); DuplicatingLog log = new DuplicatingLog( log1, log2 ); Logger logger = log.infoLogger(); // When logger.log( "When the going gets weird" ); log.remove( log1 ); logger.log( "The weird turn pro" ); // Then logProvider.assertExactly( AssertableLogProvider.inLog( "log 1" ).info( "When the going gets weird" ), AssertableLogProvider.inLog( "log 2" ).info( "When the going gets weird" ), AssertableLogProvider.inLog( "log 2" ).info( "The weird turn pro" ) ); } }
@Test public void shouldLogTriggerSamplingOnAnIndexes() throws Exception { // given long indexId = 0; IndexSamplingMode mode = TRIGGER_REBUILD_ALL; IndexDescriptor descriptor = forSchema( forLabel( 0, 1 ), PROVIDER_DESCRIPTOR ); IndexingService indexingService = newIndexingServiceWithMockedDependencies( populator, accessor, withData(), descriptor.withId( indexId ) ); life.init(); life.start(); // when indexingService.triggerIndexSampling( descriptor.schema() , mode ); // then String userDescription = descriptor.schema().userDescription( nameLookup ); internalLogProvider.assertAtLeastOnce( logMatch.info( "Manual trigger for sampling index " + userDescription + " [" + mode + "]" ) ); }
private AssertableLogProvider.LogMatcher currentLog( AssertableLogProvider.LogMatcherBuilder logMatcherBuilder, Matcher<String> stringMatcher ) { switch ( logName ) { case "debug": return logMatcherBuilder.debug( stringMatcher ); case "info": return logMatcherBuilder.info( stringMatcher ); case "warn": return logMatcherBuilder.warn( stringMatcher ); case "error": return logMatcherBuilder.error( stringMatcher ); default: throw new RuntimeException( "Unknown log name" ); } }
@Test void shouldRemoveLogFromDuplication() { // Given AssertableLogProvider logProvider = new AssertableLogProvider(); Log log1 = logProvider.getLog( "log 1" ); Log log2 = logProvider.getLog( "log 2" ); DuplicatingLog log = new DuplicatingLog( log1, log2 ); // When log.info( "When the going gets weird" ); log.remove( log1 ); log.info( "The weird turn pro" ); // Then logProvider.assertExactly( AssertableLogProvider.inLog( "log 1" ).info( "When the going gets weird" ), AssertableLogProvider.inLog( "log 2" ).info( "When the going gets weird" ), AssertableLogProvider.inLog( "log 2" ).info( "The weird turn pro" ) ); }
@Test public void shouldLogUserReadableLabelAndPropertyNames() throws Exception { //noinspection deprecation GraphDatabaseAPI db = dbRule.getGraphDatabaseAPI(); String labelName = "User"; String property = "name"; // when createIndex( db, labelName, property ); // then LogMatcherBuilder match = inLog( IndexPopulationJob.class ); IndexProviderMap indexProviderMap = db.getDependencyResolver().resolveDependency( IndexProviderMap.class ); IndexProvider defaultProvider = indexProviderMap.getDefaultProvider(); IndexProviderDescriptor providerDescriptor = defaultProvider.getProviderDescriptor(); logProvider.assertAtLeastOnce( match.info( "Index population started: [%s]", ":User(name) [provider: {key=" + providerDescriptor.getKey() + ", version=" + providerDescriptor.getVersion() + "}]" ) ); assertEventually( (ThrowingSupplier<Object,Exception>) () -> null, new LogMessageMatcher( match, providerDescriptor ), 1, TimeUnit.MINUTES ); }
@Test void shouldBulkOutputToMultipleLogs() { // Given AssertableLogProvider logProvider = new AssertableLogProvider(); Log log1 = logProvider.getLog( "log 1" ); Log log2 = logProvider.getLog( "log 2" ); DuplicatingLog log = new DuplicatingLog( log1, log2 ); // When log.bulk( bulkLog -> bulkLog.info( "When the going gets weird" ) ); // Then logProvider.assertExactly( AssertableLogProvider.inLog( "log 1" ).info( "When the going gets weird" ), AssertableLogProvider.inLog( "log 2" ).info( "When the going gets weird" ) ); }
@Test public void shouldLogReasonForDroppingIndex() throws IOException { // given AssertableLogProvider logProvider = new AssertableLogProvider(); // when new FailedIndexProxy( forSchema( forLabel( 0, 0 ), IndexProviderDescriptor.UNDECIDED ).withId( 1 ).withoutCapabilities(), "foo", mock( IndexPopulator.class ), IndexPopulationFailure.failure( "it broke" ), indexCountsRemover, logProvider ).drop(); // then logProvider.assertAtLeastOnce( inLog( FailedIndexProxy.class ).info( "FailedIndexProxy#drop index on foo dropped due to:\nit broke" ) ); } }
@Test void shouldOutputToMultipleLogs() { // Given AssertableLogProvider logProvider = new AssertableLogProvider(); Log log1 = logProvider.getLog( "log 1" ); Log log2 = logProvider.getLog( "log 2" ); DuplicatingLog log = new DuplicatingLog( log1, log2 ); // When log.info( "When the going gets weird" ); // Then logProvider.assertExactly( AssertableLogProvider.inLog( "log 1" ).info( "When the going gets weird" ), AssertableLogProvider.inLog( "log 2" ).info( "When the going gets weird" ) ); }
@Test public void shouldLogTriggerSamplingOnAllIndexes() throws Exception { // given IndexingService indexingService = newIndexingServiceWithMockedDependencies( populator, accessor, withData() ); IndexSamplingMode mode = TRIGGER_REBUILD_ALL; // when indexingService.triggerIndexSampling( mode ); // then internalLogProvider.assertAtLeastOnce( logMatch.info( "Manual trigger for sampling all indexes [" + mode + "]" ) ); }
@Override public void log( @Nonnull String message, @Nonnull Throwable throwable ) { matcher = builder.info( messageMatcher( message ), sameInstance( throwable ) ); }
private void verifySectionReportedCorrectly( AssertableLogProvider logProvider ) { logProvider.assertContainsMessageContaining( VisibleMigrationProgressMonitor.MESSAGE_STARTED ); for ( int i = 10; i <= 100; i += 10 ) { logProvider.assertContainsMessageContaining( String.valueOf( i ) + "%" ); } logProvider.assertNone( AssertableLogProvider.inLog( VisibleMigrationProgressMonitor.class ).info( containsString( "110%" ) ) ); logProvider.assertContainsMessageContaining( VisibleMigrationProgressMonitor.MESSAGE_COMPLETED ); }
@Test public void shouldShutdownCleanly() throws Throwable { theDatabase.start(); theDatabase.stop(); logProvider.assertAtLeastOnce( inLog( LifecycleManagingDatabase.class ).info( "Stopped." ) ); }
@Override public boolean matches( Object item ) { return logProvider.containsMatchingLogCall( match.info( CREATION_FINISHED, ":User(name) [provider: {key=" + descriptor.getKey() + ", version=" + descriptor.getVersion() + "}]", "ONLINE" ) ); }
@Test public void shouldLogOnSuccessfulStartup() throws Throwable { theDatabase.start(); logProvider.assertAtLeastOnce( inLog( LifecycleManagingDatabase.class ).info( "Started." ) ); }