Skip to content

Commit eeadd97

Browse files
authored
Refactoring (#1475)
1 parent 80fd687 commit eeadd97

File tree

4 files changed

+48
-56
lines changed

4 files changed

+48
-56
lines changed

driver/src/main/java/org/neo4j/driver/Driver.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,6 @@
6060
* </tr>
6161
* </tbody>
6262
* </table>
63-
*
64-
* @since 1.0 (Modified and Added {@link AsyncSession} and {@link RxSession} since 2.0)
6563
*/
6664
public interface Driver extends AutoCloseable {
6765
/**

driver/src/test/java/org/neo4j/driver/internal/util/Neo4jFeature.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
public enum Neo4jFeature {
2525
SPATIAL_TYPES(new Version(3, 4, 0)),
2626
TEMPORAL_TYPES(new Version(3, 4, 0)),
27+
SERVER_SIDE_ROUTING_ENABLED_BY_DEFAULT(new Version(5, 0, 0)),
2728
BOLT_V3(new Version(3, 5, 0)),
2829
BOLT_V4(new Version(4, 0, 0)),
2930
BOLT_V51(new Version(5, 5, 0));

examples/src/main/java/org/neo4j/docs/driver/ConfigCustomResolverExample.java

Lines changed: 19 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -18,66 +18,37 @@
1818
*/
1919
package org.neo4j.docs.driver;
2020

21-
import org.neo4j.driver.AccessMode;
2221
import org.neo4j.driver.AuthToken;
2322
import org.neo4j.driver.AuthTokens;
2423
import org.neo4j.driver.Config;
25-
import org.neo4j.driver.Driver;
2624
import org.neo4j.driver.GraphDatabase;
2725
import org.neo4j.driver.net.ServerAddress;
2826

29-
import java.util.Arrays;
30-
import java.util.HashSet;
27+
import java.util.Map;
28+
import java.util.Set;
29+
import java.util.UUID;
3130

32-
import static org.neo4j.driver.SessionConfig.builder;
33-
import static org.neo4j.driver.Values.parameters;
34-
35-
public class ConfigCustomResolverExample implements AutoCloseable {
36-
private final Driver driver;
37-
38-
public ConfigCustomResolverExample(String virtualUri, AuthToken authToken, ServerAddress... addresses) {
39-
var config = Config.builder()
40-
.withResolver(address -> new HashSet<>(Arrays.asList(addresses)))
41-
.build();
42-
43-
driver = GraphDatabase.driver(virtualUri, authToken, config);
31+
public class ConfigCustomResolverExample {
32+
@SuppressWarnings("unused")
33+
// tag::config-custom-resolver[]
34+
public void addExampleNode() {
35+
var addresses = Set.of(
36+
ServerAddress.of("a.example.com", 7676),
37+
ServerAddress.of("b.example.com", 8787),
38+
ServerAddress.of("c.example.com", 9898)
39+
);
40+
addNode("neo4j://x.example.com", AuthTokens.basic("neo4j", "some password"), addresses, UUID.randomUUID().toString());
4441
}
4542

46-
// tag::config-custom-resolver[]
47-
@SuppressWarnings("SameParameterValue")
48-
private Driver createDriver(String virtualUri, String user, String password, ServerAddress... addresses) {
43+
public void addNode(String virtualUri, AuthToken authToken, Set<ServerAddress> addresses, String id) {
4944
var config = Config.builder()
50-
.withResolver(address -> new HashSet<>(Arrays.asList(addresses)))
45+
.withResolver(address -> addresses)
5146
.build();
52-
53-
return GraphDatabase.driver(virtualUri, AuthTokens.basic(user, password), config);
54-
}
55-
56-
private void addPerson(String name) {
57-
var username = "neo4j";
58-
var password = "some password";
59-
60-
try (var driver = createDriver(
61-
"neo4j://x.example.com",
62-
username,
63-
password,
64-
ServerAddress.of("a.example.com", 7676),
65-
ServerAddress.of("b.example.com", 8787),
66-
ServerAddress.of("c.example.com", 9898))) {
67-
try (var session = driver.session(builder().withDefaultAccessMode(AccessMode.WRITE).build())) {
68-
session.run("CREATE (a:Person {name: $name})", parameters("name", name));
69-
}
47+
try (var driver = GraphDatabase.driver(virtualUri, authToken, config)) {
48+
driver.executableQuery("CREATE ({id: $id})")
49+
.withParameters(Map.of("id", id))
50+
.execute();
7051
}
7152
}
7253
// end::config-custom-resolver[]
73-
74-
@Override
75-
public void close() throws RuntimeException {
76-
driver.close();
77-
}
78-
79-
public boolean canConnect() {
80-
var result = driver.session(builder().withDefaultAccessMode(AccessMode.READ).build()).run("RETURN 1");
81-
return result.single().get(0).asInt() == 1;
82-
}
8354
}

examples/src/test/java/org/neo4j/docs/driver/RoutingExamplesIT.java

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,23 @@
2121
import org.junit.jupiter.api.Test;
2222
import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
2323
import org.neo4j.driver.AuthTokens;
24+
import org.neo4j.driver.GraphDatabase;
25+
import org.neo4j.driver.internal.util.EnabledOnNeo4jWith;
26+
import org.neo4j.driver.internal.util.Neo4jFeature;
2427
import org.neo4j.driver.net.ServerAddress;
2528
import org.testcontainers.containers.Neo4jContainer;
2629
import org.testcontainers.junit.jupiter.Container;
30+
import org.testcontainers.junit.jupiter.Testcontainers;
2731

2832
import java.net.URI;
33+
import java.util.Map;
2934
import java.util.Optional;
35+
import java.util.Set;
36+
import java.util.UUID;
3037

31-
import static org.junit.jupiter.api.Assertions.assertTrue;
38+
import static org.junit.jupiter.api.Assertions.assertEquals;
3239

40+
@Testcontainers(disabledWithoutDocker = true)
3341
@DisabledIfSystemProperty(named = "skipDockerTests", matches = "^true$")
3442
class RoutingExamplesIT {
3543
private static final String NEO4J_VERSION =
@@ -40,17 +48,31 @@ class RoutingExamplesIT {
4048
private static final Neo4jContainer<?> NEO4J_CONTAINER = new Neo4jContainer<>(
4149
String.format("neo4j:%s-enterprise", NEO4J_VERSION))
4250
.withEnv("NEO4J_ACCEPT_LICENSE_AGREEMENT", "yes")
51+
// in this testing deployment the server runs inside a container and its Bolt port is exposed to the test(s)
52+
// on a random port that might not match the port in the routing table
53+
// this setting leads to the server echoing back the routing context address supplied by the driver
54+
// the test(s) may define the routing context address via the URI
55+
.withNeo4jConfig("dbms.routing.default_router", "SERVER")
4356
.withAdminPassword(null);
4457

4558
@Test
59+
@EnabledOnNeo4jWith(Neo4jFeature.SERVER_SIDE_ROUTING_ENABLED_BY_DEFAULT)
4660
void testShouldRunConfigCustomResolverExample() {
4761
// Given
4862
var boltUri = URI.create(NEO4J_CONTAINER.getBoltUrl());
49-
var neo4jUrl = String.format("neo4j://%s:%d", boltUri.getHost(), boltUri.getPort());
50-
try (var example = new ConfigCustomResolverExample(
51-
neo4jUrl, AuthTokens.none(), ServerAddress.of(boltUri.getHost(), boltUri.getPort()))) {
52-
// Then
53-
assertTrue(example.canConnect());
63+
var id = UUID.randomUUID().toString();
64+
var example = new ConfigCustomResolverExample();
65+
var neo4j = String.format("neo4j://%s:%d", boltUri.getHost(), boltUri.getPort());
66+
67+
// When
68+
example.addNode(neo4j, AuthTokens.none(), Set.of(ServerAddress.of(boltUri.getHost(), boltUri.getPort())), id);
69+
70+
// Then
71+
try(var driver = GraphDatabase.driver(boltUri, AuthTokens.none())) {
72+
var num = driver.executableQuery("MATCH (n{id: $id}) RETURN count(n)")
73+
.withParameters(Map.of("id", id))
74+
.execute();
75+
assertEquals(1, num.records().get(0).get(0).asInt());
5476
}
5577
}
5678
}

0 commit comments

Comments
 (0)