Skip to content

Commit 4b2ff5a

Browse files
committed
Update backend to report no routing context as DriverError (neo4j#915)
1 parent 13c2dda commit 4b2ff5a

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

driver/src/main/java/org/neo4j/driver/internal/DriverFactory.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,16 @@
6161

6262
public class DriverFactory
6363
{
64+
public static final String NO_ROUTING_CONTEXT_ERROR_MESSAGE = "Routing parameters are not supported with scheme 'bolt'. Given URI: ";
65+
6466
public final Driver newInstance( URI uri, AuthToken authToken, RoutingSettings routingSettings,
6567
RetrySettings retrySettings, Config config, SecurityPlan securityPlan )
6668
{
6769
return newInstance( uri, authToken, routingSettings, retrySettings, config, null, securityPlan );
6870
}
6971

70-
public final Driver newInstance ( URI uri, AuthToken authToken, RoutingSettings routingSettings,
71-
RetrySettings retrySettings, Config config, EventLoopGroup eventLoopGroup, SecurityPlan securityPlan )
72+
public final Driver newInstance( URI uri, AuthToken authToken, RoutingSettings routingSettings,
73+
RetrySettings retrySettings, Config config, EventLoopGroup eventLoopGroup, SecurityPlan securityPlan )
7274
{
7375
Bootstrap bootstrap;
7476
boolean ownsEventLoopGroup;
@@ -288,8 +290,7 @@ private static void assertNoRoutingContext( URI uri, RoutingSettings routingSett
288290
RoutingContext routingContext = routingSettings.routingContext();
289291
if ( routingContext.isDefined() )
290292
{
291-
throw new IllegalArgumentException(
292-
"Routing parameters are not supported with scheme 'bolt'. Given URI: '" + uri + "'" );
293+
throw new IllegalArgumentException( NO_ROUTING_CONTEXT_ERROR_MESSAGE + "'" + uri + "'" );
293294
}
294295
}
295296

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

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import neo4j.org.testkit.backend.TestkitState;
2626
import neo4j.org.testkit.backend.messages.responses.DomainNameResolutionRequired;
2727
import neo4j.org.testkit.backend.messages.responses.Driver;
28+
import neo4j.org.testkit.backend.messages.responses.DriverError;
2829
import neo4j.org.testkit.backend.messages.responses.ResolverResolutionRequired;
2930
import neo4j.org.testkit.backend.messages.responses.TestkitErrorResponse;
3031
import neo4j.org.testkit.backend.messages.responses.TestkitResponse;
@@ -82,7 +83,16 @@ public TestkitResponse process( TestkitState testkitState )
8283
}
8384
Optional.ofNullable( data.userAgent ).ifPresent( configBuilder::withUserAgent );
8485
Optional.ofNullable( data.connectionTimeoutMs ).ifPresent( timeout -> configBuilder.withConnectionTimeout( timeout, TimeUnit.MILLISECONDS ) );
85-
testkitState.getDrivers().putIfAbsent( id, driver( URI.create( data.uri ), authToken, configBuilder.build(), domainNameResolver ) );
86+
org.neo4j.driver.Driver driver;
87+
try
88+
{
89+
driver = driver( URI.create( data.uri ), authToken, configBuilder.build(), domainNameResolver );
90+
}
91+
catch ( RuntimeException e )
92+
{
93+
return handleExceptionAsErrorResponse( testkitState, e ).orElseThrow( () -> e );
94+
}
95+
testkitState.getDrivers().putIfAbsent( id, driver );
8696
return Driver.builder().data( Driver.DriverBody.builder().id( id ).build() ).build();
8797
}
8898

@@ -137,6 +147,20 @@ private org.neo4j.driver.Driver driver( URI uri, AuthToken authToken, Config con
137147
.newInstance( uri, authToken, routingSettings, retrySettings, config, securityPlan );
138148
}
139149

150+
private Optional<TestkitResponse> handleExceptionAsErrorResponse( TestkitState testkitState, RuntimeException e )
151+
{
152+
Optional<TestkitResponse> response = Optional.empty();
153+
if ( e instanceof IllegalArgumentException && e.getMessage().startsWith( DriverFactory.NO_ROUTING_CONTEXT_ERROR_MESSAGE ) )
154+
{
155+
String id = testkitState.newId();
156+
String errorType = e.getClass().getName();
157+
response = Optional.of(
158+
DriverError.builder().data( DriverError.DriverErrorBody.builder().id( id ).errorType( errorType ).build() ).build()
159+
);
160+
}
161+
return response;
162+
}
163+
140164
@Setter
141165
@Getter
142166
@NoArgsConstructor

0 commit comments

Comments
 (0)