private Log getLog() { return logProvider.getLog( GraphDatabaseConfigurationMigrator.class ); }
@Before public void setUp() { log = logProvider.getLog( getClass() ); System.setProperty( "org.neo4j.helpers.Service.printServiceLoaderStackTraces", "true" ); }
@Test public void defaultValueWhenCustomTransactionTimeoutNotANumber() { when( request.getHeader( MAX_EXECUTION_TIME_HEADER ) ).thenReturn( "aa" ); Log log = logProvider.getLog( HttpServletRequest.class ); long transactionTimeout = getTransactionTimeout( request, log ); assertEquals( "Transaction timeout not specified.", 0, transactionTimeout ); logProvider.assertContainsMessageContaining("Fail to parse `max-execution-time` " + "header with value: 'aa'. Should be a positive number."); }
@Test public void retrieveCustomTransactionTimeout() { when( request.getHeader( MAX_EXECUTION_TIME_HEADER ) ).thenReturn( "100" ); Log log = logProvider.getLog( HttpServletRequest.class ); long transactionTimeout = getTransactionTimeout( request, log ); assertEquals( "Transaction timeout should be retrieved.", 100, transactionTimeout ); logProvider.assertNoLoggingOccurred(); }
@Before public void setUp() { logProvider = new AssertableLogProvider(); logger = new CappedLogger( logProvider.getLog( CappedLogger.class ) ); }
@Test public void defaultValueWhenCustomTransactionTimeoutNotSpecified() { Log log = logProvider.getLog( HttpServletRequest.class ); long transactionTimeout = getTransactionTimeout( request, log ); assertEquals( "Transaction timeout not specified.", 0, transactionTimeout ); logProvider.assertNoLoggingOccurred(); }
private static AssertableLogProvider emulateFailureWritingError( Neo4jError error, Throwable errorDuringWrite ) throws Exception { AssertableLogProvider logProvider = new AssertableLogProvider(); BoltResponseMessageWriter responseHandler = newResponseHandlerMock( error.isFatal(), errorDuringWrite ); MessageProcessingHandler handler = new MessageProcessingHandler( responseHandler, mock( BoltConnection.class ), logProvider.getLog( "Test" ) ); handler.markFailed( error ); handler.onFinish(); return logProvider; }
@Test public void shouldLogExceptionOnExceptionCaught() { AssertableLogProvider logProvider = new AssertableLogProvider(); BoltConnection connection = mock( BoltConnection.class ); channel = new EmbeddedChannel( new HouseKeeper( connection, logProvider.getLog( HouseKeeper.class ) ) ); RuntimeException exception = new RuntimeException( "some exception" ); channel.pipeline().fireExceptionCaught( exception ); verify( connection ).stop(); logProvider.assertExactly( inLog( HouseKeeper.class ).error( startsWith( "Fatal error occurred when handling a client connection" ), equalTo( exception ) ) ); }
@Test public void progressNeverReportMoreThenHundredPercent() { AssertableLogProvider logProvider = new AssertableLogProvider(); Log log = logProvider.getLog( getClass() ); VisibleMigrationProgressMonitor monitor = new VisibleMigrationProgressMonitor( log ); monitor.started( 1 ); monitorSection( monitor, "First", 100, 1, 10, 99, 170 ); monitor.completed(); verifySectionReportedCorrectly( logProvider ); }
@Test public void shouldLogCorrectTransactionLogDiagnosticsForNoTransactionLogs() { // GIVEN NeoStoreDataSource dataSource = neoStoreDataSourceWithLogFilesContainingLowestTxId( noLogs() ); AssertableLogProvider logProvider = new AssertableLogProvider(); Logger logger = logProvider.getLog( getClass() ).infoLogger(); // WHEN DataSourceDiagnostics.TRANSACTION_RANGE.dump( dataSource, logger ); // THEN logProvider.assertContainsMessageContaining( "No transactions" ); }
@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 databaseWithCriticalErrorsCanNotBeHealed() { AssertableLogProvider logProvider = new AssertableLogProvider(); DatabaseHealth databaseHealth = new DatabaseHealth( mock( DatabasePanicEventGenerator.class ), logProvider.getLog( DatabaseHealth.class ) ); assertTrue( databaseHealth.isHealthy() ); IOException criticalException = new IOException( "Space exception.", new OutOfMemoryError( "Out of memory." ) ); databaseHealth.panic( criticalException ); assertFalse( databaseHealth.isHealthy() ); assertFalse( databaseHealth.healed() ); logProvider.assertNoMessagesContaining( "Database health set to OK" ); logProvider.assertContainsLogCallContaining( "Database encountered a critical error and can't be healed. Restart required." ); } }
@Test public void shouldReportAllPercentageSteps() { // GIVEN AssertableLogProvider logProvider = new AssertableLogProvider(); Log log = logProvider.getLog( getClass() ); VisibleMigrationProgressMonitor monitor = new VisibleMigrationProgressMonitor( log ); monitor.started( 1 ); // WHEN monitorSection( monitor, "First", 100, 40, 25, 23 /*these are too far*/ , 10, 50 ); monitor.completed(); // THEN verifySectionReportedCorrectly( logProvider ); }
@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 mustUseAndLogConfiguredPageSwapper() { // Given Config config = Config.defaults( stringMap( pagecache_memory.name(), "8m", pagecache_swapper.name(), TEST_PAGESWAPPER_NAME ) ); AssertableLogProvider logProvider = new AssertableLogProvider(); Log log = logProvider.getLog( PageCache.class ); // When ConfiguringPageCacheFactory cacheFactory = new ConfiguringPageCacheFactory( fsRule.get(), config, PageCacheTracer.NULL, PageCursorTracerSupplier.NULL, log, EmptyVersionContextSupplier.EMPTY, jobScheduler ); cacheFactory.getOrCreatePageCache().close(); // Then assertThat( PageSwapperFactoryForTesting.countCreatedPageSwapperFactories(), is( 1 ) ); assertThat( PageSwapperFactoryForTesting.countConfiguredPageSwapperFactories(), is( 1 ) ); logProvider.assertContainsMessageContaining( TEST_PAGESWAPPER_NAME ); }
@Test public void shouldLogCorrectTransactionLogDiagnosticsForTransactionsInOldestLog() throws Exception { // GIVEN long logVersion = 2; long prevLogLastTxId = 45; NeoStoreDataSource dataSource = neoStoreDataSourceWithLogFilesContainingLowestTxId( logWithTransactions( logVersion, prevLogLastTxId ) ); AssertableLogProvider logProvider = new AssertableLogProvider(); Logger logger = logProvider.getLog( getClass() ).infoLogger(); // WHEN DataSourceDiagnostics.TRANSACTION_RANGE.dump( dataSource, logger ); // THEN logProvider.assertContainsMessageContaining( "transaction " + (prevLogLastTxId + 1) ); logProvider.assertContainsMessageContaining( "version " + logVersion ); }
@Test public void shouldLogCorrectTransactionLogDiagnosticsForTransactionsInSecondOldestLog() throws Exception { // GIVEN long logVersion = 2; long prevLogLastTxId = 45; NeoStoreDataSource dataSource = neoStoreDataSourceWithLogFilesContainingLowestTxId( logWithTransactionsInNextToOldestLog( logVersion, prevLogLastTxId ) ); AssertableLogProvider logProvider = new AssertableLogProvider(); Logger logger = logProvider.getLog( getClass() ).infoLogger(); // WHEN DataSourceDiagnostics.TRANSACTION_RANGE.dump( dataSource, logger ); // THEN logProvider.assertContainsMessageContaining( "transaction " + (prevLogLastTxId + 1) ); logProvider.assertContainsMessageContaining( "version " + (logVersion + 1) ); }
@Test public void healDatabaseWithoutCriticalErrors() { AssertableLogProvider logProvider = new AssertableLogProvider(); DatabaseHealth databaseHealth = new DatabaseHealth( mock( DatabasePanicEventGenerator.class ), logProvider.getLog( DatabaseHealth.class ) ); assertTrue( databaseHealth.isHealthy() ); databaseHealth.panic( new IOException( "Space exception." ) ); assertFalse( databaseHealth.isHealthy() ); assertTrue( databaseHealth.healed() ); logProvider.assertContainsLogCallContaining( "Database health set to OK" ); logProvider.assertNoMessagesContaining( "Database encountered a critical error and can't be healed. Restart required." ); }
@Test public void shouldCountFileSizeRecursively() throws IOException { // file structure: // storeDir/indexDir/indexFile (1 kB) // storeDir/neostore (3 kB) File storeDir = directory.directory( "storeDir" ); DatabaseLayout layout = DatabaseLayout.of( storeDir ); File indexDir = directory( storeDir, "indexDir" ); file( indexDir, "indexFile", (int) kibiBytes( 1 ) ); file( storeDir, layout.metadataStore().getName(), (int) kibiBytes( 3 ) ); AssertableLogProvider logProvider = new AssertableLogProvider(); KernelDiagnostics.StoreFiles storeFiles = new KernelDiagnostics.StoreFiles( layout ); storeFiles.dump( logProvider.getLog( getClass() ).debugLogger() ); logProvider.assertContainsMessageContaining( "Total size of store: 4.00 kB" ); logProvider.assertContainsMessageContaining( "Total size of mapped files: 3.00 kB" ); }
@Test public void upgradeShouldGiveProgressMonitorProgressMessages() throws Exception { // Given PageCache pageCache = pageCacheRule.getPageCache( fileSystem ); UpgradableDatabase upgradableDatabase = getUpgradableDatabase( pageCache ); // When AssertableLogProvider logProvider = new AssertableLogProvider(); newUpgrader( upgradableDatabase, pageCache, allowMigrateConfig, new VisibleMigrationProgressMonitor( logProvider.getLog( "test" ) ) ).migrateIfNeeded( databaseLayout ); // Then logProvider.assertContainsLogCallContaining( "Store files" ); logProvider.assertContainsLogCallContaining( "Indexes" ); logProvider.assertContainsLogCallContaining( "Counts store" ); logProvider.assertContainsLogCallContaining( "Successfully finished" ); }