Skip to content

Commit 2a6c6f1

Browse files
authored
Migrating tests to testkit (#832)
* Migrating tests to testkit Short summary of this update: - removed migrated tests - verifyConnectivity support - resolver support - consume support Test mapping (dest: stub/routing.py): - shouldHandleAcquireReadSession -> test_should_read_successfully_from_reader_using_session_run - shouldHandleAcquireReadTransaction -> test_should_read_successfully_from_reader_using_tx_function - shouldHandleAcquireReadSessionAndTransaction -> test_should_read_successfully_from_reader_using_tx_run - shouldRoundRobinReadServers -> test_should_round_robin_readers_when_reading_using_session_run - shouldRoundRobinReadServersWhenUsingTransaction -> test_should_round_robin_readers_when_reading_using_tx_run - shouldThrowSessionExpiredIfReadServerDisappears -> test_should_fail_when_reading_from_unexpectedly_interrupting_reader_using_session_run - shouldThrowSessionExpiredIfReadServerDisappearsWhenUsingTransaction -> test_should_fail_when_reading_from_unexpectedly_interrupting_reader_using_tx_run - shouldThrowSessionExpiredIfWriteServerDisappears -> test_should_fail_when_writing_on_unexpectedly_interrupting_writer_using_session_run - shouldThrowSessionExpiredIfWriteServerDisappearsWhenUsingTransaction -> test_should_fail_when_writing_on_unexpectedly_interrupting_writer_using_tx_run - shouldHandleAcquireWriteSession -> test_should_write_successfully_on_writer_using_session_run - shouldHandleAcquireWriteTransaction -> test_should_write_successfully_on_writer_using_tx_function - shouldHandleAcquireWriteSessionAndTransaction -> test_should_write_successfully_on_writer_using_tx_run - shouldRoundRobinWriteSessions -> test_should_round_robin_writers_when_writing_using_session_run - shouldRoundRobinWriteSessionsInTransaction -> test_should_round_robin_writers_when_writing_using_tx_run - shouldFailOnNonDiscoverableServer -> test_should_fail_discovery_when_router_fails_with_procedure_not_found_code - shouldFailRandomFailureInGetServers -> test_should_fail_discovery_when_router_fails_with_unknown_code - shouldHandleLeaderSwitchWhenWriting -> test_should_fail_when_writing_on_writer_that_returns_not_a_leader_code - shouldHandleLeaderSwitchWhenWritingWithoutConsuming -> test_should_fail_when_writing_without_explicit_consumption_on_writer_that_returns_not_a_leader_code - shouldHandleLeaderSwitchWhenWritingInTransaction -> test_should_fail_when_writing_on_writer_that_returns_not_a_leader_code_using_tx_run - shouldUseWriteSessionModeAndInitialBookmark -> test_should_use_write_session_mode_and_initial_bookmark_when_writing_using_tx_run - shouldUseReadSessionModeAndInitialBookmark -> test_should_use_read_session_mode_and_initial_bookmark_when_reading_using_tx_run - shouldPassBookmarkFromTransactionToTransaction -> test_should_pass_bookmark_from_tx_to_tx_using_tx_run - shouldRetryReadTransactionUntilSuccess -> test_should_retry_read_tx_until_success - shouldRetryWriteTransactionUntilSuccess -> test_should_retry_write_tx_until_success - shouldRetryReadTransactionAndPerformRediscoveryUntilSuccess -> test_should_retry_read_tx_and_rediscovery_until_success - shouldRetryWriteTransactionAndPerformRediscoveryUntilSuccess -> test_should_retry_write_tx_and_rediscovery_until_success - shouldUseInitialRouterForRediscoveryWhenAllOtherRoutersAreDead -> test_should_use_initial_router_for_discovery_when_others_unavailable - shouldInvokeProcedureGetRoutingTableWhenServerVersionPermits -> test_should_successfully_read_from_readable_router_using_tx_function - shouldSendEmptyRoutingContextInHelloMessage -> test_should_send_empty_hello - shouldServeReadsButFailWritesWhenNoWritersAvailable -> test_should_serve_reads_and_fail_writes_when_no_writers_available - shouldAcceptRoutingTableWithoutWritersAndThenRediscover -> test_should_accept_routing_table_without_writers_and_then_rediscover - shouldTreatRoutingTableWithSingleRouterAsValid -> test_should_accept_routing_table_with_single_router - shouldSendMultipleBookmarks -> test_should_successfully_send_multiple_bookmarks - shouldForgetAddressOnDatabaseUnavailableError -> test_should_forget_address_on_database_unavailable_error - shouldUseResolverDuringRediscoveryWhenExistingRoutersFail -> test_should_use_resolver_during_rediscovery_when_existing_routers_fail - shouldRevertToInitialRouterIfKnownRouterThrowsProtocolErrors -> test_should_revert_to_initial_router_if_known_router_throws_protocol_errors * Removing redundant stub server scripts
1 parent a19d468 commit 2a6c6f1

32 files changed

+302
-1183
lines changed

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

Lines changed: 14 additions & 928 deletions
Large diffs are not rendered by default.

driver/src/test/resources/acquire_endpoints_v3_9010.script

Lines changed: 0 additions & 10 deletions
This file was deleted.

driver/src/test/resources/acquire_endpoints_v3_empty.script

Lines changed: 0 additions & 10 deletions
This file was deleted.

driver/src/test/resources/acquire_endpoints_v3_point_to_empty_router_and_exit.script

Lines changed: 0 additions & 10 deletions
This file was deleted.

driver/src/test/resources/acquire_endpoints_v3_three_servers_and_exit.script

Lines changed: 0 additions & 12 deletions
This file was deleted.

driver/src/test/resources/dead_read_server.script

Lines changed: 0 additions & 8 deletions
This file was deleted.

driver/src/test/resources/discover_failed.script

Lines changed: 0 additions & 12 deletions
This file was deleted.

driver/src/test/resources/discover_no_writers.script

Lines changed: 0 additions & 10 deletions
This file was deleted.

driver/src/test/resources/discover_no_writers_9010.script

Lines changed: 0 additions & 10 deletions
This file was deleted.

driver/src/test/resources/discover_one_router.script

Lines changed: 0 additions & 10 deletions
This file was deleted.

driver/src/test/resources/discover_servers_9010.script

Lines changed: 0 additions & 10 deletions
This file was deleted.

driver/src/test/resources/empty_routing_context_in_hello_neo4j.script

Lines changed: 0 additions & 17 deletions
This file was deleted.

driver/src/test/resources/get_routing_table.script

Lines changed: 0 additions & 18 deletions
This file was deleted.

driver/src/test/resources/not_able_to_write_server.script

Lines changed: 0 additions & 13 deletions
This file was deleted.

driver/src/test/resources/read_server_v3_read_tx.script

Lines changed: 0 additions & 16 deletions
This file was deleted.

driver/src/test/resources/read_tx_with_bookmarks.script

Lines changed: 0 additions & 15 deletions
This file was deleted.

driver/src/test/resources/rediscover_using_initial_router.script

Lines changed: 0 additions & 18 deletions
This file was deleted.

driver/src/test/resources/write_read_tx_with_bookmarks.script

Lines changed: 0 additions & 22 deletions
This file was deleted.

driver/src/test/resources/write_server_v3_write.script

Lines changed: 0 additions & 9 deletions
This file was deleted.

driver/src/test/resources/write_with_bookmarks.script

Lines changed: 0 additions & 9 deletions
This file was deleted.

driver/src/test/resources/writer_unavailable.script

Lines changed: 0 additions & 10 deletions
This file was deleted.

testkit-backend/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
<dependency>
3636
<groupId>org.projectlombok</groupId>
3737
<artifactId>lombok</artifactId>
38-
<version>1.18.12</version>
38+
<version>1.18.16</version>
3939
<scope>provided</scope>
4040
</dependency>
4141

testkit-backend/src/main/java/neo4j/org/testkit/backend/CommandProcessor.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
import com.fasterxml.jackson.core.JsonProcessingException;
2222
import com.fasterxml.jackson.databind.DeserializationFeature;
23-
import com.fasterxml.jackson.databind.JsonNode;
2423
import com.fasterxml.jackson.databind.ObjectMapper;
2524
import neo4j.org.testkit.backend.messages.TestkitModule;
2625
import neo4j.org.testkit.backend.messages.requests.TestkitRequest;
@@ -147,7 +146,7 @@ else if ( currentLine.equals( "#request end" ) )
147146
// Error to track
148147
String id = testkitState.newId();
149148
testkitState.getErrors().put( id, (Neo4jException) e );
150-
writeResponse( driverError( id ) );
149+
writeResponse( driverError( id, (Neo4jException) e ) );
151150
System.out.println( "Neo4jException: " + e );
152151
}
153152
else
@@ -174,9 +173,9 @@ else if ( currentLine.equals( "#request end" ) )
174173
}
175174
}
176175

177-
private DriverError driverError( String id )
176+
private DriverError driverError( String id, Neo4jException e )
178177
{
179-
return DriverError.builder().data( DriverError.DriverErrorBody.builder().id( id ).build() ).build();
178+
return DriverError.builder().data( DriverError.DriverErrorBody.builder().id( id ).errorType( e.getClass().getName() ).build() ).build();
180179
}
181180

182181
public void processRequest( String request )

testkit-backend/src/main/java/neo4j/org/testkit/backend/TestkitState.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@
2323

2424
import java.util.HashMap;
2525
import java.util.Map;
26+
import java.util.Set;
2627
import java.util.function.Consumer;
2728
import java.util.function.Supplier;
2829

2930
import org.neo4j.driver.Driver;
3031
import org.neo4j.driver.Result;
3132
import org.neo4j.driver.Transaction;
3233
import org.neo4j.driver.exceptions.Neo4jException;
34+
import org.neo4j.driver.net.ServerAddress;
3335

3436
@Getter
3537
public class TestkitState
@@ -42,6 +44,7 @@ public class TestkitState
4244
private int idGenerator = 0;
4345
private final Consumer<TestkitResponse> responseWriter;
4446
private final Supplier<Boolean> processor;
47+
private final Map<String,Set<ServerAddress>> idToServerAddresses = new HashMap<>();
4548

4649
public TestkitState( Consumer<TestkitResponse> responseWriter, Supplier<Boolean> processor )
4750
{

testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/NewDriver.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import lombok.Setter;
2424
import neo4j.org.testkit.backend.TestkitState;
2525
import neo4j.org.testkit.backend.messages.responses.Driver;
26+
import neo4j.org.testkit.backend.messages.responses.ResolverResolutionRequired;
2627
import neo4j.org.testkit.backend.messages.responses.TestkitErrorResponse;
2728
import neo4j.org.testkit.backend.messages.responses.TestkitResponse;
2829

@@ -32,6 +33,7 @@
3233
import org.neo4j.driver.AuthTokens;
3334
import org.neo4j.driver.Config;
3435
import org.neo4j.driver.GraphDatabase;
36+
import org.neo4j.driver.net.ServerAddressResolver;
3537

3638
@Setter
3739
@Getter
@@ -59,11 +61,35 @@ public TestkitResponse process( TestkitState testkitState )
5961
}
6062

6163
Config.ConfigBuilder configBuilder = Config.builder();
64+
if ( data.isResolverRegistered() )
65+
{
66+
configBuilder.withResolver( callbackResolver( testkitState ) );
67+
}
6268
Optional.ofNullable( data.userAgent ).ifPresent( configBuilder::withUserAgent );
6369
testkitState.getDrivers().putIfAbsent( id, GraphDatabase.driver( data.uri, authToken, configBuilder.build() ) );
6470
return Driver.builder().data( Driver.DriverBody.builder().id( id ).build() ).build();
6571
}
6672

73+
private ServerAddressResolver callbackResolver( TestkitState testkitState )
74+
{
75+
return address ->
76+
{
77+
String callbackId = testkitState.newId();
78+
ResolverResolutionRequired.ResolverResolutionRequiredBody body =
79+
ResolverResolutionRequired.ResolverResolutionRequiredBody.builder()
80+
.id( callbackId )
81+
.address( address.toString() )
82+
.build();
83+
ResolverResolutionRequired response =
84+
ResolverResolutionRequired.builder()
85+
.data( body )
86+
.build();
87+
testkitState.getResponseWriter().accept( response );
88+
testkitState.getProcessor().get();
89+
return testkitState.getIdToServerAddresses().remove( callbackId );
90+
};
91+
}
92+
6793
@Setter
6894
@Getter
6995
@NoArgsConstructor
@@ -72,5 +98,6 @@ public static class NewDriverBody
7298
private String uri;
7399
private AuthorizationToken authorizationToken;
74100
private String userAgent;
101+
private boolean resolverRegistered;
75102
}
76103
}

0 commit comments

Comments
 (0)