From efdf8bdb2e8e1784187faf75d98a85ba4c00a7ba Mon Sep 17 00:00:00 2001 From: Zhen Date: Tue, 15 Nov 2016 14:02:44 +0100 Subject: [PATCH 1/2] Move server info into result summary Replaced session.server with resultSummary.server.version Replaced session.address with resultSummary.server.address --- .../internal/InternalStatementResult.java | 10 ++- .../neo4j/driver/internal/NetworkSession.java | 6 -- .../neo4j/driver/internal/RoutingDriver.java | 3 +- .../internal/RoutingNetworkSession.java | 6 -- .../net/ConcurrencyGuardingConnection.java | 7 +- .../driver/internal/net/SocketConnection.java | 36 ++++++-- .../internal/net/SocketResponseHandler.java | 12 +-- .../net/pooling/PooledConnection.java | 10 ++- .../pooling/PooledConnectionValidator.java | 2 +- .../neo4j/driver/internal/spi/Collector.java | 6 +- .../neo4j/driver/internal/spi/Connection.java | 9 +- .../internal/summary/InternalServerInfo.java | 51 ++++++++++++ .../internal/summary/SummaryBuilder.java | 14 +++- .../java/org/neo4j/driver/v1/Session.java | 6 -- .../driver/v1/summary/ResultSummary.java | 6 ++ .../neo4j/driver/v1/summary/ServerInfo.java | 39 +++++++++ .../driver/internal/InternalBuilderTest.java | 29 ++++++- .../driver/internal/RoutingDriverTest.java | 3 +- .../internal/RoutingNetworkSessionTest.java | 37 +++------ .../internal/RoutingTransactionTest.java | 22 ++--- .../internal/cluster/ClusterTopology.java | 10 +-- .../internal/cluster/LoadBalancerTest.java | 34 ++++---- .../internal/net/SocketConnectionTest.java | 82 +++++++++++++++++++ .../internal/spi/StubConnectionPool.java | 2 +- .../driver/v1/integration/BookmarkIT.java | 8 +- .../driver/v1/integration/SummaryIT.java | 30 ++++++- .../driver/v1/util/TestNeo4jSession.java | 6 -- 27 files changed, 355 insertions(+), 131 deletions(-) create mode 100644 driver/src/main/java/org/neo4j/driver/internal/summary/InternalServerInfo.java create mode 100644 driver/src/main/java/org/neo4j/driver/v1/summary/ServerInfo.java create mode 100644 driver/src/test/java/org/neo4j/driver/internal/net/SocketConnectionTest.java diff --git a/driver/src/main/java/org/neo4j/driver/internal/InternalStatementResult.java b/driver/src/main/java/org/neo4j/driver/internal/InternalStatementResult.java index d28eabe25b..72cd39ad37 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/InternalStatementResult.java +++ b/driver/src/main/java/org/neo4j/driver/internal/InternalStatementResult.java @@ -24,8 +24,8 @@ import java.util.List; import java.util.Queue; -import org.neo4j.driver.internal.spi.Connection; import org.neo4j.driver.internal.spi.Collector; +import org.neo4j.driver.internal.spi.Connection; import org.neo4j.driver.internal.summary.SummaryBuilder; import org.neo4j.driver.v1.Record; import org.neo4j.driver.v1.Statement; @@ -37,6 +37,7 @@ import org.neo4j.driver.v1.summary.Plan; import org.neo4j.driver.v1.summary.ProfiledPlan; import org.neo4j.driver.v1.summary.ResultSummary; +import org.neo4j.driver.v1.summary.ServerInfo; import org.neo4j.driver.v1.summary.StatementType; import org.neo4j.driver.v1.summary.SummaryCounters; import org.neo4j.driver.v1.util.Function; @@ -61,7 +62,7 @@ public class InternalStatementResult implements StatementResult { this.connection = connection; this.runResponseCollector = newRunResponseCollector(); - this.pullAllResponseCollector = newStreamResponseCollector( transaction, statement ); + this.pullAllResponseCollector = newStreamResponseCollector( transaction, statement, connection.server() ); } private Collector newRunResponseCollector() @@ -91,9 +92,10 @@ public void resultAvailableAfter( long l ) }; } - private Collector newStreamResponseCollector( final ExplicitTransaction transaction, final Statement statement ) + private Collector newStreamResponseCollector( final ExplicitTransaction transaction, final Statement statement, + final ServerInfo serverInfo ) { - final SummaryBuilder summaryBuilder = new SummaryBuilder( statement ); + final SummaryBuilder summaryBuilder = new SummaryBuilder( statement, serverInfo ); return new Collector.NoOperationCollector() { diff --git a/driver/src/main/java/org/neo4j/driver/internal/NetworkSession.java b/driver/src/main/java/org/neo4j/driver/internal/NetworkSession.java index 3eab5519af..6f1f0fcd58 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/NetworkSession.java +++ b/driver/src/main/java/org/neo4j/driver/internal/NetworkSession.java @@ -194,12 +194,6 @@ private void closeConnection() connection.close(); } - @Override - public String server() - { - return connection.server(); - } - @Override public Transaction beginTransaction() { diff --git a/driver/src/main/java/org/neo4j/driver/internal/RoutingDriver.java b/driver/src/main/java/org/neo4j/driver/internal/RoutingDriver.java index 28270ca86d..1998f0ee21 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/RoutingDriver.java +++ b/driver/src/main/java/org/neo4j/driver/internal/RoutingDriver.java @@ -26,7 +26,6 @@ import org.neo4j.driver.internal.spi.ConnectionPool; import org.neo4j.driver.internal.util.Clock; import org.neo4j.driver.v1.AccessMode; -import org.neo4j.driver.v1.Config; import org.neo4j.driver.v1.Logging; import org.neo4j.driver.v1.Session; import org.neo4j.driver.v1.exceptions.ClientException; @@ -70,7 +69,7 @@ public Session session() public Session session( final AccessMode mode ) { Connection connection = acquireConnection( mode ); - return new RoutingNetworkSession( new NetworkSession( connection ), mode, connection.address(), loadBalancer ); + return new RoutingNetworkSession( new NetworkSession( connection ), mode, connection.boltServerAddress(), loadBalancer ); } private Connection acquireConnection( AccessMode role ) diff --git a/driver/src/main/java/org/neo4j/driver/internal/RoutingNetworkSession.java b/driver/src/main/java/org/neo4j/driver/internal/RoutingNetworkSession.java index c33c7315c7..bc5f1f0d30 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/RoutingNetworkSession.java +++ b/driver/src/main/java/org/neo4j/driver/internal/RoutingNetworkSession.java @@ -154,12 +154,6 @@ public void close() } } - @Override - public String server() - { - return delegate.server(); - } - public BoltServerAddress address() { return address; diff --git a/driver/src/main/java/org/neo4j/driver/internal/net/ConcurrencyGuardingConnection.java b/driver/src/main/java/org/neo4j/driver/internal/net/ConcurrencyGuardingConnection.java index 36a1665007..f8b95227eb 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/net/ConcurrencyGuardingConnection.java +++ b/driver/src/main/java/org/neo4j/driver/internal/net/ConcurrencyGuardingConnection.java @@ -26,6 +26,7 @@ import org.neo4j.driver.v1.Logger; import org.neo4j.driver.v1.Value; import org.neo4j.driver.v1.exceptions.ClientException; +import org.neo4j.driver.v1.summary.ServerInfo; /** * This class ensures there can only ever be one thread using a connection at @@ -231,15 +232,15 @@ private void markAsInUse() } @Override - public String server() + public ServerInfo server() { return delegate.server(); } @Override - public BoltServerAddress address() + public BoltServerAddress boltServerAddress() { - return delegate.address(); + return delegate.boltServerAddress(); } @Override diff --git a/driver/src/main/java/org/neo4j/driver/internal/net/SocketConnection.java b/driver/src/main/java/org/neo4j/driver/internal/net/SocketConnection.java index 1cbf4a252d..8723e8535d 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/net/SocketConnection.java +++ b/driver/src/main/java/org/neo4j/driver/internal/net/SocketConnection.java @@ -32,11 +32,13 @@ import org.neo4j.driver.internal.security.SecurityPlan; import org.neo4j.driver.internal.spi.Collector; import org.neo4j.driver.internal.spi.Connection; +import org.neo4j.driver.internal.summary.InternalServerInfo; import org.neo4j.driver.v1.Logger; import org.neo4j.driver.v1.Logging; import org.neo4j.driver.v1.Value; import org.neo4j.driver.v1.exceptions.ClientException; import org.neo4j.driver.v1.exceptions.Neo4jException; +import org.neo4j.driver.v1.summary.ServerInfo; import static java.lang.String.format; import static org.neo4j.driver.internal.messaging.AckFailureMessage.ACK_FAILURE; @@ -50,7 +52,7 @@ public class SocketConnection implements Connection private final SocketResponseHandler responseHandler; private AtomicBoolean isInterrupted = new AtomicBoolean( false ); private AtomicBoolean isAckFailureMuted = new AtomicBoolean( false ); - private final Collector.InitCollector initCollector = new Collector.InitCollector(); + private InternalServerInfo serverInfo; private final SocketClient socket; @@ -59,6 +61,7 @@ public class SocketConnection implements Connection public SocketConnection( BoltServerAddress address, SecurityPlan securityPlan, Logging logging ) { this.logger = logging.getLog( format( "conn-%s", UUID.randomUUID().toString() ) ); + this.socket = new SocketClient( address, securityPlan, logger ); if( logger.isDebugEnabled() ) { @@ -69,15 +72,34 @@ public SocketConnection( BoltServerAddress address, SecurityPlan securityPlan, L this.responseHandler = new SocketResponseHandler(); } - this.socket = new SocketClient( address, securityPlan, logger ); - socket.start(); + this.socket.start(); + } + + // for mocked socket testing + SocketConnection( SocketClient socket, Logger logger ) + { + this.socket = socket; + this.logger = logger; + + if( logger.isDebugEnabled() ) + { + this.responseHandler = new LoggingResponseHandler( logger ); + } + else + { + this.responseHandler = new SocketResponseHandler(); + } + + this.socket.start(); } @Override public void init( String clientName, Map authToken ) { + Collector.InitCollector initCollector = new Collector.InitCollector(); queueMessage( new InitMessage( clientName, authToken ), initCollector ); sync(); + this.serverInfo = new InternalServerInfo( socket.address(), initCollector.server() ); } @Override @@ -267,15 +289,15 @@ public boolean isAckFailureMuted() } @Override - public String server() + public ServerInfo server() { - return initCollector.server( ); + return this.serverInfo; } @Override - public BoltServerAddress address() + public BoltServerAddress boltServerAddress() { - return this.socket.address(); + return this.serverInfo.boltServerAddress(); } @Override diff --git a/driver/src/main/java/org/neo4j/driver/internal/net/SocketResponseHandler.java b/driver/src/main/java/org/neo4j/driver/internal/net/SocketResponseHandler.java index b2289fdff6..3e7edd1db6 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/net/SocketResponseHandler.java +++ b/driver/src/main/java/org/neo4j/driver/internal/net/SocketResponseHandler.java @@ -84,24 +84,24 @@ public void handleFailureMessage( String code, String message ) public void handleSuccessMessage( Map meta ) { Collector collector = collectors.remove(); - collectServer( collector, meta.get( "server" )); + collectServerVersion( collector, meta.get( "server" ) ); collectFields( collector, meta.get( "fields" ) ); collectType( collector, meta.get( "type" ) ); collectStatistics( collector, meta.get( "stats" ) ); collectPlan( collector, meta.get( "plan" ) ); collectProfile( collector, meta.get( "profile" ) ); collectNotifications( collector, meta.get( "notifications" ) ); - collectResultAvailableAfter( collector, meta.get("result_available_after")); - collectResultConsumedAfter( collector, meta.get("result_consumed_after")); + collectResultAvailableAfter( collector, meta.get("result_available_after") ); + collectResultConsumedAfter( collector, meta.get("result_consumed_after") ); collectBookmark( collector, meta.get( "bookmark" ) ); collector.doneSuccess(); } - private void collectServer( Collector collector, Value server ) + private void collectServerVersion( Collector collector, Value serverVersion ) { - if (server != null) + if ( serverVersion != null ) { - collector.server( server.asString() ); + collector.serverVersion( serverVersion.asString() ); } } diff --git a/driver/src/main/java/org/neo4j/driver/internal/net/pooling/PooledConnection.java b/driver/src/main/java/org/neo4j/driver/internal/net/pooling/PooledConnection.java index 4ef39b3a74..7ecf8fc16f 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/net/pooling/PooledConnection.java +++ b/driver/src/main/java/org/neo4j/driver/internal/net/pooling/PooledConnection.java @@ -28,6 +28,8 @@ import org.neo4j.driver.v1.Logger; import org.neo4j.driver.v1.Value; import org.neo4j.driver.v1.exceptions.Neo4jException; +import org.neo4j.driver.v1.summary.ServerInfo; + /** * The state of a pooledConnection from a pool point of view could be one of the following: * Created, @@ -233,15 +235,15 @@ public boolean isAckFailureMuted() } @Override - public String server() + public ServerInfo server() { return delegate.server(); } @Override - public BoltServerAddress address() + public BoltServerAddress boltServerAddress() { - return delegate.address(); + return delegate.boltServerAddress(); } @Override @@ -257,7 +259,7 @@ public void dispose() /** * If something goes wrong with the delegate, we want to figure out if this "wrong" is something that means - * the connection is screwed (and thus should be evicted from the pool), or if it's something that we can + * the connection cannot be reused (and thus should be evicted from the pool), or if it's something that we can * safely recover from. * @param e the exception the delegate threw */ diff --git a/driver/src/main/java/org/neo4j/driver/internal/net/pooling/PooledConnectionValidator.java b/driver/src/main/java/org/neo4j/driver/internal/net/pooling/PooledConnectionValidator.java index bc4cf3ad8a..a99bb481cb 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/net/pooling/PooledConnectionValidator.java +++ b/driver/src/main/java/org/neo4j/driver/internal/net/pooling/PooledConnectionValidator.java @@ -43,7 +43,7 @@ public Boolean apply( PooledConnection pooledConnection ) { // once the pooledConn has marked to have unrecoverable errors, there is no way to remove the error // and we should close the conn without bothering to reset the conn at all - return pool.hasAddress( pooledConnection.address() ) && + return pool.hasAddress( pooledConnection.boltServerAddress() ) && !pooledConnection.hasUnrecoverableErrors() && reset( pooledConnection ) && (pooledConnection.idleTime() <= poolSettings.idleTimeBeforeConnectionTest() || diff --git a/driver/src/main/java/org/neo4j/driver/internal/spi/Collector.java b/driver/src/main/java/org/neo4j/driver/internal/spi/Collector.java index adf2829193..0736b9863d 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/spi/Collector.java +++ b/driver/src/main/java/org/neo4j/driver/internal/spi/Collector.java @@ -54,7 +54,7 @@ public void doneIgnored() } @Override - public void server( String server ) + public void serverVersion( String server ) { this.server = server; } @@ -160,7 +160,7 @@ public void resultAvailableAfter( long l ) {} public void resultConsumedAfter( long l ) {} @Override - public void server( String server ){} + public void serverVersion( String server ){} } // TODO: This should be modified to simply have head/record/tail methods @@ -193,6 +193,6 @@ public void server( String server ){} void resultConsumedAfter( long l ); - void server( String server ); + void serverVersion( String server ); } diff --git a/driver/src/main/java/org/neo4j/driver/internal/spi/Connection.java b/driver/src/main/java/org/neo4j/driver/internal/spi/Connection.java index 8dcc58cdf6..994580215e 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/spi/Connection.java +++ b/driver/src/main/java/org/neo4j/driver/internal/spi/Connection.java @@ -23,6 +23,7 @@ import org.neo4j.driver.internal.net.BoltServerAddress; import org.neo4j.driver.v1.Logger; import org.neo4j.driver.v1.Value; +import org.neo4j.driver.v1.summary.ServerInfo; /** * A connection is an abstraction provided by an underlying transport implementation, @@ -121,15 +122,15 @@ public interface Connection extends AutoCloseable boolean isAckFailureMuted(); /** - * Returns the version of the server connected to. - * @return The version of the server connected to. + * Returns the basic information of the server connected to. + * @return The basic information of the server connected to. */ - String server(); + ServerInfo server(); /** * Returns the BoltServerAddress connected to */ - BoltServerAddress address(); + BoltServerAddress boltServerAddress(); /** * Returns the logger of this connection diff --git a/driver/src/main/java/org/neo4j/driver/internal/summary/InternalServerInfo.java b/driver/src/main/java/org/neo4j/driver/internal/summary/InternalServerInfo.java new file mode 100644 index 0000000000..378be2daf3 --- /dev/null +++ b/driver/src/main/java/org/neo4j/driver/internal/summary/InternalServerInfo.java @@ -0,0 +1,51 @@ +/** + * Copyright (c) 2002-2016 "Neo Technology," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.neo4j.driver.internal.summary; + +import org.neo4j.driver.internal.net.BoltServerAddress; +import org.neo4j.driver.v1.summary.ServerInfo; + +public class InternalServerInfo implements ServerInfo +{ + private BoltServerAddress address; + private String version; + + public InternalServerInfo(BoltServerAddress address, String version) + { + this.address = address; + this.version = version; + } + + public BoltServerAddress boltServerAddress() + { + return this.address; + } + + @Override + public String address() + { + return this.address.toString(); + } + + @Override + public String version() + { + return version; + } +} diff --git a/driver/src/main/java/org/neo4j/driver/internal/summary/SummaryBuilder.java b/driver/src/main/java/org/neo4j/driver/internal/summary/SummaryBuilder.java index 15bd3e1ba1..8f855fe23e 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/summary/SummaryBuilder.java +++ b/driver/src/main/java/org/neo4j/driver/internal/summary/SummaryBuilder.java @@ -31,12 +31,14 @@ import org.neo4j.driver.v1.summary.Plan; import org.neo4j.driver.v1.summary.ProfiledPlan; import org.neo4j.driver.v1.summary.ResultSummary; +import org.neo4j.driver.v1.summary.ServerInfo; import org.neo4j.driver.v1.summary.StatementType; import org.neo4j.driver.v1.summary.SummaryCounters; public class SummaryBuilder implements Collector { private final Statement statement; + private final ServerInfo serverInfo; private StatementType type = null; private SummaryCounters statistics = null; @@ -46,9 +48,10 @@ public class SummaryBuilder implements Collector private long resultAvailableAfter = -1L; private long resultConsumedAfter = -1L; - public SummaryBuilder( Statement statement ) + public SummaryBuilder( Statement statement, ServerInfo serverInfo ) { this.statement = statement; + this.serverInfo = serverInfo; } @Override @@ -170,9 +173,10 @@ public void resultConsumedAfter( long l ) } @Override - public void server( String server ) + public void serverVersion( String server ) { // intentionally empty + // collected in initCollector } public ResultSummary build() @@ -238,6 +242,12 @@ public long resultConsumedAfter( TimeUnit timeUnit ) { return timeUnit.convert( resultConsumedAfter, TimeUnit.MILLISECONDS ); } + + @Override + public ServerInfo server() + { + return serverInfo; + } }; } } diff --git a/driver/src/main/java/org/neo4j/driver/v1/Session.java b/driver/src/main/java/org/neo4j/driver/v1/Session.java index bcd7aa0857..1286c6fa8d 100644 --- a/driver/src/main/java/org/neo4j/driver/v1/Session.java +++ b/driver/src/main/java/org/neo4j/driver/v1/Session.java @@ -104,10 +104,4 @@ public interface Session extends Resource, StatementRunner */ @Override void close(); - - /** - * Returns a string telling which version of the server the session is connected to. - * @return The server version of null if not available. - */ - String server(); } diff --git a/driver/src/main/java/org/neo4j/driver/v1/summary/ResultSummary.java b/driver/src/main/java/org/neo4j/driver/v1/summary/ResultSummary.java index a3128c2e5a..04e62abd18 100644 --- a/driver/src/main/java/org/neo4j/driver/v1/summary/ResultSummary.java +++ b/driver/src/main/java/org/neo4j/driver/v1/summary/ResultSummary.java @@ -107,4 +107,10 @@ public interface ResultSummary * @return The time it took for the server to consume the result in the provided time unit. */ long resultConsumedAfter( TimeUnit unit ); + + /** + * The basic information of the server where the result is obtained from + * @return basic information of the server where the result is obtain from + */ + ServerInfo server(); } diff --git a/driver/src/main/java/org/neo4j/driver/v1/summary/ServerInfo.java b/driver/src/main/java/org/neo4j/driver/v1/summary/ServerInfo.java new file mode 100644 index 0000000000..ec94b5533f --- /dev/null +++ b/driver/src/main/java/org/neo4j/driver/v1/summary/ServerInfo.java @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2002-2016 "Neo Technology," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.neo4j.driver.v1.summary; + +/** + * Provides some basic information of the server where the result is obtained from. + */ +public interface ServerInfo +{ + + /** + * Returns a string telling the address of the server the query was executed. + * @return The address of the server the query was executed. + */ + String address(); + + /** + * Returns a string telling which version of the server the query was executed. + * @return The server version of null if not available. + */ + String version(); +} diff --git a/driver/src/test/java/org/neo4j/driver/internal/InternalBuilderTest.java b/driver/src/test/java/org/neo4j/driver/internal/InternalBuilderTest.java index e6addddc30..eeee67b8a2 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/InternalBuilderTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/InternalBuilderTest.java @@ -20,10 +20,15 @@ import org.junit.Test; +import java.net.URI; + +import org.neo4j.driver.internal.net.BoltServerAddress; +import org.neo4j.driver.internal.summary.InternalServerInfo; import org.neo4j.driver.internal.summary.InternalSummaryCounters; import org.neo4j.driver.internal.summary.SummaryBuilder; import org.neo4j.driver.v1.summary.ResultSummary; import org.neo4j.driver.v1.Statement; +import org.neo4j.driver.v1.summary.ServerInfo; import org.neo4j.driver.v1.summary.SummaryCounters; import static org.hamcrest.CoreMatchers.equalTo; @@ -38,7 +43,7 @@ public class InternalBuilderTest public void shouldReturnEmptyStatisticsIfNotProvided() throws Throwable { // Given - SummaryBuilder builder = new SummaryBuilder( mock( Statement.class ) ); + SummaryBuilder builder = new SummaryBuilder( mock( Statement.class ), mock( ServerInfo.class ) ); // When ResultSummary summary = builder.build(); @@ -53,7 +58,7 @@ public void shouldReturnEmptyStatisticsIfNotProvided() throws Throwable public void shouldReturnNullIfNoPlanProfileProvided() throws Throwable { // Given - SummaryBuilder builder = new SummaryBuilder( mock( Statement.class ) ); + SummaryBuilder builder = new SummaryBuilder( mock( Statement.class ), mock( ServerInfo.class ) ); // When ResultSummary summary = builder.build(); @@ -70,7 +75,7 @@ public void shouldReturnNullIfNoPlanProfileProvided() throws Throwable public void shouldReturnNullIfNoStatementTypeProvided() throws Throwable { // Given - SummaryBuilder builder = new SummaryBuilder( mock( Statement.class ) ); + SummaryBuilder builder = new SummaryBuilder( mock( Statement.class ), mock( ServerInfo.class ) ); // When ResultSummary summary = builder.build(); @@ -78,4 +83,22 @@ public void shouldReturnNullIfNoStatementTypeProvided() throws Throwable // Then assertNull( summary.statementType() ); } + + + @Test + public void shouldObtainStatementAndServerInfoFromSummaryBuilder() throws Throwable + { + // Given + SummaryBuilder builder = new SummaryBuilder( new Statement( "This is a test statement"), new + InternalServerInfo( BoltServerAddress.from( URI.create( "http://neo4j.com" ) ), + "super-awesome" ) ); + + // When + ResultSummary summary = builder.build(); + + // Then + assertThat( summary.statement().text(), equalTo( "This is a test statement" ) ); + assertThat( summary.server().address(), equalTo( "neo4j.com:7687" ) ); + assertThat( summary.server().version(), equalTo( "super-awesome" ) ); + } } diff --git a/driver/src/test/java/org/neo4j/driver/internal/RoutingDriverTest.java b/driver/src/test/java/org/neo4j/driver/internal/RoutingDriverTest.java index dd22b38123..e1dffe4b57 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/RoutingDriverTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/RoutingDriverTest.java @@ -37,7 +37,6 @@ import org.neo4j.driver.internal.util.FakeClock; import org.neo4j.driver.v1.AccessMode; import org.neo4j.driver.v1.Config; -import org.neo4j.driver.v1.Driver; import org.neo4j.driver.v1.EventLogger; import org.neo4j.driver.v1.GraphDatabase; import org.neo4j.driver.v1.Logging; @@ -375,7 +374,7 @@ public Connection answer( InvocationOnMock invocationOnMock ) throws Throwable BoltServerAddress address = invocationOnMock.getArgumentAt( 0, BoltServerAddress.class ); Connection connection = mock( Connection.class ); when( connection.isOpen() ).thenReturn( true ); - when( connection.address() ).thenReturn( address ); + when( connection.boltServerAddress() ).thenReturn( address ); doAnswer( withKeys( "ttl", "servers" ) ).when( connection ).run( eq( GET_SERVERS ), eq( Collections.emptyMap() ), diff --git a/driver/src/test/java/org/neo4j/driver/internal/RoutingNetworkSessionTest.java b/driver/src/test/java/org/neo4j/driver/internal/RoutingNetworkSessionTest.java index 03f3a334cf..4015714941 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/RoutingNetworkSessionTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/RoutingNetworkSessionTest.java @@ -54,7 +54,7 @@ public class RoutingNetworkSessionTest public void setUp() { connection = mock( Connection.class ); - when( connection.address() ).thenReturn( LOCALHOST ); + when( connection.boltServerAddress() ).thenReturn( LOCALHOST ); when( connection.isOpen() ).thenReturn( true ); onError = mock( RoutingErrorHandler.class ); } @@ -68,7 +68,7 @@ public void shouldHandleConnectionFailures() when( connection ).run( anyString(), any( Map.class ), any( Collector.class ) ); RoutingNetworkSession result = - new RoutingNetworkSession( new NetworkSession( connection ), AccessMode.WRITE, connection.address(), + new RoutingNetworkSession( new NetworkSession( connection ), AccessMode.WRITE, connection.boltServerAddress(), onError ); // When @@ -95,7 +95,7 @@ public void shouldHandleWriteFailuresInWriteAccessMode() doThrow( new ClientException( "Neo.ClientError.Cluster.NotALeader", "oh no!" ) ). when( connection ).run( anyString(), any( Map.class ), any( Collector.class ) ); RoutingNetworkSession session = - new RoutingNetworkSession( new NetworkSession(connection), AccessMode.WRITE, connection.address(), + new RoutingNetworkSession( new NetworkSession(connection), AccessMode.WRITE, connection.boltServerAddress(), onError ); // When @@ -122,7 +122,7 @@ public void shouldHandleWriteFailuresInReadAccessMode() doThrow( new ClientException( "Neo.ClientError.Cluster.NotALeader", "oh no!" ) ). when( connection ).run( anyString(), any( Map.class ), any( Collector.class ) ); RoutingNetworkSession session = - new RoutingNetworkSession( new NetworkSession( connection ), AccessMode.READ, connection.address(), onError ); + new RoutingNetworkSession( new NetworkSession( connection ), AccessMode.READ, connection.boltServerAddress(), onError ); // When try @@ -146,7 +146,7 @@ public void shouldRethrowNonWriteFailures() doThrow( toBeThrown ). when( connection ).run( anyString(), any( Map.class ), any( Collector.class ) ); RoutingNetworkSession session = - new RoutingNetworkSession( new NetworkSession( connection ), AccessMode.WRITE, connection.address(), onError ); + new RoutingNetworkSession( new NetworkSession( connection ), AccessMode.WRITE, connection.boltServerAddress(), onError ); // When try @@ -171,7 +171,7 @@ public void shouldHandleConnectionFailuresOnClose() when( connection ).sync(); RoutingNetworkSession session = - new RoutingNetworkSession( new NetworkSession( connection ), AccessMode.WRITE, connection.address(), + new RoutingNetworkSession( new NetworkSession( connection ), AccessMode.WRITE, connection.boltServerAddress(), onError ); // When @@ -197,7 +197,7 @@ public void shouldHandleWriteFailuresOnClose() doThrow( new ClientException( "Neo.ClientError.Cluster.NotALeader", "oh no!" ) ).when( connection ).sync(); RoutingNetworkSession session = - new RoutingNetworkSession( new NetworkSession( connection ), AccessMode.WRITE, connection.address(), onError ); + new RoutingNetworkSession( new NetworkSession( connection ), AccessMode.WRITE, connection.boltServerAddress(), onError ); // When try @@ -221,7 +221,7 @@ public void shouldDelegateLastBookmark() // Given Session inner = mock( Session.class ); RoutingNetworkSession session = - new RoutingNetworkSession( inner, AccessMode.WRITE, connection.address(), onError ); + new RoutingNetworkSession( inner, AccessMode.WRITE, connection.boltServerAddress(), onError ); // When @@ -237,7 +237,7 @@ public void shouldDelegateReset() // Given Session inner = mock( Session.class ); RoutingNetworkSession session = - new RoutingNetworkSession( inner, AccessMode.WRITE, connection.address(), onError ); + new RoutingNetworkSession( inner, AccessMode.WRITE, connection.boltServerAddress(), onError ); // When @@ -253,7 +253,7 @@ public void shouldDelegateIsOpen() // Given Session inner = mock( Session.class ); RoutingNetworkSession session = - new RoutingNetworkSession( inner, AccessMode.WRITE, connection.address(), onError ); + new RoutingNetworkSession( inner, AccessMode.WRITE, connection.boltServerAddress(), onError ); // When @@ -262,21 +262,4 @@ public void shouldDelegateIsOpen() // Then verify( inner ).isOpen(); } - - @Test - public void shouldDelegateServer() - { - // Given - Session inner = mock( Session.class ); - RoutingNetworkSession session = - new RoutingNetworkSession( inner, AccessMode.WRITE, connection.address(), onError ); - - - // When - session.server(); - - // Then - verify( inner ).server(); - } - } diff --git a/driver/src/test/java/org/neo4j/driver/internal/RoutingTransactionTest.java b/driver/src/test/java/org/neo4j/driver/internal/RoutingTransactionTest.java index f94b9586ab..b6ce94c244 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/RoutingTransactionTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/RoutingTransactionTest.java @@ -78,7 +78,7 @@ public Void answer( InvocationOnMock invocationOnMock ) throws Throwable public void setUp() { connection = mock( Connection.class ); - when( connection.address() ).thenReturn( LOCALHOST ); + when( connection.boltServerAddress() ).thenReturn( LOCALHOST ); when( connection.isOpen() ).thenReturn( true ); onError = mock( RoutingErrorHandler.class ); cleanup = mock( Runnable.class ); @@ -123,7 +123,7 @@ public void shouldHandleWriteFailuresInWriteAccessMode() RoutingTransaction tx = new RoutingTransaction( new ExplicitTransaction( connection, cleanup ), AccessMode.WRITE, - connection.address(), onError ); + connection.boltServerAddress(), onError ); // When try @@ -150,7 +150,7 @@ public void shouldHandleWriteFailuresInReadAccessMode() .when( connection ).run( anyString(), any( Map.class ), any( Collector.class ) ); RoutingTransaction tx = new RoutingTransaction( new ExplicitTransaction( connection, cleanup ), AccessMode.READ, - connection.address(), onError ); + connection.boltServerAddress(), onError ); // When try @@ -175,7 +175,7 @@ public void shouldRethrowNonWriteFailures() .when( connection ).run( anyString(), any( Map.class ), any( Collector.class ) ); RoutingTransaction tx = new RoutingTransaction( new ExplicitTransaction( connection, cleanup ), AccessMode.WRITE, - connection.address(), onError ); + connection.boltServerAddress(), onError ); // When try @@ -201,7 +201,7 @@ public void shouldHandleConnectionFailuresOnClose() RoutingTransaction tx = new RoutingTransaction( new ExplicitTransaction( connection, cleanup ), AccessMode.WRITE, - connection.address(), onError ); + connection.boltServerAddress(), onError ); // When try @@ -227,7 +227,7 @@ public void shouldHandleWriteFailuresOnClose() RoutingTransaction tx = new RoutingTransaction( new ExplicitTransaction( connection, cleanup ), AccessMode.WRITE, - connection.address(), onError ); + connection.boltServerAddress(), onError ); // When try @@ -253,7 +253,7 @@ public void shouldDelegateSuccess() Transaction inner = mock( Transaction.class ); RoutingTransaction tx = new RoutingTransaction(inner, AccessMode.WRITE, - connection.address(), onError ); + connection.boltServerAddress(), onError ); // When tx.success(); @@ -269,7 +269,7 @@ public void shouldDelegateFailure() Transaction inner = mock( Transaction.class ); RoutingTransaction tx = new RoutingTransaction(inner, AccessMode.WRITE, - connection.address(), onError ); + connection.boltServerAddress(), onError ); // When tx.failure(); @@ -285,7 +285,7 @@ public void shouldDelegateIsOpen() Transaction inner = mock( Transaction.class ); RoutingTransaction tx = new RoutingTransaction(inner, AccessMode.WRITE, - connection.address(), onError ); + connection.boltServerAddress(), onError ); // When tx.isOpen(); @@ -301,7 +301,7 @@ public void shouldDelegateTypesystem() Transaction inner = mock( Transaction.class ); RoutingTransaction tx = new RoutingTransaction(inner, AccessMode.WRITE, - connection.address(), onError ); + connection.boltServerAddress(), onError ); // When tx.typeSystem(); @@ -309,4 +309,4 @@ public void shouldDelegateTypesystem() // Then verify( inner ).typeSystem(); } -} \ No newline at end of file +} diff --git a/driver/src/test/java/org/neo4j/driver/internal/cluster/ClusterTopology.java b/driver/src/test/java/org/neo4j/driver/internal/cluster/ClusterTopology.java index ff75414528..1bea1a9344 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/cluster/ClusterTopology.java +++ b/driver/src/test/java/org/neo4j/driver/internal/cluster/ClusterTopology.java @@ -18,6 +18,10 @@ */ package org.neo4j.driver.internal.cluster; +import org.hamcrest.Description; +import org.hamcrest.Matcher; +import org.hamcrest.TypeSafeMatcher; + import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -25,10 +29,6 @@ import java.util.Map; import java.util.Set; -import org.hamcrest.Description; -import org.hamcrest.Matcher; -import org.hamcrest.TypeSafeMatcher; - import org.neo4j.driver.internal.Event; import org.neo4j.driver.internal.EventHandler; import org.neo4j.driver.internal.net.BoltServerAddress; @@ -140,7 +140,7 @@ ClusterComposition composition( long now ) @Override public ClusterComposition getClusterComposition( Connection connection ) { - BoltServerAddress router = connection.address(); + BoltServerAddress router = connection.boltServerAddress(); View view = views.get( router ); ClusterComposition result = view == null ? null : view.composition( clock.millis() ); events.clusterComposition( router, result ); diff --git a/driver/src/test/java/org/neo4j/driver/internal/cluster/LoadBalancerTest.java b/driver/src/test/java/org/neo4j/driver/internal/cluster/LoadBalancerTest.java index d0644ecb28..22c11c801d 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/cluster/LoadBalancerTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/cluster/LoadBalancerTest.java @@ -415,15 +415,15 @@ private void shouldRoundRobinAmong( Function acquire ) Connection a = acquire.apply( routing ); Connection b = acquire.apply( routing ); Connection c = acquire.apply( routing ); - assertNotEquals( a.address(), b.address() ); - assertNotEquals( b.address(), c.address() ); - assertNotEquals( c.address(), a.address() ); - assertEquals( a.address(), acquire.apply( routing ).address() ); - assertEquals( b.address(), acquire.apply( routing ).address() ); - assertEquals( c.address(), acquire.apply( routing ).address() ); - assertEquals( a.address(), acquire.apply( routing ).address() ); - assertEquals( b.address(), acquire.apply( routing ).address() ); - assertEquals( c.address(), acquire.apply( routing ).address() ); + assertNotEquals( a.boltServerAddress(), b.boltServerAddress() ); + assertNotEquals( b.boltServerAddress(), c.boltServerAddress() ); + assertNotEquals( c.boltServerAddress(), a.boltServerAddress() ); + assertEquals( a.boltServerAddress(), acquire.apply( routing ).boltServerAddress() ); + assertEquals( b.boltServerAddress(), acquire.apply( routing ).boltServerAddress() ); + assertEquals( c.boltServerAddress(), acquire.apply( routing ).boltServerAddress() ); + assertEquals( a.boltServerAddress(), acquire.apply( routing ).boltServerAddress() ); + assertEquals( b.boltServerAddress(), acquire.apply( routing ).boltServerAddress() ); + assertEquals( c.boltServerAddress(), acquire.apply( routing ).boltServerAddress() ); // then MatcherFactory acquireConnections = @@ -488,13 +488,13 @@ public void shouldForgetPreviousServersOnRerouting() throws Exception Connection ra = routing.acquireReadConnection(); Connection rb = routing.acquireReadConnection(); Connection w = routing.acquireWriteConnection(); - assertNotEquals( ra.address(), rb.address() ); - assertEquals( ra.address(), routing.acquireReadConnection().address() ); - assertEquals( rb.address(), routing.acquireReadConnection().address() ); - assertEquals( w.address(), routing.acquireWriteConnection().address() ); - assertEquals( ra.address(), routing.acquireReadConnection().address() ); - assertEquals( rb.address(), routing.acquireReadConnection().address() ); - assertEquals( w.address(), routing.acquireWriteConnection().address() ); + assertNotEquals( ra.boltServerAddress(), rb.boltServerAddress() ); + assertEquals( ra.boltServerAddress(), routing.acquireReadConnection().boltServerAddress() ); + assertEquals( rb.boltServerAddress(), routing.acquireReadConnection().boltServerAddress() ); + assertEquals( w.boltServerAddress(), routing.acquireWriteConnection().boltServerAddress() ); + assertEquals( ra.boltServerAddress(), routing.acquireReadConnection().boltServerAddress() ); + assertEquals( rb.boltServerAddress(), routing.acquireReadConnection().boltServerAddress() ); + assertEquals( w.boltServerAddress(), routing.acquireWriteConnection().boltServerAddress() ); // then events.assertNone( acquire( "bad", 1337 ) ); @@ -569,7 +569,7 @@ public void sleep( long timestamp, long millis ) Connection connection = routing.acquireWriteConnection(); // then - assertEquals( new BoltServerAddress( "two", 1337 ), connection.address() ); + assertEquals( new BoltServerAddress( "two", 1337 ), connection.boltServerAddress() ); events.printEvents( System.out ); } diff --git a/driver/src/test/java/org/neo4j/driver/internal/net/SocketConnectionTest.java b/driver/src/test/java/org/neo4j/driver/internal/net/SocketConnectionTest.java new file mode 100644 index 0000000000..7f13cca342 --- /dev/null +++ b/driver/src/test/java/org/neo4j/driver/internal/net/SocketConnectionTest.java @@ -0,0 +1,82 @@ +/** + * Copyright (c) 2002-2016 "Neo Technology," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.neo4j.driver.internal.net; + +import org.junit.Test; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; + +import java.net.URI; +import java.util.ArrayList; +import java.util.Iterator; + +import org.neo4j.driver.internal.messaging.Message; +import org.neo4j.driver.internal.messaging.SuccessMessage; +import org.neo4j.driver.v1.Logger; +import org.neo4j.driver.v1.Values; +import org.neo4j.driver.v1.summary.ServerInfo; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doCallRealMethod; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.neo4j.driver.v1.Values.parameters; + +public class SocketConnectionTest +{ + @Test + public void shouldReceiveServerInfoAfterInit() throws Throwable + { + // Given + SocketClient socket = mock( SocketClient.class ); + SocketConnection conn = new SocketConnection( socket, mock( Logger.class ) ); + + when( socket.address() ).thenReturn( BoltServerAddress.from( URI.create( "http://neo4j.com:9000" ) ) ); + + // set up response messages + ArrayList serverResponses = new ArrayList<>(); + serverResponses.add( + new SuccessMessage( Values.parameters( "server", "super-awesome" ).asMap( Values.ofValue() ) + ) ); + final Iterator iterator = serverResponses.iterator(); + doAnswer( new Answer() + { + @Override + public Object answer( InvocationOnMock invocation ) throws Throwable + { + Object[] arguments = invocation.getArguments(); + SocketResponseHandler responseHandler = ( SocketResponseHandler ) arguments[0]; + iterator.next().dispatch( responseHandler ); + return null; // does not matter what to return + } + } ).when( socket ).receiveOne( any( SocketResponseHandler.class ) ); + doCallRealMethod().when( socket ).receiveAll( any(SocketResponseHandler.class) ); + + // When + conn.init( "java-driver-1.1", parameters( "scheme", "none" ).asMap( Values.ofValue() ) ); + + // Then + ServerInfo server = conn.server(); + assertThat( server.address(), equalTo( "neo4j.com:9000" ) ); + assertThat( server.version(), equalTo( "super-awesome" ) ); + } +} diff --git a/driver/src/test/java/org/neo4j/driver/internal/spi/StubConnectionPool.java b/driver/src/test/java/org/neo4j/driver/internal/spi/StubConnectionPool.java index 387beaf57e..6c3a8b3954 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/spi/StubConnectionPool.java +++ b/driver/src/test/java/org/neo4j/driver/internal/spi/StubConnectionPool.java @@ -236,7 +236,7 @@ public String toString() } @Override - public BoltServerAddress address() + public BoltServerAddress boltServerAddress() { return address; } diff --git a/driver/src/test/java/org/neo4j/driver/v1/integration/BookmarkIT.java b/driver/src/test/java/org/neo4j/driver/v1/integration/BookmarkIT.java index 2174214a71..84d5a80e02 100644 --- a/driver/src/test/java/org/neo4j/driver/v1/integration/BookmarkIT.java +++ b/driver/src/test/java/org/neo4j/driver/v1/integration/BookmarkIT.java @@ -25,7 +25,6 @@ import org.junit.rules.ExpectedException; import org.neo4j.driver.v1.Transaction; -import org.neo4j.driver.v1.util.ServerVersion; import org.neo4j.driver.v1.util.TestNeo4jSession; import static org.hamcrest.MatcherAssert.assertThat; @@ -33,8 +32,8 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assume.assumeTrue; - import static org.neo4j.driver.v1.util.ServerVersion.v3_1_0; +import static org.neo4j.driver.v1.util.ServerVersion.version; public class BookmarkIT { @@ -46,8 +45,9 @@ public class BookmarkIT @Before public void assumeBookmarkSupport() { - System.out.println( session.server() ); - assumeTrue( ServerVersion.version( session.server() ).greaterThanOrEqual( v3_1_0 ) ); + String version = session.run( "RETURN 1" ).consume().server().version(); + System.out.println( version ); + assumeTrue( version( version ).greaterThanOrEqual( v3_1_0 ) ); } @Test diff --git a/driver/src/test/java/org/neo4j/driver/v1/integration/SummaryIT.java b/driver/src/test/java/org/neo4j/driver/v1/integration/SummaryIT.java index b5a1ebd989..51cd5a1c38 100644 --- a/driver/src/test/java/org/neo4j/driver/v1/integration/SummaryIT.java +++ b/driver/src/test/java/org/neo4j/driver/v1/integration/SummaryIT.java @@ -85,7 +85,7 @@ public void shouldContainTimeInformation() ResultSummary summary = session.run( "UNWIND range(1,1000) AS n RETURN n AS number" ).consume(); // Then - if ( version( session.server() ).greaterThanOrEqual( v3_1_0 ) ) + if ( version( summary.server().version() ).greaterThanOrEqual( v3_1_0 ) ) { assertThat( summary.resultAvailableAfter( TimeUnit.MILLISECONDS ), greaterThan( 0L ) ); assertThat( summary.resultConsumedAfter( TimeUnit.MILLISECONDS ), greaterThan( 0L ) ); @@ -174,4 +174,32 @@ public void shouldContainNotifications() throws Throwable assertThat( notifications.get( 0 ).toString(), containsString("CartesianProduct") ); } + + + @Test + public void shouldBeAbleToAccessSummaryAfterFailure() throws Throwable + { + // Given + StatementResult res1 = session.run( "INVALID" ); + ResultSummary summary; + + // When + try + { + res1.consume(); + } + catch ( Exception e ) + { + //ignore + } + finally + { + summary = res1.consume(); + } + + // Then + assertThat( summary, notNullValue() ); + assertThat( summary.server().address(), equalTo( "localhost:7687" ) ); + assertThat( summary.counters().nodesCreated(), equalTo( 0 ) ); + } } diff --git a/driver/src/test/java/org/neo4j/driver/v1/util/TestNeo4jSession.java b/driver/src/test/java/org/neo4j/driver/v1/util/TestNeo4jSession.java index c0884408e3..1092da6696 100644 --- a/driver/src/test/java/org/neo4j/driver/v1/util/TestNeo4jSession.java +++ b/driver/src/test/java/org/neo4j/driver/v1/util/TestNeo4jSession.java @@ -94,12 +94,6 @@ public void close() throw new UnsupportedOperationException( "Disallowed on this test session" ); } - @Override - public String server() - { - return realSession.server(); - } - @Override public Transaction beginTransaction() { From a4b9637deb5f19ea79b232d1e3ac7fcc34a3d1f6 Mon Sep 17 00:00:00 2001 From: Zhen Li Date: Wed, 16 Nov 2016 15:10:48 +0100 Subject: [PATCH 2/2] Fix after code reveiw --- .../driver/internal/net/SocketConnection.java | 24 +++++++------------ .../neo4j/driver/internal/spi/Collector.java | 10 ++++---- .../internal/summary/InternalServerInfo.java | 4 ++-- .../neo4j/driver/v1/summary/ServerInfo.java | 1 + .../driver/v1/integration/BookmarkIT.java | 1 - 5 files changed, 17 insertions(+), 23 deletions(-) diff --git a/driver/src/main/java/org/neo4j/driver/internal/net/SocketConnection.java b/driver/src/main/java/org/neo4j/driver/internal/net/SocketConnection.java index 8723e8535d..f9e9c65411 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/net/SocketConnection.java +++ b/driver/src/main/java/org/neo4j/driver/internal/net/SocketConnection.java @@ -62,16 +62,7 @@ public SocketConnection( BoltServerAddress address, SecurityPlan securityPlan, L { this.logger = logging.getLog( format( "conn-%s", UUID.randomUUID().toString() ) ); this.socket = new SocketClient( address, securityPlan, logger ); - - if( logger.isDebugEnabled() ) - { - this.responseHandler = new LoggingResponseHandler( logger ); - } - else - { - this.responseHandler = new SocketResponseHandler(); - } - + this.responseHandler = createResponseHandler( logger ); this.socket.start(); } @@ -80,17 +71,20 @@ public SocketConnection( BoltServerAddress address, SecurityPlan securityPlan, L { this.socket = socket; this.logger = logger; + this.responseHandler = createResponseHandler( logger ); + this.socket.start(); + } + private SocketResponseHandler createResponseHandler( Logger logger ) + { if( logger.isDebugEnabled() ) { - this.responseHandler = new LoggingResponseHandler( logger ); + return new LoggingResponseHandler( logger ); } else { - this.responseHandler = new SocketResponseHandler(); + return new SocketResponseHandler(); } - - this.socket.start(); } @Override @@ -99,7 +93,7 @@ public void init( String clientName, Map authToken ) Collector.InitCollector initCollector = new Collector.InitCollector(); queueMessage( new InitMessage( clientName, authToken ), initCollector ); sync(); - this.serverInfo = new InternalServerInfo( socket.address(), initCollector.server() ); + this.serverInfo = new InternalServerInfo( socket.address(), initCollector.serverVersion() ); } @Override diff --git a/driver/src/main/java/org/neo4j/driver/internal/spi/Collector.java b/driver/src/main/java/org/neo4j/driver/internal/spi/Collector.java index 0736b9863d..f8939beddf 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/spi/Collector.java +++ b/driver/src/main/java/org/neo4j/driver/internal/spi/Collector.java @@ -45,7 +45,7 @@ public void doneFailure( Neo4jException error ) class InitCollector extends NoOperationCollector { - private String server; + private String serverVersion; @Override public void doneIgnored() { @@ -54,14 +54,14 @@ public void doneIgnored() } @Override - public void serverVersion( String server ) + public void serverVersion( String serverVersion ) { - this.server = server; + this.serverVersion = serverVersion; } - public String server() + public String serverVersion() { - return server; + return serverVersion; } } diff --git a/driver/src/main/java/org/neo4j/driver/internal/summary/InternalServerInfo.java b/driver/src/main/java/org/neo4j/driver/internal/summary/InternalServerInfo.java index 378be2daf3..842adbe3c4 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/summary/InternalServerInfo.java +++ b/driver/src/main/java/org/neo4j/driver/internal/summary/InternalServerInfo.java @@ -23,8 +23,8 @@ public class InternalServerInfo implements ServerInfo { - private BoltServerAddress address; - private String version; + private final BoltServerAddress address; + private final String version; public InternalServerInfo(BoltServerAddress address, String version) { diff --git a/driver/src/main/java/org/neo4j/driver/v1/summary/ServerInfo.java b/driver/src/main/java/org/neo4j/driver/v1/summary/ServerInfo.java index ec94b5533f..a3ed525429 100644 --- a/driver/src/main/java/org/neo4j/driver/v1/summary/ServerInfo.java +++ b/driver/src/main/java/org/neo4j/driver/v1/summary/ServerInfo.java @@ -33,6 +33,7 @@ public interface ServerInfo /** * Returns a string telling which version of the server the query was executed. + * Supported since neo4j 3.1. * @return The server version of null if not available. */ String version(); diff --git a/driver/src/test/java/org/neo4j/driver/v1/integration/BookmarkIT.java b/driver/src/test/java/org/neo4j/driver/v1/integration/BookmarkIT.java index 84d5a80e02..b0e6911205 100644 --- a/driver/src/test/java/org/neo4j/driver/v1/integration/BookmarkIT.java +++ b/driver/src/test/java/org/neo4j/driver/v1/integration/BookmarkIT.java @@ -46,7 +46,6 @@ public class BookmarkIT public void assumeBookmarkSupport() { String version = session.run( "RETURN 1" ).consume().server().version(); - System.out.println( version ); assumeTrue( version( version ).greaterThanOrEqual( v3_1_0 ) ); }