@Override protected NeoServer createNeoServer( GraphFactory graphFactory, Config config, GraphDatabaseDependencies dependencies ) { return new CommunityNeoServer( config, graphFactory, dependencies ); } }
private void startServer( String hstsValue ) throws Exception { server = buildServer( hstsValue ); server.start(); }
@Override public void stop() { super.stop(); if ( configFile != null ) { configFile.delete(); } } }
protected AuthorizationModule createAuthorizationModule() { return new AuthorizationModule( webServer, authManagerSupplier, userLogProvider, getConfig(), getUriWhitelist() ); } }
@Override protected Iterable<ServerModule> createServerModules() { return Arrays.asList( createDBMSModule(), new RESTApiModule( webServer, getConfig(), getDependencyResolver().provideDependency( UsageData.class ), userLogProvider ), new ManagementApiModule( webServer, getConfig() ), new ThirdPartyJAXRSModule( webServer, getConfig(), userLogProvider, this ), new ConsoleModule( webServer, getConfig() ), new Neo4jBrowserModule( webServer ), createAuthorizationModule(), new SecurityRulesModule( webServer, getConfig(), userLogProvider ) ); }
protected DBMSModule createDBMSModule() { // ConnectorPortRegister isn't available until runtime, so defer loading until then Supplier<DiscoverableURIs> discoverableURIs = () -> communityDiscoverableURIs( getConfig(), getDependencyResolver().resolveDependency( ConnectorPortRegister.class ) ); return new DBMSModule( webServer, getConfig(), discoverableURIs ); }
@Test public void shouldDisallowDirectoryListings() throws Exception { // Given server = CommunityServerBuilder.serverOnRandomPorts() .build(); server.start(); // When HTTP.Response okResource = HTTP.GET( server.baseUri().resolve( "/browser/index.html" ).toString() ); HTTP.Response illegalResource = HTTP.GET( server.baseUri().resolve( "/browser/assets/" ).toString() ); // Then // Depends on specific resources exposed by the browser module; if this test starts to fail, // check whether the structure of the browser module has changed and adjust accordingly. assertEquals( 200, okResource.status() ); assertEquals( 403, illegalResource.status() ); }
@Override public void start() { Map<String, String> opts = new HashMap<>(); // Neo4j 3.x opts.put(DBMS_CONNECTOR_HTTP_TYPE, HTTP_TYPE); opts.put(DBMS_CONNECTOR_HTTP_ENABLED, Boolean.TRUE.toString()); opts.put(DBMS_CONNECTOR_HTTP_LISTEN_ADDRESS, embeddedNeo4jConfiguration.getListenAddress() + ":" + embeddedNeo4jConfiguration.getHttpPort()); opts.put(DBMS_CONNECTOR_BOLT_ENABLED, Boolean.TRUE.toString()); opts.put(DBMS_CONNECTOR_BOLT_LISTEN_ADDRESS, embeddedNeo4jConfiguration.getListenAddress() + ":" + embeddedNeo4jConfiguration.getBoltPort()); Config defaults = Config.defaults(opts); FormattedLogProvider logProvider = FormattedLogProvider.withDefaultLogLevel(Level.INFO).toOutputStream(System.out); final GraphDatabaseDependencies graphDatabaseDependencies = GraphDatabaseDependencies.newDependencies().userLogProvider(logProvider); GraphFactory graphFactory = (config, dependencies) -> (GraphDatabaseFacade) graphDatabaseService; communityNeoServer = new CommunityNeoServer(defaults, graphFactory, graphDatabaseDependencies); communityNeoServer.start(); }
@Test public void shouldComplainIfServerPortIsAlreadyTaken() throws IOException { try ( ServerSocket socket = new ServerSocket( 0, 0, InetAddress.getLocalHost() ) ) { ListenSocketAddress contestedAddress = new ListenSocketAddress( socket.getInetAddress().getHostName(), socket.getLocalPort() ); AssertableLogProvider logProvider = new AssertableLogProvider(); CommunityNeoServer server = CommunityServerBuilder.server( logProvider ) .onAddress( contestedAddress ) .usingDataDir( folder.directory( name.getMethodName() ).getAbsolutePath() ) .build(); try { server.start(); fail( "Should have reported failure to start" ); } catch ( ServerStartupException e ) { assertThat( e.getMessage(), containsString( "Starting Neo4j failed" ) ); } logProvider.assertAtLeastOnce( AssertableLogProvider.inLog( containsString( "CommunityNeoServer" ) ).error( "Failed to start Neo4j on %s: %s", contestedAddress, format( "Address %s is already in use, cannot bind to it.", contestedAddress ) ) ); server.stop(); } }
@Test public void serverConfigShouldBeVisibleInJMX() throws Throwable { // Given String configValue = tempDir.newFile().getAbsolutePath(); server = CommunityServerBuilder.serverOnRandomPorts().withProperty( ServerSettings.run_directory.name(), configValue ).build(); // When server.start(); // Then ObjectName name = getObjectName( server.getDatabase().getGraph(), ConfigurationBean.CONFIGURATION_MBEAN_NAME ); String attr = getAttribute( name, ServerSettings.run_directory.name() ); assertThat( attr, equalTo( configValue ) ); }
@Test public void shouldRegisterASingleUri() throws Exception { WebServer webServer = mock( WebServer.class ); CommunityNeoServer neoServer = mock( CommunityNeoServer.class ); when( neoServer.baseUri() ).thenReturn( new URI( "http://localhost:7575" ) ); when( neoServer.getWebServer() ).thenReturn( webServer ); Map<String, String> params = new HashMap<>(); String managementPath = "/db/manage"; params.put( ServerSettings.management_api_path.name(), managementPath ); Config config = Config.defaults( params ); when( neoServer.getConfig() ).thenReturn( config ); ManagementApiModule module = new ManagementApiModule( webServer, config ); module.start(); verify( webServer ).addJAXRSClasses( anyListOf( String.class ), anyString(), any() ); } }
@Override protected Iterable<ServerModule> createServerModules() { return Iterables.mix( Arrays.asList( (ServerModule) new JMXManagementModule( this ) ), super.createServerModules() ); } }
@Override protected Pattern[] getUriWhitelist() { final List<Pattern> uriWhitelist = new ArrayList<>( Arrays.asList( super.getUriWhitelist() ) ); if ( !getConfig().get( HaSettings.ha_status_auth_enabled ) ) { uriWhitelist.add( Pattern.compile( "/db/manage/server/ha.*" ) ); } if ( !getConfig().get( CausalClusteringSettings.status_auth_enabled ) ) { uriWhitelist.add( Pattern.compile( "/db/manage/server/core.*" ) ); uriWhitelist.add( Pattern.compile( "/db/manage/server/read-replica.*" ) ); } return uriWhitelist.toArray( new Pattern[uriWhitelist.size()] ); } }
@Test public void shouldNotWhitelistConsoleService() throws Exception { // Given server = CommunityServerBuilder.serverOnRandomPorts() .withProperty( GraphDatabaseSettings.auth_enabled.name(), "true" ).build(); // When server.start(); // Then I should be able to access the console service HTTP.Response response = HTTP.GET( server.baseUri().resolve( "db/manage/server/console" ).toString() ); assertThat( response.status(), equalTo( 401 ) ); }
@Override public void start() { tempDirectory = createTempDirectory(); Map<String, String> opts = new HashMap<>(); // Neo4j 2.x opts.put(DBMS_SECURITY_AUTH_ENABLED, Boolean.FALSE.toString()); opts.put(ORG_NEO_4J_SERVER_WEBSERVER_ADDRESS, embeddedNeo4jConfiguration.getListenAddress()); opts.put(ORG_NEO_4J_SERVER_WEBSERVER_PORT, Integer.toString(embeddedNeo4jConfiguration.getHttpPort())); // Neo4j 2.x/3.x String sslDir = tempDirectory.toFile().getAbsolutePath() + "neo4j-home/"; opts.put(ServerSettings.tls_key_file.name(), sslDir + "/ssl/snakeoil.key"); opts.put(ServerSettings.tls_certificate_file.name(), sslDir + "/ssl/snakeoil.cert"); Config defaults = new Config(opts); // Config.empty().with(opts); FormattedLogProvider logProvider = FormattedLogProvider.withDefaultLogLevel(Level.INFO).toOutputStream(System.out); GraphDatabaseDependencies graphDatabaseDependencies = GraphDatabaseDependencies.newDependencies().userLogProvider(logProvider); Database.Factory factory = new Database.Factory() { @Override public Database newDatabase(Config config, GraphDatabaseFacadeFactory.Dependencies dependencies) { return new WrappedDatabase((GraphDatabaseAPI) graphDatabaseService); } }; communityNeoServer = new CommunityNeoServer(defaults, factory, graphDatabaseDependencies, logProvider); communityNeoServer.start(); }
@Override protected Iterable<ServerModule> createServerModules() { return Arrays.asList( createDBMSModule(), new RESTApiModule( webServer, getConfig(), getDependencyResolver().provideDependency( UsageData.class ), userLogProvider ), new ManagementApiModule( webServer, getConfig() ), new ThirdPartyJAXRSModule( webServer, getConfig(), userLogProvider, this ), new ConsoleModule( webServer, getConfig() ), new Neo4jBrowserModule( webServer ), createAuthorizationModule(), new SecurityRulesModule( webServer, getConfig(), userLogProvider ) ); }
@Override protected WebServer createWebServer() { NetworkConnectionTracker connectionTracker = getDependencyResolver().resolveDependency( NetworkConnectionTracker.class ); return new Jetty9WebServer( userLogProvider, getConfig(), connectionTracker ); }
protected AuthorizationModule createAuthorizationModule() { return new AuthorizationModule( webServer, authManagerSupplier, userLogProvider, getConfig(), getUriWhitelist() ); } }
@Test public void durationsAlwaysHaveUnitsInJMX() throws Throwable { // Given server = CommunityServerBuilder.serverOnRandomPorts() .withProperty( transaction_timeout.name(), "10" ) .build(); // When server.start(); // Then ObjectName name = getObjectName( server.getDatabase().getGraph(), ConfigurationBean.CONFIGURATION_MBEAN_NAME ); String attr = getAttribute( name, transaction_timeout.name() ); assertThat( attr, equalTo( "10000ms" ) ); }