Skip to content

Commit 176dd3e

Browse files
committed
Testing build
1 parent 020cd0f commit 176dd3e

26 files changed

+438
-638
lines changed

README.md

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -97,19 +97,18 @@ To use the driver in a project, please use the released driver via Maven Central
9797

9898
#### Running Tests and Creating a Package
9999

100-
Our test setup requires a bit of infrastructure to run.
101-
We rely mostly on [`testkit`](https://github.com/neo4j-drivers/testkit).
102-
Testkit is a tooling that is used to run integration tests for all of the drivers we provide.
103-
104-
Some older tests still rely on [`boltkit`](https://github.com/neo4j-drivers/boltkit), the predecessor to Testkit.
105-
If `boltkit` is not installed, then all tests that requires `boltkit` will be ignored and will not be executed.
106-
107-
In case you want or can verify contributions with unit tests alone, use the following command to skip all integration and Testkit tests:
108-
100+
The following command may be used to unit test and install artifacts without running integration tests:
109101
```
110102
mvn clean install -DskipITs -P skip-testkit
111103
```
112104

105+
Integration tests have the following prerequisites:
106+
- Docker
107+
- [`Testkit`](https://github.com/neo4j-drivers/testkit)
108+
109+
Testkit that is a tooling that is used to run integration tests for all official Neo4j drivers.
110+
It can be executed using Docker during Maven build and in such case does not require additional setup. See the instructions below for more details.
111+
113112
There are 2 ways of running Testkit tests:
114113
1. Using the `testkit-tests` module of this project.
115114
2. Manually cloning Testkit and running it directly.

driver/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@
100100
<groupId>org.reactivestreams</groupId>
101101
<artifactId>reactive-streams-tck</artifactId>
102102
</dependency>
103+
<dependency>
104+
<groupId>ch.qos.logback</groupId>
105+
<artifactId>logback-classic</artifactId>
106+
</dependency>
103107
</dependencies>
104108

105109
<build>

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ void shouldRecoverFromDownedServer() throws Throwable {
8080
sessionGrabber.start();
8181

8282
// When
83-
neo4j.forceRestartDb();
83+
neo4j.stopProxy();
84+
neo4j.startProxy();
8485

8586
// Then we accept a hump with failing sessions, but demand that failures stop as soon as the server is back up.
8687
sessionGrabber.assertSessionsAvailableWithin(120);

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

Lines changed: 10 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,8 @@
2525
import static org.junit.jupiter.api.Assertions.assertThrows;
2626
import static org.neo4j.driver.AuthTokens.basic;
2727
import static org.neo4j.driver.AuthTokens.custom;
28-
import static org.neo4j.driver.Values.ofValue;
29-
import static org.neo4j.driver.Values.parameters;
3028
import static org.neo4j.driver.internal.logging.DevNullLogging.DEV_NULL_LOGGING;
31-
import static org.neo4j.driver.util.Neo4jRunner.PASSWORD;
3229

33-
import java.nio.file.Files;
34-
import java.nio.file.Paths;
3530
import java.util.Map;
3631
import org.junit.jupiter.api.Test;
3732
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -44,58 +39,18 @@
4439
import org.neo4j.driver.Value;
4540
import org.neo4j.driver.exceptions.AuthenticationException;
4641
import org.neo4j.driver.exceptions.SecurityException;
47-
import org.neo4j.driver.internal.security.InternalAuthToken;
48-
import org.neo4j.driver.internal.util.DisabledOnNeo4jWith;
49-
import org.neo4j.driver.internal.util.Neo4jFeature;
5042
import org.neo4j.driver.util.DatabaseExtension;
51-
import org.neo4j.driver.util.Neo4jSettings;
5243
import org.neo4j.driver.util.ParallelizableIT;
5344

5445
@ParallelizableIT
5546
class CredentialsIT {
5647
@RegisterExtension
5748
static final DatabaseExtension neo4j = new DatabaseExtension();
5849

59-
@Test
60-
@DisabledOnNeo4jWith(Neo4jFeature.BOLT_V4)
61-
// This feature is removed in 4.0
62-
void shouldBePossibleToChangePassword() throws Exception {
63-
String newPassword = "secret";
64-
String tmpDataDir = Files.createTempDirectory(Paths.get("target"), "tmp")
65-
.toAbsolutePath()
66-
.toString()
67-
.replace("\\", "/");
68-
69-
neo4j.restartDb(Neo4jSettings.TEST_SETTINGS.updateWith(Neo4jSettings.DATA_DIR, tmpDataDir));
70-
71-
AuthToken authToken = new InternalAuthToken(parameters(
72-
"scheme", "basic",
73-
"principal", "neo4j",
74-
"credentials", "neo4j",
75-
"new_credentials", newPassword)
76-
.asMap(ofValue()));
77-
78-
// change the password
79-
try (Driver driver = GraphDatabase.driver(neo4j.uri(), authToken);
80-
Session session = driver.session()) {
81-
session.run("RETURN 1").consume();
82-
}
83-
84-
// verify old password does not work
85-
final Driver badDriver = GraphDatabase.driver(CredentialsIT.neo4j.uri(), basic("neo4j", PASSWORD));
86-
assertThrows(AuthenticationException.class, badDriver::verifyConnectivity);
87-
88-
// verify new password works
89-
try (Driver driver = GraphDatabase.driver(CredentialsIT.neo4j.uri(), AuthTokens.basic("neo4j", newPassword));
90-
Session session = driver.session()) {
91-
session.run("RETURN 2").consume();
92-
}
93-
}
94-
9550
@Test
9651
void basicCredentialsShouldWork() {
9752
// When & Then
98-
try (Driver driver = GraphDatabase.driver(neo4j.uri(), basic("neo4j", PASSWORD));
53+
try (Driver driver = GraphDatabase.driver(neo4j.uri(), basic("neo4j", neo4j.adminPassword()));
9954
Session session = driver.session()) {
10055
Value single = session.run("RETURN 1").single().get(0);
10156
assertThat(single.asLong(), equalTo(1L));
@@ -105,7 +60,8 @@ void basicCredentialsShouldWork() {
10560
@Test
10661
void shouldGetHelpfulErrorOnInvalidCredentials() {
10762
SecurityException e = assertThrows(SecurityException.class, () -> {
108-
try (Driver driver = GraphDatabase.driver(neo4j.uri(), basic("thisisnotthepassword", PASSWORD));
63+
try (Driver driver =
64+
GraphDatabase.driver(neo4j.uri(), basic("thisisnotthepassword", neo4j.adminPassword()));
10965
Session session = driver.session()) {
11066
session.run("RETURN 1");
11167
}
@@ -116,7 +72,7 @@ void shouldGetHelpfulErrorOnInvalidCredentials() {
11672
@Test
11773
void shouldBeAbleToProvideRealmWithBasicAuth() {
11874
// When & Then
119-
try (Driver driver = GraphDatabase.driver(neo4j.uri(), basic("neo4j", PASSWORD, "native"));
75+
try (Driver driver = GraphDatabase.driver(neo4j.uri(), basic("neo4j", neo4j.adminPassword(), "native"));
12076
Session session = driver.session()) {
12177
Value single = session.run("CREATE () RETURN 1").single().get(0);
12278
assertThat(single.asLong(), equalTo(1L));
@@ -126,7 +82,8 @@ void shouldBeAbleToProvideRealmWithBasicAuth() {
12682
@Test
12783
void shouldBeAbleToConnectWithCustomToken() {
12884
// When & Then
129-
try (Driver driver = GraphDatabase.driver(neo4j.uri(), custom("neo4j", PASSWORD, "native", "basic"));
85+
try (Driver driver =
86+
GraphDatabase.driver(neo4j.uri(), custom("neo4j", neo4j.adminPassword(), "native", "basic"));
13087
Session session = driver.session()) {
13188
Value single = session.run("CREATE () RETURN 1").single().get(0);
13289
assertThat(single.asLong(), equalTo(1L));
@@ -138,7 +95,8 @@ void shouldBeAbleToConnectWithCustomTokenWithAdditionalParameters() {
13895
Map<String, Object> params = singletonMap("secret", 16);
13996

14097
// When & Then
141-
try (Driver driver = GraphDatabase.driver(neo4j.uri(), custom("neo4j", PASSWORD, "native", "basic", params));
98+
try (Driver driver = GraphDatabase.driver(
99+
neo4j.uri(), custom("neo4j", neo4j.adminPassword(), "native", "basic", params));
142100
Session session = driver.session()) {
143101
Value single = session.run("CREATE () RETURN 1").single().get(0);
144102
assertThat(single.asLong(), equalTo(1L));
@@ -147,12 +105,12 @@ void shouldBeAbleToConnectWithCustomTokenWithAdditionalParameters() {
147105

148106
@Test
149107
void directDriverShouldFailEarlyOnWrongCredentials() {
150-
testDriverFailureOnWrongCredentials("bolt://localhost:" + neo4j.boltPort());
108+
testDriverFailureOnWrongCredentials(neo4j.uri().toString());
151109
}
152110

153111
@Test
154112
void routingDriverShouldFailEarlyOnWrongCredentials() {
155-
testDriverFailureOnWrongCredentials("neo4j://localhost:" + neo4j.boltPort());
113+
testDriverFailureOnWrongCredentials(neo4j.uri().toString());
156114
}
157115

158116
private void testDriverFailureOnWrongCredentials(String uri) {

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

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,11 @@
2525
import static org.neo4j.driver.internal.util.Matchers.directDriverWithAddress;
2626

2727
import java.net.URI;
28-
import org.hamcrest.CoreMatchers;
2928
import org.junit.jupiter.api.AfterEach;
3029
import org.junit.jupiter.api.Test;
3130
import org.junit.jupiter.api.extension.RegisterExtension;
3231
import org.neo4j.driver.Driver;
3332
import org.neo4j.driver.GraphDatabase;
34-
import org.neo4j.driver.Result;
35-
import org.neo4j.driver.Session;
3633
import org.neo4j.driver.internal.BoltServerAddress;
3734
import org.neo4j.driver.util.DatabaseExtension;
3835
import org.neo4j.driver.util.ParallelizableIT;
@@ -87,17 +84,4 @@ void shouldRegisterSingleServer() {
8784
// Then
8885
assertThat(driver, is(directDriverWithAddress(address)));
8986
}
90-
91-
@Test
92-
void shouldConnectIPv6Uri() {
93-
// Given
94-
try (Driver driver = GraphDatabase.driver("bolt://[::1]:" + neo4j.boltPort(), neo4j.authToken());
95-
Session session = driver.session()) {
96-
// When
97-
Result result = session.run("RETURN 1");
98-
99-
// Then
100-
assertThat(result.single().get(0).asInt(), CoreMatchers.equalTo(1));
101-
}
102-
}
10387
}

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import static org.neo4j.driver.Config.TrustStrategy.trustAllCertificates;
2626

2727
import java.net.URI;
28+
import java.util.HashMap;
29+
import java.util.Map;
2830
import org.junit.jupiter.api.Test;
2931
import org.junit.jupiter.api.extension.RegisterExtension;
3032
import org.neo4j.driver.Config;
@@ -81,7 +83,9 @@ void shouldOperateWithoutEncryptionWhenItIsAlsoDisabledInTheDatabase() {
8183
}
8284

8385
private void testMatchingEncryption(BoltTlsLevel tlsLevel, boolean driverEncrypted, String scheme) {
84-
neo4j.restartDb(Neo4jSettings.TEST_SETTINGS.updateWith(Neo4jSettings.BOLT_TLS_LEVEL, tlsLevel.toString()));
86+
Map<String, String> tlsConfig = new HashMap<>();
87+
tlsConfig.put(Neo4jSettings.BOLT_TLS_LEVEL, tlsLevel.toString());
88+
neo4j.deleteAndStartNeo4j(tlsConfig);
8589
Config config;
8690

8791
if (scheme.equals(Scheme.BOLT_LOW_TRUST_URI_SCHEME)) {
@@ -107,7 +111,9 @@ private void testMatchingEncryption(BoltTlsLevel tlsLevel, boolean driverEncrypt
107111
}
108112

109113
private void testMismatchingEncryption(BoltTlsLevel tlsLevel, boolean driverEncrypted) {
110-
neo4j.restartDb(Neo4jSettings.TEST_SETTINGS.updateWith(Neo4jSettings.BOLT_TLS_LEVEL, tlsLevel.toString()));
114+
Map<String, String> tlsConfig = new HashMap<>();
115+
tlsConfig.put(Neo4jSettings.BOLT_TLS_LEVEL, tlsLevel.toString());
116+
neo4j.deleteAndStartNeo4j(tlsConfig);
111117
Config config = newConfig(driverEncrypted);
112118

113119
ServiceUnavailableException e = assertThrows(

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -177,13 +177,12 @@ void shouldHandleFailureAtRunTime() {
177177
}
178178

179179
@Test
180-
void shouldGetHelpfulErrorWhenTryingToConnectToHttpPort() throws Throwable {
181-
// the http server needs some time to start up
182-
Thread.sleep(2000);
183-
180+
void shouldGetHelpfulErrorWhenTryingToConnectToHttpPort() {
184181
Config config = Config.builder().withoutEncryption().build();
185182

186-
final Driver driver = GraphDatabase.driver("bolt://localhost:" + session.httpPort(), config);
183+
URI boltUri = session.uri();
184+
URI uri = URI.create(String.format("%s://%s:%d", boltUri.getScheme(), boltUri.getHost(), session.httpPort()));
185+
final Driver driver = GraphDatabase.driver(uri, config);
187186
ClientException e = assertThrows(ClientException.class, driver::verifyConnectivity);
188187
assertEquals(
189188
"Server responded HTTP. Make sure you are not trying to connect to the http endpoint "

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,12 @@
3131
import org.neo4j.driver.Result;
3232
import org.neo4j.driver.Session;
3333
import org.neo4j.driver.util.DatabaseExtension;
34-
import org.neo4j.driver.util.Neo4jSettings;
3534
import org.neo4j.driver.util.ParallelizableIT;
3635

3736
@ParallelizableIT
3837
class LoadCSVIT {
3938
@RegisterExtension
40-
static final DatabaseExtension neo4j = new DatabaseExtension(
41-
Neo4jSettings.TEST_SETTINGS.without(Neo4jSettings.IMPORT_DIR).without(Neo4jSettings.SERVER_IMPORT_DIR));
39+
static final DatabaseExtension neo4j = new DatabaseExtension();
4240

4341
@Test
4442
void shouldLoadCSV() throws Throwable {
@@ -74,7 +72,7 @@ private String createLocalIrisData(Session session) throws IOException {
7472
session.run("CREATE (c:Class {name: $className}) RETURN c", parameters("className", className));
7573
}
7674

77-
return neo4j.putTmpFile("iris", ".csv", IRIS_DATA).toExternalForm();
75+
return neo4j.addImportFile("iris", ".csv", IRIS_DATA);
7876
}
7977

8078
private static String[] IRIS_CLASS_NAMES = new String[] {"Iris-setosa", "Iris-versicolor", "Iris-virginica"};

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import static org.junit.jupiter.api.Assertions.assertEquals;
2222
import static org.junit.jupiter.api.Assertions.fail;
2323
import static org.neo4j.driver.Config.TrustStrategy.trustCustomCertificateSignedBy;
24-
import static org.neo4j.driver.util.Neo4jRunner.DEFAULT_AUTH_TOKEN;
2524

2625
import java.util.List;
2726
import java.util.concurrent.TimeUnit;
@@ -69,11 +68,12 @@ private static Stream<Arguments> data() {
6968
@MethodSource("data")
7069
void shouldRecoverFromServerRestart(String name, Config.ConfigBuilder configBuilder) {
7170
// Given config with sessionLivenessCheckTimeout not set, i.e. turned off
72-
try (Driver driver = GraphDatabase.driver(neo4j.uri(), DEFAULT_AUTH_TOKEN, configBuilder.build())) {
71+
try (Driver driver = GraphDatabase.driver(neo4j.uri(), neo4j.authToken(), configBuilder.build())) {
7372
acquireAndReleaseConnections(4, driver);
7473

7574
// When
76-
neo4j.forceRestartDb();
75+
neo4j.stopProxy();
76+
neo4j.startProxy();
7777

7878
// Then we should be able to start using sessions again, at most O(numSessions) session calls later
7979
int toleratedFailures = 4;
@@ -102,8 +102,9 @@ void shouldDropBrokenOldSessions(String name, Config.ConfigBuilder configBuilder
102102
try (Driver driver = createDriver(clock, configBuilder.build())) {
103103
acquireAndReleaseConnections(5, driver);
104104

105-
// restart database to invalidate all idle connections in the pool
106-
neo4j.forceRestartDb();
105+
// restart database access to invalidate all idle connections in the pool
106+
neo4j.stopProxy();
107+
neo4j.startProxy();
107108
// move clock forward more than configured liveness check timeout
108109
clock.progress(TimeUnit.MINUTES.toMillis(livenessCheckTimeoutMinutes + 1));
109110

@@ -131,6 +132,6 @@ private Driver createDriver(Clock clock, Config config) {
131132
RoutingSettings routingSettings = RoutingSettings.DEFAULT;
132133
RetrySettings retrySettings = RetrySettings.DEFAULT;
133134
return factory.newInstance(
134-
neo4j.uri(), DEFAULT_AUTH_TOKEN, routingSettings, retrySettings, config, SecurityPlanImpl.insecure());
135+
neo4j.uri(), neo4j.authToken(), routingSettings, retrySettings, config, SecurityPlanImpl.insecure());
135136
}
136137
}

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
import static org.neo4j.driver.internal.util.Matchers.connectionAcquisitionTimeoutError;
5151
import static org.neo4j.driver.internal.util.Neo4jFeature.BOLT_V4;
5252
import static org.neo4j.driver.util.DaemonThreadFactory.daemon;
53-
import static org.neo4j.driver.util.Neo4jRunner.DEFAULT_AUTH_TOKEN;
5453

5554
import java.util.HashSet;
5655
import java.util.List;
@@ -1247,10 +1246,9 @@ private Driver newDriverWithoutRetries() {
12471246

12481247
private Driver newDriverWithFixedRetries(int maxRetriesCount) {
12491248
DriverFactory driverFactory = new DriverFactoryWithFixedRetryLogic(maxRetriesCount);
1250-
AuthToken auth = DEFAULT_AUTH_TOKEN;
12511249
return driverFactory.newInstance(
12521250
neo4j.uri(),
1253-
auth,
1251+
neo4j.authToken(),
12541252
RoutingSettings.DEFAULT,
12551253
RetrySettings.DEFAULT,
12561254
noLoggingConfig(),

0 commit comments

Comments
 (0)