25
25
import java .net .URI ;
26
26
import java .util .List ;
27
27
import java .util .Optional ;
28
+ import java .util .function .Consumer ;
28
29
29
30
import org .neo4j .driver .internal .cluster .RoutingSettings ;
30
31
import org .neo4j .driver .internal .retry .RetrySettings ;
@@ -150,7 +151,7 @@ void shouldSendReadAccessModeInStatementMetadata() throws Exception
150
151
StubServer server = StubServer .start ( "hello_run_exit_read.script" , 9001 );
151
152
152
153
try ( Driver driver = GraphDatabase .driver ( "bolt://localhost:9001" , INSECURE_CONFIG );
153
- Session session = driver .session ( AccessMode .READ ) )
154
+ Session session = driver .session ( AccessMode .READ ) )
154
155
{
155
156
List <String > names = session .run ( "MATCH (n) RETURN n.name" ).list ( record -> record .get ( 0 ).asString () );
156
157
assertEquals ( asList ( "Foo" , "Bar" ), names );
@@ -167,7 +168,7 @@ void shouldNotSendWriteAccessModeInStatementMetadata() throws Exception
167
168
StubServer server = StubServer .start ( "hello_run_exit.script" , 9001 );
168
169
169
170
try ( Driver driver = GraphDatabase .driver ( "bolt://localhost:9001" , INSECURE_CONFIG );
170
- Session session = driver .session ( AccessMode .WRITE ) )
171
+ Session session = driver .session ( AccessMode .WRITE ) )
171
172
{
172
173
List <String > names = session .run ( "MATCH (n) RETURN n.name" ).list ( record -> record .get ( 0 ).asString () );
173
174
assertEquals ( asList ( "Foo" , "Bar" ), names );
@@ -209,36 +210,62 @@ void shouldCloseChannelWhenResetFails() throws Exception
209
210
}
210
211
211
212
@ Test
212
- void shouldPropagateTransactionCommitErrorWhenSessionClosed () throws Exception
213
+ void shouldPropagateTransactionRollbackErrorWhenSessionClosed () throws Exception
213
214
{
214
- testTransactionCloseErrorPropagationWhenSessionClosed ( "commit_error.script" , true , "Unable to commit" );
215
+ StubServer server = StubServer .start ( "rollback_error.script" , 9001 );
216
+ try
217
+ {
218
+ try ( Driver driver = GraphDatabase .driver ( "bolt://localhost:9001" , INSECURE_CONFIG ) )
219
+ {
220
+ Session session = driver .session ();
221
+
222
+ Transaction tx = session .beginTransaction ();
223
+ StatementResult result = tx .run ( "CREATE (n {name:'Alice'}) RETURN n.name AS name" );
224
+ assertEquals ( "Alice" , result .single ().get ( "name" ).asString () );
225
+
226
+ TransientException e = assertThrows ( TransientException .class , session ::close );
227
+ assertEquals ( "Neo.TransientError.General.DatabaseUnavailable" , e .code () );
228
+ assertEquals ( "Unable to rollback" , e .getMessage () );
229
+ }
230
+ }
231
+ finally
232
+ {
233
+ assertEquals ( 0 , server .exitStatus () );
234
+ }
215
235
}
216
236
217
237
@ Test
218
- void shouldPropagateTransactionRollbackErrorWhenSessionClosed () throws Exception
238
+ void shouldThrowCommitErrorWhenTransactionCommit () throws Exception
219
239
{
220
- testTransactionCloseErrorPropagationWhenSessionClosed ( "rollback_error.script" , false , "Unable to rollback" );
240
+ testTxCloseErrorPropagation ( "commit_error.script" , tx -> {
241
+ tx .success ();
242
+ tx .close ();
243
+ }, "Unable to commit" );
221
244
}
222
245
223
246
@ Test
224
- void shouldThrowCommitErrorWhenTransactionClosed () throws Exception
247
+ void shouldThrowRollbackErrorWhenTransactionRollback () throws Exception
225
248
{
226
- testTxCloseErrorPropagation ( "commit_error.script" , true , "Unable to commit" );
249
+ testTxCloseErrorPropagation ( "rollback_error.script" , tx -> {
250
+ tx .failure ();
251
+ tx .close ();
252
+ }, "Unable to rollback" );
227
253
}
228
254
229
255
@ Test
230
- void shouldThrowRollbackErrorWhenTransactionClosed () throws Exception
256
+ void shouldThrowRollbackErrorWhenTransactionClose () throws Exception
231
257
{
232
- testTxCloseErrorPropagation ( "rollback_error.script" , false , "Unable to rollback" );
258
+ testTxCloseErrorPropagation ( "rollback_error.script" , Transaction :: close , "Unable to rollback" );
233
259
}
234
260
261
+
235
262
@ Test
236
263
void shouldThrowCorrectErrorOnRunFailure () throws Throwable
237
264
{
238
265
StubServer server = StubServer .start ( "database_shutdown.script" , 9001 );
239
266
240
267
try ( Driver driver = GraphDatabase .driver ( "bolt://localhost:9001" , INSECURE_CONFIG );
241
- Session session = driver .session ( "neo4j:bookmark:v1:tx0" );
268
+ Session session = driver .session ( "neo4j:bookmark:v1:tx0" );
242
269
// has to enforce to flush BEGIN to have tx started.
243
270
Transaction transaction = session .beginTransaction () )
244
271
{
@@ -260,7 +287,7 @@ void shouldThrowCorrectErrorOnCommitFailure() throws Throwable
260
287
StubServer server = StubServer .start ( "database_shutdown_at_commit.script" , 9001 );
261
288
262
289
try ( Driver driver = GraphDatabase .driver ( "bolt://localhost:9001" , INSECURE_CONFIG );
263
- Session session = driver .session () )
290
+ Session session = driver .session () )
264
291
{
265
292
Transaction transaction = session .beginTransaction ();
266
293
StatementResult result = transaction .run ( "CREATE (n {name:'Bob'})" );
@@ -276,41 +303,7 @@ void shouldThrowCorrectErrorOnCommitFailure() throws Throwable
276
303
}
277
304
}
278
305
279
- private static void testTransactionCloseErrorPropagationWhenSessionClosed ( String script , boolean commit ,
280
- String expectedErrorMessage ) throws Exception
281
- {
282
- StubServer server = StubServer .start ( script , 9001 );
283
- try
284
- {
285
- try ( Driver driver = GraphDatabase .driver ( "bolt://localhost:9001" , INSECURE_CONFIG ) )
286
- {
287
- Session session = driver .session ();
288
-
289
- Transaction tx = session .beginTransaction ();
290
- StatementResult result = tx .run ( "CREATE (n {name:'Alice'}) RETURN n.name AS name" );
291
- assertEquals ( "Alice" , result .single ().get ( "name" ).asString () );
292
-
293
- if ( commit )
294
- {
295
- tx .success ();
296
- }
297
- else
298
- {
299
- tx .failure ();
300
- }
301
-
302
- TransientException e = assertThrows ( TransientException .class , session ::close );
303
- assertEquals ( "Neo.TransientError.General.DatabaseUnavailable" , e .code () );
304
- assertEquals ( expectedErrorMessage , e .getMessage () );
305
- }
306
- }
307
- finally
308
- {
309
- assertEquals ( 0 , server .exitStatus () );
310
- }
311
- }
312
-
313
- private static void testTxCloseErrorPropagation ( String script , boolean commit , String expectedErrorMessage )
306
+ private static void testTxCloseErrorPropagation ( String script , Consumer <Transaction > txAction , String expectedErrorMessage )
314
307
throws Exception
315
308
{
316
309
StubServer server = StubServer .start ( script , 9001 );
@@ -323,16 +316,8 @@ private static void testTxCloseErrorPropagation( String script, boolean commit,
323
316
StatementResult result = tx .run ( "CREATE (n {name:'Alice'}) RETURN n.name AS name" );
324
317
assertEquals ( "Alice" , result .single ().get ( "name" ).asString () );
325
318
326
- if ( commit )
327
- {
328
- tx .success ();
329
- }
330
- else
331
- {
332
- tx .failure ();
333
- }
319
+ TransientException e = assertThrows ( TransientException .class , () -> txAction .accept ( tx ) );
334
320
335
- TransientException e = assertThrows ( TransientException .class , tx ::close );
336
321
assertEquals ( "Neo.TransientError.General.DatabaseUnavailable" , e .code () );
337
322
assertEquals ( expectedErrorMessage , e .getMessage () );
338
323
}
0 commit comments