org.neo4j.test.TestGraphDatabaseFactory Maven / Gradle / Ivy
/*
* Copyright (c) 2002-2017 "Neo Technology,"
* Network Engine for Objects in Lund AB [http://neotechnology.com]
*
* This file is part of Neo4j.
*
* Neo4j is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
package org.neo4j.test;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collections;
import java.util.Map;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.config.Setting;
import org.neo4j.graphdb.factory.GraphDatabaseBuilder;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.graphdb.security.URLAccessRule;
import org.neo4j.io.fs.FileSystemAbstraction;
import org.neo4j.kernel.GraphDatabaseDependencies;
import org.neo4j.kernel.extension.KernelExtensionFactory;
import org.neo4j.kernel.impl.factory.CommunityEditionModule;
import org.neo4j.kernel.impl.factory.DatabaseInfo;
import org.neo4j.kernel.impl.factory.GraphDatabaseFacade;
import org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory;
import org.neo4j.kernel.impl.factory.PlatformModule;
import org.neo4j.kernel.impl.logging.AbstractLogService;
import org.neo4j.kernel.impl.logging.LogService;
import org.neo4j.kernel.monitoring.Monitors;
import org.neo4j.logging.LogProvider;
import org.neo4j.logging.NullLogProvider;
import static org.neo4j.graphdb.factory.GraphDatabaseSettings.Connector.ConnectorType.BOLT;
import static org.neo4j.graphdb.factory.GraphDatabaseSettings.boltConnector;
/**
* Test factory for graph databases
*/
public class TestGraphDatabaseFactory extends GraphDatabaseFactory
{
public TestGraphDatabaseFactory()
{
super( new TestGraphDatabaseFactoryState() );
setUserLogProvider( NullLogProvider.getInstance() );
}
public GraphDatabaseService newImpermanentDatabase()
{
return newImpermanentDatabaseBuilder().newGraphDatabase();
}
public GraphDatabaseService newImpermanentDatabase( File storeDir )
{
return newImpermanentDatabaseBuilder( storeDir ).newGraphDatabase();
}
public GraphDatabaseService newImpermanentDatabase( Map,String> config )
{
GraphDatabaseBuilder builder = newImpermanentDatabaseBuilder();
for ( Map.Entry,String> entry : config.entrySet() )
{
builder.setConfig( entry.getKey(), entry.getValue() );
}
return builder.newGraphDatabase();
}
public GraphDatabaseBuilder newImpermanentDatabaseBuilder()
{
return newImpermanentDatabaseBuilder( ImpermanentGraphDatabase.PATH );
}
@Override
protected void configure( GraphDatabaseBuilder builder )
{
// Reduce the default page cache memory size to 8 mega-bytes for test databases.
builder.setConfig( GraphDatabaseSettings.pagecache_memory, "8m" );
builder.setConfig( boltConnector("bolt").type, BOLT.name() );
builder.setConfig( boltConnector("bolt").enabled, "false" );
}
private void configure( GraphDatabaseBuilder builder, File storeDir )
{
configure( builder );
builder.setConfig( GraphDatabaseSettings.logs_directory, new File( storeDir, "logs" ).getAbsolutePath() );
}
@Override
protected TestGraphDatabaseFactoryState getCurrentState()
{
return (TestGraphDatabaseFactoryState) super.getCurrentState();
}
@Override
protected TestGraphDatabaseFactoryState getStateCopy()
{
return new TestGraphDatabaseFactoryState( getCurrentState() );
}
public FileSystemAbstraction getFileSystem()
{
return getCurrentState().getFileSystem();
}
public TestGraphDatabaseFactory setFileSystem( FileSystemAbstraction fileSystem )
{
getCurrentState().setFileSystem( fileSystem );
return this;
}
public TestGraphDatabaseFactory setMonitors( Monitors monitors )
{
getCurrentState().setMonitors( monitors );
return this;
}
@Override
public TestGraphDatabaseFactory setUserLogProvider( LogProvider logProvider )
{
return (TestGraphDatabaseFactory) super.setUserLogProvider( logProvider );
}
public TestGraphDatabaseFactory setInternalLogProvider( LogProvider logProvider )
{
getCurrentState().setInternalLogProvider( logProvider );
return this;
}
public TestGraphDatabaseFactory addKernelExtensions( Iterable> newKernelExtensions )
{
getCurrentState().addKernelExtensions( newKernelExtensions );
return this;
}
public TestGraphDatabaseFactory addKernelExtension( KernelExtensionFactory> newKernelExtension )
{
return addKernelExtensions( Collections.singletonList( newKernelExtension ) );
}
public TestGraphDatabaseFactory setKernelExtensions( Iterable> newKernelExtensions )
{
getCurrentState().setKernelExtensions( newKernelExtensions );
return this;
}
@Override
public TestGraphDatabaseFactory addURLAccessRule( String protocol, URLAccessRule rule )
{
return (TestGraphDatabaseFactory) super.addURLAccessRule( protocol, rule );
}
public GraphDatabaseBuilder newImpermanentDatabaseBuilder( final File storeDir )
{
final TestGraphDatabaseFactoryState state = getStateCopy();
GraphDatabaseBuilder.DatabaseCreator creator =
createImpermanentDatabaseCreator( storeDir, state );
TestGraphDatabaseBuilder builder = createImpermanentGraphDatabaseBuilder( creator );
configure( builder, storeDir );
return builder;
}
private TestGraphDatabaseBuilder createImpermanentGraphDatabaseBuilder(
GraphDatabaseBuilder.DatabaseCreator creator )
{
return new TestGraphDatabaseBuilder( creator );
}
protected GraphDatabaseBuilder.DatabaseCreator createImpermanentDatabaseCreator( final File storeDir,
final TestGraphDatabaseFactoryState state )
{
return new GraphDatabaseBuilder.DatabaseCreator()
{
@Override
@SuppressWarnings( "deprecation" )
public GraphDatabaseService newDatabase( Map config )
{
return new GraphDatabaseFacadeFactory( DatabaseInfo.COMMUNITY, CommunityEditionModule::new )
{
@Override
protected PlatformModule createPlatform( File storeDir, Map params,
Dependencies dependencies, GraphDatabaseFacade graphDatabaseFacade )
{
return new ImpermanentGraphDatabase.ImpermanentPlatformModule( storeDir, params, databaseInfo,
dependencies, graphDatabaseFacade )
{
@Override
protected FileSystemAbstraction createFileSystemAbstraction()
{
FileSystemAbstraction fs = state.getFileSystem();
if ( fs != null )
{
return fs;
}
else
{
return super.createFileSystemAbstraction();
}
}
@Override
protected LogService createLogService( LogProvider logProvider )
{
final LogProvider internalLogProvider = state.getInternalLogProvider();
if ( internalLogProvider == null )
{
return super.createLogService( logProvider );
}
final LogProvider userLogProvider = state.databaseDependencies().userLogProvider();
return new AbstractLogService()
{
@Override
public LogProvider getUserLogProvider()
{
return userLogProvider;
}
@Override
public LogProvider getInternalLogProvider()
{
return internalLogProvider;
}
};
}
};
}
}.newFacade( storeDir, config,
GraphDatabaseDependencies.newDependencies( state.databaseDependencies() ) );
}
};
}
private Path tempFile( String name )
{
try
{
return Files.createTempFile( name, "tmp" );
}
catch ( IOException e )
{
throw new AssertionError( e );
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy