diff --git a/community/server/src/main/java/org/neo4j/server/AbstractNeoServer.java b/community/server/src/main/java/org/neo4j/server/AbstractNeoServer.java index a4da1ea9fb945..8b81eae44fccd 100644 --- a/community/server/src/main/java/org/neo4j/server/AbstractNeoServer.java +++ b/community/server/src/main/java/org/neo4j/server/AbstractNeoServer.java @@ -440,9 +440,9 @@ private void configureWebServer() private int getMaxThreads() { - return configurator.configuration() - .get( ServerSettings.webserver_max_threads ) != null ? configurator.configuration() - .get( ServerSettings.webserver_max_threads ) : defaultMaxWebServerThreads(); + return configurator.configuration().get( ServerSettings.webserver_max_threads ) != null ? + configurator.configuration().get( ServerSettings.webserver_max_threads ) : + defaultMaxWebServerThreads(); } private int defaultMaxWebServerThreads() diff --git a/community/server/src/main/java/org/neo4j/server/CommunityNeoServer.java b/community/server/src/main/java/org/neo4j/server/CommunityNeoServer.java index f472b615e064e..b4e31265dca79 100644 --- a/community/server/src/main/java/org/neo4j/server/CommunityNeoServer.java +++ b/community/server/src/main/java/org/neo4j/server/CommunityNeoServer.java @@ -119,7 +119,7 @@ protected Iterable createServerModules() @Override protected WebServer createWebServer() { - return new Jetty9WebServer( dependencies.logging()); + return new Jetty9WebServer( dependencies.logging(), configurator.configuration()); } @Override diff --git a/community/server/src/main/java/org/neo4j/server/configuration/ServerSettings.java b/community/server/src/main/java/org/neo4j/server/configuration/ServerSettings.java index 06009585a7d65..9df30f787a58d 100644 --- a/community/server/src/main/java/org/neo4j/server/configuration/ServerSettings.java +++ b/community/server/src/main/java/org/neo4j/server/configuration/ServerSettings.java @@ -49,6 +49,14 @@ public interface ServerSettings { + @Description( "Maximum request header size" ) + public static final Setting maximum_request_header_size = + setting( "org.neo4j.server.webserver.max.request.header", INTEGER, "20480" ); + + @Description( "Maximum response header size" ) + public static final Setting maximum_response_header_size = + setting( "org.neo4j.server.webserver.max.response.header", INTEGER, "20480" ); + @Description( "Comma-seperated list of custom security rules for Neo4j to use." ) public static final Setting> security_rules = setting( "org.neo4j.server.rest.security_rules", STRING_LIST, EMPTY ); diff --git a/community/server/src/main/java/org/neo4j/server/rest/web/DatabaseActions.java b/community/server/src/main/java/org/neo4j/server/rest/web/DatabaseActions.java index d8f194393ff20..701df3d4cfc79 100644 --- a/community/server/src/main/java/org/neo4j/server/rest/web/DatabaseActions.java +++ b/community/server/src/main/java/org/neo4j/server/rest/web/DatabaseActions.java @@ -865,6 +865,8 @@ protected Representation underlyingObjectToObject( Relationship rel ) return new ListRepresentation( RepresentationType.RELATIONSHIP, results ); } + + public Pair getOrCreateIndexedNode( String indexName, String key, String value, Long nodeOrNull, Map properties ) throws BadInputException, NodeNotFoundException diff --git a/community/server/src/main/java/org/neo4j/server/rest/web/RestfulGraphDatabase.java b/community/server/src/main/java/org/neo4j/server/rest/web/RestfulGraphDatabase.java index 2f68cb69b9cf2..5664c54644c38 100644 --- a/community/server/src/main/java/org/neo4j/server/rest/web/RestfulGraphDatabase.java +++ b/community/server/src/main/java/org/neo4j/server/rest/web/RestfulGraphDatabase.java @@ -19,6 +19,8 @@ */ package org.neo4j.server.rest.web; +import org.apache.commons.configuration.Configuration; + import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; @@ -47,6 +49,7 @@ import org.neo4j.graphdb.NotFoundException; import org.neo4j.helpers.Function; import org.neo4j.helpers.Pair; +import org.neo4j.server.configuration.ServerSettings; import org.neo4j.server.rest.domain.EndNodeNotFoundException; import org.neo4j.server.rest.domain.EvaluationException; import org.neo4j.server.rest.domain.PropertySettingStrategy; @@ -155,6 +158,7 @@ public AmpersandSeparatedCollection( String path ) private static final String HEADER_TRANSACTION = "Transaction"; private final DatabaseActions actions; + private Configuration config; private final OutputFormat output; private final InputFormat input; @@ -169,11 +173,14 @@ private enum UniqueIndexType } public RestfulGraphDatabase( @Context InputFormat input, - @Context OutputFormat output, @Context DatabaseActions actions ) + @Context OutputFormat output, + @Context DatabaseActions actions, + @Context Configuration config ) { this.input = input; this.output = output; this.actions = actions; + this.config = config; } public OutputFormat getOutputFormat() @@ -974,6 +981,9 @@ public Response deleteRelationshipIndex( @PathParam("indexName") String indexNam public Response addToNodeIndex( @PathParam("indexName") String indexName, @QueryParam("unique") String unique, @QueryParam("uniqueness") String uniqueness, String postBody ) { + int otherHeaders = 512; + int maximumSizeInBytes = config.getInt( ServerSettings.maximum_response_header_size.name() ) - otherHeaders; + try { Map entityBody; @@ -983,18 +993,32 @@ public Response addToNodeIndex( @PathParam("indexName") String indexName, @Query { case GetOrCreate: entityBody = input.readMap( postBody, "key", "value" ); + + String getOrCreateValue = String.valueOf( entityBody.get( "value" ) ); + if ( getOrCreateValue.length() > maximumSizeInBytes ) + { + return valueTooBig(); + } + result = actions.getOrCreateIndexedNode( indexName, String.valueOf( entityBody.get( "key" ) ), - String.valueOf( entityBody.get( "value" ) ), extractNodeIdOrNull( getStringOrNull( + getOrCreateValue, extractNodeIdOrNull( getStringOrNull( entityBody, "uri" ) ), getMapOrNull( entityBody, "properties" ) ); return result.other() ? output.created( result.first() ) : output.okIncludeLocation( result.first () ); case CreateOrFail: entityBody = input.readMap( postBody, "key", "value" ); + + String createOrFailValue = String.valueOf( entityBody.get( "value" ) ); + if ( createOrFailValue.length() > maximumSizeInBytes ) + { + return valueTooBig(); + } + result = actions.getOrCreateIndexedNode( indexName, String.valueOf( entityBody.get( "key" ) ), - String.valueOf( entityBody.get( "value" ) ), extractNodeIdOrNull( getStringOrNull( + createOrFailValue, extractNodeIdOrNull( getStringOrNull( entityBody, "uri" ) ), getMapOrNull( entityBody, "properties" ) ); if ( result.other() ) { @@ -1020,9 +1044,16 @@ public Response addToNodeIndex( @PathParam("indexName") String indexName, @Query default: entityBody = input.readMap( postBody, "key", "value", "uri" ); + String value = String.valueOf( entityBody.get( "value" ) ); + + if ( value.length() > maximumSizeInBytes ) + { + return valueTooBig(); + } + return output.created( actions.addToNodeIndex( indexName, String.valueOf( entityBody.get( "key" ) ), - String.valueOf( entityBody.get( "value" ) ), extractNodeId( entityBody.get( "uri" ) + value, extractNodeId( entityBody.get( "uri" ) .toString() ) ) ); } @@ -1045,6 +1076,15 @@ public Response addToNodeIndex( @PathParam("indexName") String indexName, @Query } } + private Response valueTooBig() + { + return Response.status( 413 ).entity( String.format( + "The property value provided was too large. The maximum size is currently set to %d bytes. " + + "You can configure this by setting the '%s' property.", + config.getInt(ServerSettings.maximum_response_header_size.name()), + ServerSettings.maximum_response_header_size.name() ) ).build(); + } + @POST @Path(PATH_NAMED_RELATIONSHIP_INDEX) public Response addToRelationshipIndex( @PathParam("indexName") String indexName, diff --git a/community/server/src/main/java/org/neo4j/server/security/ssl/SslSocketConnectorFactory.java b/community/server/src/main/java/org/neo4j/server/security/ssl/SslSocketConnectorFactory.java index e539b1e0fa196..1fc27f239a652 100644 --- a/community/server/src/main/java/org/neo4j/server/security/ssl/SslSocketConnectorFactory.java +++ b/community/server/src/main/java/org/neo4j/server/security/ssl/SslSocketConnectorFactory.java @@ -23,12 +23,22 @@ import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.server.*; import org.eclipse.jetty.util.ssl.SslContextFactory; + +import org.neo4j.kernel.configuration.Config; import org.neo4j.server.web.HttpConnectorFactory; import org.neo4j.server.web.JettyThreadCalculator; public class SslSocketConnectorFactory extends HttpConnectorFactory { + private Config configuration; + + public SslSocketConnectorFactory( Config configuration ) + { + super(configuration); + this.configuration = configuration; + } + @Override protected HttpConfiguration createHttpConfig() { diff --git a/community/server/src/main/java/org/neo4j/server/web/HttpConnectorFactory.java b/community/server/src/main/java/org/neo4j/server/web/HttpConnectorFactory.java index f2e5cdd783133..35f0935c3f6e8 100644 --- a/community/server/src/main/java/org/neo4j/server/web/HttpConnectorFactory.java +++ b/community/server/src/main/java/org/neo4j/server/web/HttpConnectorFactory.java @@ -27,8 +27,19 @@ import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; +import org.neo4j.kernel.configuration.Config; +import org.neo4j.server.configuration.ServerSettings; + public class HttpConnectorFactory { + private Config configuration; + + public HttpConnectorFactory( Config config ) + { + + this.configuration = config; + } + public ConnectionFactory createHttpConnectionFactory() { return new HttpConnectionFactory( createHttpConfig() ); @@ -37,8 +48,8 @@ public ConnectionFactory createHttpConnectionFactory() protected HttpConfiguration createHttpConfig() { HttpConfiguration httpConfig = new HttpConfiguration(); - httpConfig.setRequestHeaderSize( 20 * 1024 ); - httpConfig.setResponseHeaderSize( 20 * 1024 ); + httpConfig.setRequestHeaderSize( configuration.get( ServerSettings.maximum_request_header_size) ); + httpConfig.setResponseHeaderSize( configuration.get( ServerSettings.maximum_response_header_size) ); return httpConfig; } diff --git a/community/server/src/main/java/org/neo4j/server/web/Jetty9WebServer.java b/community/server/src/main/java/org/neo4j/server/web/Jetty9WebServer.java index 34fcad6ec0c7e..408c1aa68879a 100644 --- a/community/server/src/main/java/org/neo4j/server/web/Jetty9WebServer.java +++ b/community/server/src/main/java/org/neo4j/server/web/Jetty9WebServer.java @@ -59,6 +59,8 @@ import org.eclipse.jetty.util.thread.QueuedThreadPool; import org.eclipse.jetty.webapp.WebAppContext; +import org.neo4j.kernel.configuration.Config; + import org.neo4j.kernel.impl.util.StringLogger; import org.neo4j.kernel.logging.ConsoleLogger; import org.neo4j.kernel.logging.Logging; @@ -126,16 +128,18 @@ public String getPathSpec() private int jettyMaxThreads; private boolean httpsEnabled = false; private KeyStoreInformation httpsCertificateInformation = null; - private final SslSocketConnectorFactory sslSocketFactory = new SslSocketConnectorFactory(); - private final HttpConnectorFactory connectorFactory = new HttpConnectorFactory(); + private final SslSocketConnectorFactory sslSocketFactory; + private final HttpConnectorFactory connectorFactory; private File requestLoggingConfiguration; private final ConsoleLogger console; private final StringLogger log; - public Jetty9WebServer( Logging logging ) + public Jetty9WebServer( Logging logging, Config config ) { this.console = logging.getConsoleLog( getClass() ); this.log = logging.getMessagesLog( getClass() ); + sslSocketFactory = new SslSocketConnectorFactory(config); + connectorFactory = new HttpConnectorFactory(config); } @Override diff --git a/community/server/src/test/java/org/neo4j/server/LegacyIndexIT.java b/community/server/src/test/java/org/neo4j/server/LegacyIndexIT.java new file mode 100644 index 0000000000000..6776586ef195e --- /dev/null +++ b/community/server/src/test/java/org/neo4j/server/LegacyIndexIT.java @@ -0,0 +1,124 @@ +/** + * Copyright (c) 2002-2015 "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.server; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.experimental.theories.DataPoints; +import org.junit.experimental.theories.Theories; +import org.junit.experimental.theories.Theory; +import org.junit.runner.RunWith; + +import java.io.IOException; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.util.Random; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; + +import org.neo4j.server.configuration.ServerSettings; +import org.neo4j.test.server.ExclusiveServerTestBase; +import org.neo4j.test.server.HTTP; + +import static org.hamcrest.CoreMatchers.startsWith; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import static org.neo4j.server.helpers.CommunityServerBuilder.server; +import static org.neo4j.test.server.HTTP.GET; +import static org.neo4j.test.server.HTTP.POST; +import static org.neo4j.test.server.HTTP.RawPayload.quotedJson; + +@RunWith(Theories.class) +public class LegacyIndexIT extends ExclusiveServerTestBase +{ + private CommunityNeoServer server; + + public static @DataPoints String[] candidates = {"", "get_or_create", "create_or_fail"}; + + @After + public void stopTheServer() + { + server.stop(); + } + + @Before + public void startServer() throws NoSuchAlgorithmException, KeyManagementException, IOException + { + server = server().withHttpsEnabled() + .withProperty( "remote_shell_enabled", "false" ) + .withProperty( "dbms.security.auth_enabled", "false" ) + .usingDatabaseDir( folder.cleanDirectory( name.getMethodName() ).getAbsolutePath() ) + .build(); + } + + @Theory + public void shouldRejectIndexValueLargerThanConfiguredSize(String uniqueness) throws Exception + { + //Given + server.getConfiguration().setProperty( ServerSettings.maximum_response_header_size.name(), "5000" ); + server.start(); + + // When + String nodeURI = HTTP.POST( server.baseUri().toString() + "db/data/node").header( "Location" ); + + Random r = new Random(); + String value = ""; + for ( int i = 0; i < 6_000; i++ ) + { + value += (char)(r.nextInt(26) + 'a'); + } + HTTP.Response response = + HTTP.POST( server.baseUri().toString() + "db/data/index/node/favorites?uniqueness=" + uniqueness, + quotedJson( "{ 'value': '" + value + " ', 'uri':'" + nodeURI + "', 'key': 'some-key' }" ) ); + + // Then + assertThat( response.status(), is( 413 ) ); + } + + @Theory + public void shouldNotRejectIndexValueThatIsJustSmallerThanConfiguredSize(String uniqueness) throws Exception + { + //Given + server.getConfiguration().setProperty( ServerSettings.maximum_response_header_size.name(), "5000" ); + server.start(); + + // When + String nodeURI = HTTP.POST( server.baseUri().toString() + "db/data/node").header( "Location" ); + + Random r = new Random(); + String value = ""; + for ( int i = 0; i < 4_000; i++ ) + { + value += (char)(r.nextInt(26) + 'a'); + } + HTTP.Response response = + HTTP.POST( server.baseUri().toString() + "db/data/index/node/favorites?uniqueness=" + uniqueness, + quotedJson( "{ 'value': '" + value + " ', 'uri':'" + nodeURI + "', 'key': 'some-key' }" ) ); + + // Then + assertThat( response.status(), is( 201 ) ); + } +} diff --git a/community/server/src/test/java/org/neo4j/server/rest/web/PagingTraversalTest.java b/community/server/src/test/java/org/neo4j/server/rest/web/PagingTraversalTest.java index 57625485538d0..eccc908bb00a6 100644 --- a/community/server/src/test/java/org/neo4j/server/rest/web/PagingTraversalTest.java +++ b/community/server/src/test/java/org/neo4j/server/rest/web/PagingTraversalTest.java @@ -20,11 +20,17 @@ package org.neo4j.server.rest.web; import java.io.IOException; +import java.math.BigDecimal; +import java.math.BigInteger; import java.net.URI; +import java.util.Iterator; +import java.util.List; +import java.util.Properties; import java.util.concurrent.TimeUnit; import javax.ws.rs.core.Response; +import org.apache.commons.configuration.Configuration; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -71,7 +77,7 @@ public void startDatabase() throws IOException leaseManager = new LeaseManager( new FakeClock() ); service = new RestfulGraphDatabase( new JsonFormat(), output, - new DatabaseActions( leaseManager, true, database.getGraph() ) ); + new DatabaseActions( leaseManager, true, database.getGraph() ), null ); service = new TransactionWrappingRestfulGraphDatabase( graph, service ); } diff --git a/community/server/src/test/java/org/neo4j/server/rest/web/RestfulGraphDatabasePagedTraversalTest.java b/community/server/src/test/java/org/neo4j/server/rest/web/RestfulGraphDatabasePagedTraversalTest.java index 745e648579e03..a185cc2f2ac16 100644 --- a/community/server/src/test/java/org/neo4j/server/rest/web/RestfulGraphDatabasePagedTraversalTest.java +++ b/community/server/src/test/java/org/neo4j/server/rest/web/RestfulGraphDatabasePagedTraversalTest.java @@ -70,7 +70,7 @@ public void startDatabase() throws IOException output = new EntityOutputFormat( new JsonFormat(), URI.create( BASE_URI ), null ); leaseManager = new LeaseManager( new FakeClock() ); service = new RestfulGraphDatabase( new JsonFormat(), output, - new DatabaseActions( leaseManager, true, database.getGraph() ) ); + new DatabaseActions( leaseManager, true, database.getGraph() ), null ); service = new TransactionWrappingRestfulGraphDatabase( graph, service ); } diff --git a/community/server/src/test/java/org/neo4j/server/rest/web/RestfulGraphDatabaseTest.java b/community/server/src/test/java/org/neo4j/server/rest/web/RestfulGraphDatabaseTest.java index 09fea67ef13a4..51cd2702c91eb 100644 --- a/community/server/src/test/java/org/neo4j/server/rest/web/RestfulGraphDatabaseTest.java +++ b/community/server/src/test/java/org/neo4j/server/rest/web/RestfulGraphDatabaseTest.java @@ -22,17 +22,20 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URI; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Random; import java.util.Set; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; +import org.apache.commons.configuration.Configuration; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; @@ -40,10 +43,15 @@ import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Transaction; +import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.graphdb.index.IndexHits; import org.neo4j.helpers.FakeClock; +import org.neo4j.helpers.collection.IteratorUtil; import org.neo4j.helpers.collection.MapUtil; import org.neo4j.kernel.InternalAbstractGraphDatabase; +import org.neo4j.kernel.configuration.Config; +import org.neo4j.server.configuration.ConfigWrappingConfiguration; +import org.neo4j.server.configuration.ServerSettings; import org.neo4j.server.database.Database; import org.neo4j.server.database.WrappedDatabase; import org.neo4j.server.rest.domain.GraphDbHelper; @@ -56,11 +64,13 @@ import org.neo4j.server.rest.repr.formats.JsonFormat; import org.neo4j.server.rest.web.DatabaseActions.RelationshipDirection; import org.neo4j.server.rest.web.RestfulGraphDatabase.AmpersandSeparatedCollection; +import org.neo4j.server.web.ServerInternalSettings; import org.neo4j.test.TestGraphDatabaseFactory; import org.neo4j.test.server.EntityOutputFormat; import static java.lang.Long.parseLong; +import static java.util.Arrays.asList; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.greaterThanOrEqualTo; import static org.hamcrest.Matchers.hasKey; @@ -93,8 +103,14 @@ public static void doBefore() throws IOException helper = new GraphDbHelper( database ); output = new EntityOutputFormat( new JsonFormat(), URI.create( BASE_URI ), null ); leaseManager = new LeaseManager( new FakeClock() ); + + Config config = new Config(); + config.registerSettingsClasses( asList( ServerSettings.class, ServerInternalSettings.class, + GraphDatabaseSettings.class )); + service = new RestfulGraphDatabase( new JsonFormat(), output, - new DatabaseActions( leaseManager, true, database.getGraph() ) ); + new DatabaseActions( leaseManager, true, database.getGraph() ), new ConfigWrappingConfiguration( + config ) ); service = new TransactionWrappingRestfulGraphDatabase( graph, service ); } @@ -1034,6 +1050,34 @@ public void shouldBeAbleToIndexNode() .getFirst( "Location" ) ); } + @Test + public void shouldNotBeAbleToIndexANodePropertyThatsTooLarge() + { + Response response = service.createNode( null ); + URI nodeUri = (URI) response.getMetadata() + .getFirst( "Location" ); + + Map postBody = new HashMap<>(); + postBody.put( "key", "mykey" ); + + char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray(); + + String largePropertyValue = ""; + Random random = new Random(); + for ( int i = 0; i < 30_000; i++ ) + { + largePropertyValue += alphabet[random.nextInt( alphabet.length )]; + } + + postBody.put( "value", largePropertyValue ); + postBody.put( "uri", nodeUri.toString() ); + + response = service.addToNodeIndex( "node", null, null, JsonHelper.createJsonFrom( postBody ) ); + + assertEquals( 413, response.getStatus() ); + } + + @Test public void shouldBeAbleToIndexNodeUniquely() { diff --git a/community/server/src/test/java/org/neo4j/server/rest/web/TransactionWrappingRestfulGraphDatabase.java b/community/server/src/test/java/org/neo4j/server/rest/web/TransactionWrappingRestfulGraphDatabase.java index ae8a932058377..9d1676026193b 100644 --- a/community/server/src/test/java/org/neo4j/server/rest/web/TransactionWrappingRestfulGraphDatabase.java +++ b/community/server/src/test/java/org/neo4j/server/rest/web/TransactionWrappingRestfulGraphDatabase.java @@ -38,7 +38,7 @@ public class TransactionWrappingRestfulGraphDatabase extends RestfulGraphDatabas public TransactionWrappingRestfulGraphDatabase( InternalAbstractGraphDatabase graph, RestfulGraphDatabase restfulGraphDatabase ) { - super( null, null, null ); + super( null, null, null, null ); this.graph = graph; this.restfulGraphDatabase = restfulGraphDatabase; diff --git a/community/server/src/test/java/org/neo4j/server/web/JettyThreadCalculatorTest.java b/community/server/src/test/java/org/neo4j/server/web/JettyThreadCalculatorTest.java index ac0aa7c54a29c..629f3cd76e361 100644 --- a/community/server/src/test/java/org/neo4j/server/web/JettyThreadCalculatorTest.java +++ b/community/server/src/test/java/org/neo4j/server/web/JettyThreadCalculatorTest.java @@ -55,4 +55,4 @@ public void shouldHaveCorrectAmountOfThreads() assertEquals("Wrong minThreads value for 64 cores", 36, jtc.getMinThreads()); assertEquals("Wrong capacity value for 64 cores", 3120000, jtc.getMaxCapacity()); } -} \ No newline at end of file +} diff --git a/community/server/src/test/java/org/neo4j/server/web/JettyThreadLimitTest.java b/community/server/src/test/java/org/neo4j/server/web/JettyThreadLimitTest.java index 43bb1942ba1af..9111f2234aa6f 100644 --- a/community/server/src/test/java/org/neo4j/server/web/JettyThreadLimitTest.java +++ b/community/server/src/test/java/org/neo4j/server/web/JettyThreadLimitTest.java @@ -32,6 +32,8 @@ import static org.neo4j.test.Mute.muteAll; +import org.neo4j.kernel.configuration.Config; + public class JettyThreadLimitTest { @Rule @@ -40,7 +42,7 @@ public class JettyThreadLimitTest @Test public void shouldHaveConfigurableJettyThreadPoolSize() throws Exception { - Jetty9WebServer server = new Jetty9WebServer( DevNullLoggingService.DEV_NULL ); + Jetty9WebServer server = new Jetty9WebServer( DevNullLoggingService.DEV_NULL, new Config() ); int numCores = 1; int configuredMaxThreads = 12; // 12 is the new min max Threads value, for one core int acceptorThreads = 1; // In this configuration, 1 thread will become an acceptor... diff --git a/community/server/src/test/java/org/neo4j/server/web/TestJetty9WebServer.java b/community/server/src/test/java/org/neo4j/server/web/TestJetty9WebServer.java index 68aea5b559bc6..2d993d54b6ce5 100644 --- a/community/server/src/test/java/org/neo4j/server/web/TestJetty9WebServer.java +++ b/community/server/src/test/java/org/neo4j/server/web/TestJetty9WebServer.java @@ -28,6 +28,7 @@ import org.junit.Test; import org.neo4j.kernel.GraphDatabaseDependencies; +import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.impl.util.TestLogging; import org.neo4j.kernel.logging.DevNullLoggingService; import org.neo4j.kernel.logging.SystemOutLogging; @@ -50,7 +51,7 @@ public void shouldBeAbleToUsePortZero() throws IOException { TestLogging logging = new TestLogging(); - Jetty9WebServer webServer = new Jetty9WebServer( logging ); + Jetty9WebServer webServer = new Jetty9WebServer( logging, new Config() ); webServer.setPort( 0 ); @@ -62,7 +63,7 @@ public void shouldBeAbleToUsePortZero() throws IOException @Test public void shouldBeAbleToRestart() throws Throwable { - Jetty9WebServer server = new Jetty9WebServer( new SystemOutLogging() ); + Jetty9WebServer server = new Jetty9WebServer( new SystemOutLogging(),new Config() ); try { server.setAddress( "127.0.0.1" ); @@ -111,7 +112,7 @@ public void shouldBeAbleToSetExecutionLimit() throws Throwable @Test public void shouldStopCleanlyEvenWhenItHasntBeenStarted() { - new Jetty9WebServer( DevNullLoggingService.DEV_NULL ).stop(); + new Jetty9WebServer( DevNullLoggingService.DEV_NULL, null ).stop(); } /* diff --git a/community/server/src/test/java/org/neo4j/test/server/HTTP.java b/community/server/src/test/java/org/neo4j/test/server/HTTP.java index f7f2b3341ef28..ed921112db2df 100644 --- a/community/server/src/test/java/org/neo4j/test/server/HTTP.java +++ b/community/server/src/test/java/org/neo4j/test/server/HTTP.java @@ -19,6 +19,11 @@ */ package org.neo4j.test.server; +import com.sun.jersey.api.client.Client; +import com.sun.jersey.api.client.ClientRequest; +import com.sun.jersey.api.client.ClientResponse; +import org.codehaus.jackson.JsonNode; + import java.net.URI; import java.util.Collections; import java.util.HashMap; @@ -26,22 +31,15 @@ import java.util.Map; import javax.ws.rs.core.MediaType; -import com.sun.jersey.api.client.Client; -import com.sun.jersey.api.client.ClientRequest; -import com.sun.jersey.api.client.ClientResponse; -import org.codehaus.jackson.JsonNode; - import org.neo4j.server.rest.domain.JsonHelper; import org.neo4j.server.rest.domain.JsonParseException; import static java.util.Collections.unmodifiableMap; - import static org.hamcrest.Matchers.allOf; import static org.hamcrest.Matchers.anyOf; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertThat; - import static org.neo4j.helpers.collection.IteratorUtil.singleOrNull; import static org.neo4j.helpers.collection.MapUtil.stringMap; import static org.neo4j.server.rest.domain.JsonHelper.createJsonFrom;