diff --git a/driver/src/test/java/org/neo4j/driver/internal/DirectDriverBoltKitIT.java b/driver/src/test/java/org/neo4j/driver/internal/DirectDriverBoltKitIT.java index d28e1ee4cc..2cc84e5dc6 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/DirectDriverBoltKitIT.java +++ b/driver/src/test/java/org/neo4j/driver/internal/DirectDriverBoltKitIT.java @@ -117,31 +117,6 @@ void shouldCloseChannelWhenResetFails() throws Exception } } - @Test - void shouldPropagateTransactionRollbackErrorWhenSessionClosed() throws Exception - { - StubServer server = stubController.startStub( "rollback_error.script", 9001 ); - try - { - try ( Driver driver = GraphDatabase.driver( "bolt://localhost:9001", INSECURE_CONFIG ) ) - { - Session session = driver.session(); - - Transaction tx = session.beginTransaction(); - Result result = tx.run( "CREATE (n {name:'Alice'}) RETURN n.name AS name" ); - assertEquals( "Alice", result.single().get( "name" ).asString() ); - - TransientException e = assertThrows( TransientException.class, session::close ); - assertEquals( "Neo.TransientError.General.DatabaseUnavailable", e.code() ); - assertEquals( "Unable to rollback", e.getMessage() ); - } - } - finally - { - assertEquals( 0, server.exitStatus() ); - } - } - @Test void shouldStreamingRecordsInBatchesRx() throws Exception { @@ -162,46 +137,6 @@ void shouldStreamingRecordsInBatchesRx() throws Exception } } - @Test - void shouldStreamingRecordsInBatches() throws Exception - { - StubServer server = stubController.startStub( "streaming_records_v4.script", 9001 ); - try - { - try ( Driver driver = GraphDatabase.driver( "bolt://localhost:9001", insecureBuilder().withFetchSize( 2 ).build() ) ) - { - Session session = driver.session(); - Result result = session.run( "MATCH (n) RETURN n.name" ); - List list = result.list( record -> record.get( "n.name" ).asString() ); - assertEquals( list, asList( "Bob", "Alice", "Tina" ) ); - } - } - finally - { - assertEquals( 0, server.exitStatus() ); - } - } - - @Test - void shouldChangeFetchSize() throws Exception - { - StubServer server = stubController.startStub( "streaming_records_v4.script", 9001 ); - try - { - try ( Driver driver = GraphDatabase.driver( "bolt://localhost:9001", INSECURE_CONFIG ) ) - { - Session session = driver.session( builder().withFetchSize( 2 ).build() ); - Result result = session.run( "MATCH (n) RETURN n.name" ); - List list = result.list( record -> record.get( "n.name" ).asString() ); - assertEquals( list, asList( "Bob", "Alice", "Tina" ) ); - } - } - finally - { - assertEquals( 0, server.exitStatus() ); - } - } - @Test void shouldOnlyPullRecordsWhenNeededSimpleSession() throws Exception { @@ -297,19 +232,6 @@ void shouldThrowCommitErrorWhenTransactionCommit() throws Exception testTxCloseErrorPropagation( "commit_error.script", Transaction::commit, "Unable to commit" ); } - @Test - void shouldThrowRollbackErrorWhenTransactionRollback() throws Exception - { - testTxCloseErrorPropagation( "rollback_error.script", Transaction::rollback, "Unable to rollback" ); - } - - @Test - void shouldThrowRollbackErrorWhenTransactionClose() throws Exception - { - testTxCloseErrorPropagation( "rollback_error.script", Transaction::close, "Unable to rollback" ); - } - - @Test void shouldThrowCorrectErrorOnRunFailure() throws Throwable { diff --git a/driver/src/test/resources/rollback_error.script b/driver/src/test/resources/rollback_error.script deleted file mode 100644 index ef0ff1260c..0000000000 --- a/driver/src/test/resources/rollback_error.script +++ /dev/null @@ -1,17 +0,0 @@ -!: BOLT 3 -!: AUTO HELLO -!: AUTO GOODBYE - -C: BEGIN {} -S: SUCCESS {} -C: RUN "CREATE (n {name:'Alice'}) RETURN n.name AS name" {} {} - PULL_ALL -S: SUCCESS {"fields": ["name"]} - RECORD ["Alice"] - SUCCESS {} -C: ROLLBACK -S: FAILURE {"code": "Neo.TransientError.General.DatabaseUnavailable", "message": "Unable to rollback"} -C: RESET -S: SUCCESS {} -C: RESET -S: SUCCESS {} diff --git a/driver/src/test/resources/streaming_records_v4.script b/driver/src/test/resources/streaming_records_v4.script deleted file mode 100644 index 2a993d64c4..0000000000 --- a/driver/src/test/resources/streaming_records_v4.script +++ /dev/null @@ -1,14 +0,0 @@ -!: BOLT 4 -!: AUTO RESET -!: AUTO HELLO -!: AUTO GOODBYE - -C: RUN "MATCH (n) RETURN n.name" {} {} - PULL { "n": 2 } -S: SUCCESS {"fields": ["n.name"]} - RECORD ["Bob"] - RECORD ["Alice"] - SUCCESS {"has_more": true} -C: PULL { "n": -1 } -S: RECORD ["Tina"] - SUCCESS {} diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/CommandProcessor.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/CommandProcessor.java index cf8d5f0c41..ca752be049 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/CommandProcessor.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/CommandProcessor.java @@ -180,6 +180,7 @@ private DriverError driverError( String id, Neo4jException e ) .id( id ) .errorType( e.getClass().getName() ) .code( e.code() ) + .msg( e.getMessage() ) .build() ) .build(); } diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/GetFeatures.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/GetFeatures.java index aafea6e41c..03600fadbe 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/GetFeatures.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/GetFeatures.java @@ -37,7 +37,9 @@ public class GetFeatures implements TestkitRequest private static final Set FEATURES = new HashSet<>( Arrays.asList( "AuthorizationExpiredTreatment", "Optimization:PullPipelining", - "ConfHint:connection.recv_timeout_seconds" + "ConfHint:connection.recv_timeout_seconds", + "Temporary:TransactionClose", + "Temporary:DriverFetchSize" ) ); @Override diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/NewDriver.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/NewDriver.java index ec9f98a0bc..9821d59c21 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/NewDriver.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/NewDriver.java @@ -89,6 +89,7 @@ public TestkitResponse process( TestkitState testkitState ) } Optional.ofNullable( data.userAgent ).ifPresent( configBuilder::withUserAgent ); Optional.ofNullable( data.connectionTimeoutMs ).ifPresent( timeout -> configBuilder.withConnectionTimeout( timeout, TimeUnit.MILLISECONDS ) ); + Optional.ofNullable( data.fetchSize ).ifPresent( configBuilder::withFetchSize ); org.neo4j.driver.Driver driver; try { @@ -179,6 +180,7 @@ public static class NewDriverBody private boolean resolverRegistered; private boolean domainNameResolverRegistered; private Long connectionTimeoutMs; + private Integer fetchSize; } @RequiredArgsConstructor diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TestkitRequest.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TestkitRequest.java index 0a1afdd964..c2a22a7d6e 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TestkitRequest.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TestkitRequest.java @@ -36,7 +36,7 @@ @JsonSubTypes.Type( ResolverResolutionCompleted.class ), @JsonSubTypes.Type( CheckMultiDBSupport.class ), @JsonSubTypes.Type( DomainNameResolutionCompleted.class ), @JsonSubTypes.Type( StartTest.class ), @JsonSubTypes.Type( TransactionRollback.class ), @JsonSubTypes.Type( GetFeatures.class ), - @JsonSubTypes.Type( GetRoutingTable.class ) + @JsonSubTypes.Type( GetRoutingTable.class ), @JsonSubTypes.Type( TransactionClose.class ) } ) public interface TestkitRequest { diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TransactionClose.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TransactionClose.java new file mode 100644 index 0000000000..d047e49d19 --- /dev/null +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TransactionClose.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) "Neo4j" + * Neo4j Sweden AB [http://neo4j.com] + * + * This file is part of Neo4j. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package neo4j.org.testkit.backend.messages.requests; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import neo4j.org.testkit.backend.TestkitState; +import neo4j.org.testkit.backend.messages.responses.TestkitResponse; +import neo4j.org.testkit.backend.messages.responses.Transaction; + +import java.util.Optional; + +@Setter +@Getter +@NoArgsConstructor +public class TransactionClose implements TestkitRequest +{ + private TransactionCloseBody data; + + @Override + public TestkitResponse process( TestkitState testkitState ) + { + return Optional.ofNullable( testkitState.getTransactions().get( data.txId ) ) + .map( tx -> + { + tx.close(); + return transaction( data.txId ); + } ) + .orElseThrow( () -> new RuntimeException( "Could not find transaction" ) ); + } + + private Transaction transaction( String txId ) + { + return Transaction.builder().data( Transaction.TransactionBody.builder().id( txId ).build() ).build(); + } + + @Setter + @Getter + @NoArgsConstructor + private static class TransactionCloseBody + { + private String txId; + } +} diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/responses/DriverError.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/responses/DriverError.java index d7379a7484..d7d4a17697 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/responses/DriverError.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/responses/DriverError.java @@ -45,5 +45,7 @@ public static class DriverErrorBody private String errorType; private String code; + + private String msg; } }