Skip to content

Commit e400103

Browse files
author
Zhen Li
committed
Added more tests
1 parent 35a02dc commit e400103

File tree

6 files changed

+103
-38
lines changed

6 files changed

+103
-38
lines changed

driver/src/main/java/org/neo4j/driver/internal/cluster/RoutingProcedureClusterCompositionProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ private ClusterCompositionResponse processRoutingResponse( RoutingProcedureRespo
6262
{
6363
return new ClusterCompositionResponse.Failure( new ServiceUnavailableException( format(
6464
"Failed to run '%s' on server. " +
65-
"Please make sure that there is a Neo4j 3.1+ causal cluster up running.",
65+
"Please make sure that there is a Neo4j server or cluster up running.",
6666
invokedProcedureString( response ) ), response.error()
6767
) );
6868
}

driver/src/main/java/org/neo4j/driver/internal/cluster/RoutingProcedureRunner.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public class RoutingProcedureRunner
4646
static final String ROUTING_CONTEXT = "context";
4747
static final String GET_ROUTING_TABLE = "dbms.cluster.routing.getRoutingTable({" + ROUTING_CONTEXT + "})";
4848
static final String DATABASE_NAME = "database";
49-
static final String MULTI_DB_GET_ROUTING_TABLE = String.format( "dbms.cluster.routing.getRoutingTable({%s}, %s)", ROUTING_CONTEXT, DATABASE_NAME );
49+
static final String MULTI_DB_GET_ROUTING_TABLE = String.format( "dbms.cluster.routing.getRoutingTable({%s}, {%s})", ROUTING_CONTEXT, DATABASE_NAME );
5050

5151
private final RoutingContext context;
5252

@@ -94,14 +94,19 @@ private Statement procedureStatement( ServerVersion serverVersion, String databa
9494
* For v4.0+ databases, call procedure to get routing table for the database specified.
9595
* For database version lower than 4.0, the database name will be ignored.
9696
*/
97+
if ( Objects.equals( ABSENT_DB_NAME, databaseName ) )
98+
{
99+
databaseName = null;
100+
}
101+
97102
if ( serverVersion.greaterThanOrEqual( v4_0_0 ) )
98103
{
99104
return new Statement( "CALL " + MULTI_DB_GET_ROUTING_TABLE,
100105
parameters( ROUTING_CONTEXT, context.asMap(), DATABASE_NAME, databaseName ) );
101106
}
102107
else
103108
{
104-
if ( !Objects.equals( ABSENT_DB_NAME, databaseName ) )
109+
if ( databaseName != null )
105110
{
106111
throw new RoutingException( String.format( "Refreshing routing table for multi-databases is not supported in server version lower than 4.0. " +
107112
"Current server version: %s. Database name: `%s`", serverVersion, databaseName ) );

driver/src/test/java/org/neo4j/driver/integration/DirectDriverIT.java

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,13 @@
3030
import org.neo4j.driver.Session;
3131
import org.neo4j.driver.StatementResult;
3232
import org.neo4j.driver.internal.BoltServerAddress;
33-
import org.neo4j.driver.internal.util.EnabledOnNeo4jWith;
34-
import org.neo4j.driver.internal.util.Neo4jFeature;
3533
import org.neo4j.driver.util.DatabaseExtension;
3634
import org.neo4j.driver.util.ParallelizableIT;
3735

3836
import static org.hamcrest.Matchers.is;
3937
import static org.hamcrest.core.IsEqual.equalTo;
4038
import static org.hamcrest.junit.MatcherAssert.assertThat;
4139
import static org.junit.jupiter.api.Assertions.assertThrows;
42-
import static org.neo4j.driver.internal.util.Matchers.clusterDriver;
4340
import static org.neo4j.driver.internal.util.Matchers.directDriverWithAddress;
4441

4542
@ParallelizableIT
@@ -59,22 +56,6 @@ void closeDriver()
5956
}
6057
}
6158

62-
@Test
63-
@EnabledOnNeo4jWith( Neo4jFeature.BOLT_V4 )
64-
void shouldBeAbleToConnectSingleInstanceWithNeo4jScheme() throws Throwable
65-
{
66-
URI uri = URI.create( String.format( "neo4j://%s:%s", neo4j.uri().getHost(), neo4j.uri().getPort() ) );
67-
BoltServerAddress address = new BoltServerAddress( neo4j.uri() );
68-
69-
try ( Driver driver = GraphDatabase.driver( uri, neo4j.authToken() ); Session session = driver.session() )
70-
{
71-
assertThat( driver, is( clusterDriver() ) );
72-
73-
StatementResult result = session.run( "RETURN 1" );
74-
assertThat( result.single().get( 0 ).asInt(), CoreMatchers.equalTo( 1 ) );
75-
}
76-
}
77-
7859
@Test
7960
void shouldAllowIPv6Address()
8061
{

driver/src/test/java/org/neo4j/driver/integration/RoutingDriverBoltKitTest.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -722,7 +722,7 @@ void shouldRetryWriteTransactionUntilSuccessWithWhenLeaderIsRemoved() throws Exc
722722
StubServer writer = StubServer.start( "write_server.script", 9008 );
723723

724724
Logger logger = mock( Logger.class );
725-
Config config = Config.builder().withoutEncryption().withLogging( mockedLogging( logger ) ).build();
725+
Config config = Config.builder().withoutEncryption().withLogging( ignored -> logger ).build();
726726
try ( Driver driver = newDriverWithSleeplessClock( "neo4j://127.0.0.1:9001", config );
727727
Session session = driver.session() )
728728
{
@@ -756,7 +756,7 @@ void shouldRetryWriteTransactionUntilSuccessWithWhenLeaderIsRemovedV3() throws E
756756
StubServer writer = StubServer.start( "write_server.script", 9008 );
757757

758758
Logger logger = mock( Logger.class );
759-
Config config = Config.builder().withoutEncryption().withLogging( mockedLogging( logger ) ).build();
759+
Config config = Config.builder().withoutEncryption().withLogging( ignored -> logger ).build();
760760
try ( Driver driver = newDriverWithSleeplessClock( "neo4j://127.0.0.1:9001", config );
761761
Session session = driver.session() )
762762
{
@@ -1236,11 +1236,4 @@ private static List<String> readStrings( final String query, Session session )
12361236
return names;
12371237
} );
12381238
}
1239-
1240-
private static Logging mockedLogging( Logger logger )
1241-
{
1242-
Logging logging = mock( Logging.class );
1243-
when( logging.getLog( any() ) ).thenReturn( logger );
1244-
return logging;
1245-
}
12461239
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/*
2+
* Copyright (c) 2002-2019 "Neo4j,"
3+
* Neo4j Sweden AB [http://neo4j.com]
4+
*
5+
* This file is part of Neo4j.
6+
*
7+
* Licensed under the Apache License, Version 2.0 (the "License");
8+
* you may not use this file except in compliance with the License.
9+
* You may obtain a copy of the License at
10+
*
11+
* http://www.apache.org/licenses/LICENSE-2.0
12+
*
13+
* Unless required by applicable law or agreed to in writing, software
14+
* distributed under the License is distributed on an "AS IS" BASIS,
15+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
* See the License for the specific language governing permissions and
17+
* limitations under the License.
18+
*/
19+
package org.neo4j.driver.integration;
20+
21+
import org.hamcrest.CoreMatchers;
22+
import org.junit.jupiter.api.Test;
23+
import org.junit.jupiter.api.extension.RegisterExtension;
24+
25+
import java.net.URI;
26+
27+
import org.neo4j.driver.Driver;
28+
import org.neo4j.driver.GraphDatabase;
29+
import org.neo4j.driver.Session;
30+
import org.neo4j.driver.StatementResult;
31+
import org.neo4j.driver.internal.util.EnabledOnNeo4jWith;
32+
import org.neo4j.driver.internal.util.Neo4jFeature;
33+
import org.neo4j.driver.util.DatabaseExtension;
34+
import org.neo4j.driver.util.ParallelizableIT;
35+
36+
import static org.hamcrest.Matchers.is;
37+
import static org.hamcrest.junit.MatcherAssert.assertThat;
38+
import static org.neo4j.driver.internal.util.Matchers.clusterDriver;
39+
40+
@ParallelizableIT
41+
@EnabledOnNeo4jWith( Neo4jFeature.BOLT_V4 )
42+
class RoutingDriverIT
43+
{
44+
@RegisterExtension
45+
static final DatabaseExtension neo4j = new DatabaseExtension();
46+
47+
@Test
48+
void shouldBeAbleToConnectSingleInstanceWithNeo4jScheme() throws Throwable
49+
{
50+
URI uri = URI.create( String.format( "neo4j://%s:%s", neo4j.uri().getHost(), neo4j.uri().getPort() ) );
51+
52+
try ( Driver driver = GraphDatabase.driver( uri, neo4j.authToken() );
53+
Session session = driver.session() )
54+
{
55+
assertThat( driver, is( clusterDriver() ) );
56+
57+
StatementResult result = session.run( "RETURN 1" );
58+
assertThat( result.single().get( 0 ).asInt(), CoreMatchers.equalTo( 1 ) );
59+
}
60+
}
61+
62+
@Test
63+
void shouldBeAbleToRunQueryOnNeo4j() throws Throwable
64+
{
65+
URI uri = URI.create( String.format( "neo4j://%s:%s", neo4j.uri().getHost(), neo4j.uri().getPort() ) );
66+
try ( Driver driver = GraphDatabase.driver( uri, neo4j.authToken() );
67+
Session session = driver.session( t -> t.withDatabase( "neo4j" ) ) )
68+
{
69+
assertThat( driver, is( clusterDriver() ) );
70+
71+
StatementResult result = session.run( "RETURN 1" );
72+
assertThat( result.single().get( 0 ).asInt(), CoreMatchers.equalTo( 1 ) );
73+
}
74+
}
75+
}

driver/src/test/java/org/neo4j/driver/internal/cluster/RoutingProcedureRunnerTest.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,16 @@
2424

2525
import java.net.URI;
2626
import java.util.List;
27+
import java.util.Map;
28+
import java.util.Objects;
2729
import java.util.concurrent.CompletionStage;
2830

29-
import org.neo4j.driver.internal.BoltServerAddress;
30-
import org.neo4j.driver.internal.spi.Connection;
3131
import org.neo4j.driver.Record;
3232
import org.neo4j.driver.Statement;
3333
import org.neo4j.driver.Value;
3434
import org.neo4j.driver.exceptions.ClientException;
35+
import org.neo4j.driver.internal.BoltServerAddress;
36+
import org.neo4j.driver.internal.spi.Connection;
3537

3638
import static java.util.Arrays.asList;
3739
import static java.util.Collections.EMPTY_MAP;
@@ -44,6 +46,7 @@
4446
import static org.mockito.Mockito.mock;
4547
import static org.mockito.Mockito.verify;
4648
import static org.mockito.Mockito.when;
49+
import static org.neo4j.driver.Values.parameters;
4750
import static org.neo4j.driver.internal.cluster.RoutingProcedureRunner.DATABASE_NAME;
4851
import static org.neo4j.driver.internal.cluster.RoutingProcedureRunner.GET_ROUTING_TABLE;
4952
import static org.neo4j.driver.internal.cluster.RoutingProcedureRunner.MULTI_DB_GET_ROUTING_TABLE;
@@ -53,7 +56,6 @@
5356
import static org.neo4j.driver.internal.util.Futures.completedWithNull;
5457
import static org.neo4j.driver.internal.util.Futures.failedFuture;
5558
import static org.neo4j.driver.internal.util.ServerVersion.version;
56-
import static org.neo4j.driver.Values.parameters;
5759
import static org.neo4j.driver.util.TestUtil.await;
5860

5961
class RoutingProcedureRunnerTest
@@ -69,9 +71,9 @@ void shouldCallGetRoutingTableWithEmptyMapOnSystemDatabaseForDatabase( String db
6971

7072
assertTrue( response.isSuccess() );
7173
assertEquals( 2, response.records().size() );
72-
assertEquals( new Statement( "CALL " + MULTI_DB_GET_ROUTING_TABLE,
73-
parameters( ROUTING_CONTEXT, EMPTY_MAP, DATABASE_NAME, db ) ),
74-
response.procedure() );
74+
75+
Value parameters = generateMultiDatabaseRoutingParameters( EMPTY_MAP, db );
76+
assertEquals( new Statement( "CALL " + MULTI_DB_GET_ROUTING_TABLE, parameters ), response.procedure() );
7577
}
7678

7779
@ParameterizedTest
@@ -88,7 +90,7 @@ void shouldCallGetRoutingTableWithParamOnSystemDatabaseForDatabase( String db )
8890

8991
assertTrue( response.isSuccess() );
9092
assertEquals( 1, response.records().size() );
91-
Value expectedParams = parameters( ROUTING_CONTEXT, context.asMap(), DATABASE_NAME, db );
93+
Value expectedParams = generateMultiDatabaseRoutingParameters( context.asMap(), db );
9294
assertEquals( new Statement( "CALL " + MULTI_DB_GET_ROUTING_TABLE, expectedParams ), response.procedure() );
9395
}
9496

@@ -184,6 +186,15 @@ void shouldPropagateReleaseError()
184186
verify( connection ).release();
185187
}
186188

189+
private static Value generateMultiDatabaseRoutingParameters( Map context, String db )
190+
{
191+
if ( Objects.equals( ABSENT_DB_NAME, db ) )
192+
{
193+
db = null;
194+
}
195+
return parameters( ROUTING_CONTEXT, context, DATABASE_NAME, db );
196+
}
197+
187198
private static CompletionStage<Connection> connectionStage( String serverVersion )
188199
{
189200
return connectionStage( serverVersion, completedWithNull() );

0 commit comments

Comments
 (0)