@@ -88,8 +88,7 @@ void testSimpleTransaction() {
88
88
89
89
ConnectionFactoryUtils .getConnection (connectionFactoryMock )
90
90
.flatMap (connection -> TransactionSynchronizationManager .forCurrentTransaction ()
91
- .doOnNext (synchronizationManager -> synchronizationManager .registerSynchronization (
92
- sync )))
91
+ .doOnNext (synchronizationManager -> synchronizationManager .registerSynchronization (sync )))
93
92
.as (operator ::transactional )
94
93
.as (StepVerifier ::create )
95
94
.expectNextCount (1 )
@@ -120,12 +119,11 @@ void testBeginFails() {
120
119
121
120
TransactionalOperator operator = TransactionalOperator .create (tm , definition );
122
121
123
- ConnectionFactoryUtils .getConnection (connectionFactoryMock ). as (
124
- operator ::transactional )
122
+ ConnectionFactoryUtils .getConnection (connectionFactoryMock )
123
+ . as ( operator ::transactional )
125
124
.as (StepVerifier ::create )
126
125
.expectErrorSatisfies (actual -> assertThat (actual ).isInstanceOf (
127
- CannotCreateTransactionException .class ).hasCauseInstanceOf (
128
- R2dbcBadGrammarException .class ))
126
+ CannotCreateTransactionException .class ).hasCauseInstanceOf (R2dbcBadGrammarException .class ))
129
127
.verify ();
130
128
}
131
129
@@ -140,12 +138,16 @@ void appliesTransactionDefinition() {
140
138
definition .setIsolationLevel (TransactionDefinition .ISOLATION_SERIALIZABLE );
141
139
142
140
TransactionalOperator operator = TransactionalOperator .create (tm , definition );
143
-
144
- ConnectionFactoryUtils .getConnection (connectionFactoryMock ).as (
145
- operator ::transactional )
146
- .as (StepVerifier ::create )
147
- .expectNextCount (1 )
148
- .verifyComplete ();
141
+ operator .execute (tx -> {
142
+ assertThat (tx .getTransactionName ()).isEqualTo ("my-transaction" );
143
+ assertThat (tx .hasTransaction ()).isTrue ();
144
+ assertThat (tx .isNewTransaction ()).isTrue ();
145
+ assertThat (tx .isNested ()).isFalse ();
146
+ assertThat (tx .isReadOnly ()).isTrue ();
147
+ assertThat (tx .isRollbackOnly ()).isFalse ();
148
+ assertThat (tx .isCompleted ()).isFalse ();
149
+ return Mono .empty ();
150
+ }).as (StepVerifier ::create ).verifyComplete ();
149
151
150
152
ArgumentCaptor <io .r2dbc .spi .TransactionDefinition > txCaptor = ArgumentCaptor .forClass (io .r2dbc .spi .TransactionDefinition .class );
151
153
verify (connectionMock ).beginTransaction (txCaptor .capture ());
@@ -171,8 +173,8 @@ void doesNotSetIsolationLevelIfMatch() {
171
173
172
174
TransactionalOperator operator = TransactionalOperator .create (tm , definition );
173
175
174
- ConnectionFactoryUtils .getConnection (connectionFactoryMock ). as (
175
- operator ::transactional )
176
+ ConnectionFactoryUtils .getConnection (connectionFactoryMock )
177
+ . as ( operator ::transactional )
176
178
.as (StepVerifier ::create )
177
179
.expectNextCount (1 )
178
180
.verifyComplete ();
@@ -190,8 +192,8 @@ void doesNotSetAutoCommitDisabled() {
190
192
191
193
TransactionalOperator operator = TransactionalOperator .create (tm , definition );
192
194
193
- ConnectionFactoryUtils .getConnection (connectionFactoryMock ). as (
194
- operator ::transactional )
195
+ ConnectionFactoryUtils .getConnection (connectionFactoryMock )
196
+ . as ( operator ::transactional )
195
197
.as (StepVerifier ::create )
196
198
.expectNextCount (1 )
197
199
.verifyComplete ();
@@ -215,8 +217,8 @@ void appliesReadOnly() {
215
217
216
218
TransactionalOperator operator = TransactionalOperator .create (tm , definition );
217
219
218
- ConnectionFactoryUtils .getConnection (connectionFactoryMock ). as (
219
- operator ::transactional )
220
+ ConnectionFactoryUtils .getConnection (connectionFactoryMock )
221
+ . as ( operator ::transactional )
220
222
.as (StepVerifier ::create )
221
223
.expectNextCount (1 )
222
224
.verifyComplete ();
@@ -262,11 +264,9 @@ void testRollback() {
262
264
TransactionalOperator operator = TransactionalOperator .create (tm );
263
265
264
266
ConnectionFactoryUtils .getConnection (connectionFactoryMock )
265
- .doOnNext (connection -> {
266
- throw new IllegalStateException ();
267
- }).as (operator ::transactional )
268
- .as (StepVerifier ::create )
269
- .verifyError (IllegalStateException .class );
267
+ .doOnNext (connection -> { throw new IllegalStateException (); })
268
+ .as (operator ::transactional )
269
+ .as (StepVerifier ::create ).verifyError (IllegalStateException .class );
270
270
271
271
assertThat (commits ).hasValue (0 );
272
272
assertThat (rollbacks ).hasValue (1 );
@@ -286,8 +286,7 @@ void testRollbackFails() {
286
286
reactiveTransaction .setRollbackOnly ();
287
287
return ConnectionFactoryUtils .getConnection (connectionFactoryMock )
288
288
.doOnNext (connection -> connection .createStatement ("foo" )).then ();
289
- }).as (StepVerifier ::create )
290
- .verifyError (BadSqlGrammarException .class );
289
+ }).as (StepVerifier ::create ).verifyError (BadSqlGrammarException .class );
291
290
292
291
verify (connectionMock ).beginTransaction (any (io .r2dbc .spi .TransactionDefinition .class ));
293
292
verify (connectionMock ).createStatement ("foo" );
@@ -308,7 +307,7 @@ void testConnectionReleasedWhenRollbackFails() {
308
307
.doOnNext (connection -> {
309
308
throw new IllegalStateException ("Intentional error to trigger rollback" );
310
309
}).then ()).as (StepVerifier ::create )
311
- .verifyErrorSatisfies (e -> assertThat (e )
310
+ .verifyErrorSatisfies (ex -> assertThat (ex )
312
311
.isInstanceOf (BadSqlGrammarException .class )
313
312
.hasCause (new R2dbcBadGrammarException ("Rollback should fail" ))
314
313
);
@@ -327,15 +326,21 @@ void testTransactionSetRollbackOnly() {
327
326
328
327
TransactionalOperator operator = TransactionalOperator .create (tm );
329
328
operator .execute (tx -> {
330
- tx .setRollbackOnly ();
329
+ assertThat (tx .getTransactionName ()).isEmpty ();
330
+ assertThat (tx .hasTransaction ()).isTrue ();
331
331
assertThat (tx .isNewTransaction ()).isTrue ();
332
+ assertThat (tx .isNested ()).isFalse ();
333
+ assertThat (tx .isReadOnly ()).isFalse ();
334
+ assertThat (tx .isRollbackOnly ()).isFalse ();
335
+ tx .setRollbackOnly ();
336
+ assertThat (tx .isRollbackOnly ()).isTrue ();
337
+ assertThat (tx .isCompleted ()).isFalse ();
332
338
return TransactionSynchronizationManager .forCurrentTransaction ().doOnNext (
333
339
synchronizationManager -> {
334
340
assertThat (synchronizationManager .hasResource (connectionFactoryMock )).isTrue ();
335
341
synchronizationManager .registerSynchronization (sync );
336
342
}).then ();
337
- }).as (StepVerifier ::create )
338
- .verifyComplete ();
343
+ }).as (StepVerifier ::create ).verifyComplete ();
339
344
340
345
verify (connectionMock ).beginTransaction (any (io .r2dbc .spi .TransactionDefinition .class ));
341
346
verify (connectionMock ).rollbackTransaction ();
@@ -357,14 +362,19 @@ void testPropagationNeverWithExistingTransaction() {
357
362
358
363
TransactionalOperator operator = TransactionalOperator .create (tm , definition );
359
364
operator .execute (tx1 -> {
365
+ assertThat (tx1 .getTransactionName ()).isEmpty ();
366
+ assertThat (tx1 .hasTransaction ()).isTrue ();
360
367
assertThat (tx1 .isNewTransaction ()).isTrue ();
368
+ assertThat (tx1 .isNested ()).isFalse ();
369
+ assertThat (tx1 .isReadOnly ()).isFalse ();
370
+ assertThat (tx1 .isRollbackOnly ()).isFalse ();
371
+ assertThat (tx1 .isCompleted ()).isFalse ();
361
372
definition .setPropagationBehavior (TransactionDefinition .PROPAGATION_NEVER );
362
373
return operator .execute (tx2 -> {
363
374
fail ("Should have thrown IllegalTransactionStateException" );
364
375
return Mono .empty ();
365
376
});
366
- }).as (StepVerifier ::create )
367
- .verifyError (IllegalTransactionStateException .class );
377
+ }).as (StepVerifier ::create ).verifyError (IllegalTransactionStateException .class );
368
378
369
379
verify (connectionMock ).rollbackTransaction ();
370
380
verify (connectionMock ).close ();
@@ -381,14 +391,17 @@ void testPropagationNestedWithExistingTransaction() {
381
391
382
392
TransactionalOperator operator = TransactionalOperator .create (tm , definition );
383
393
operator .execute (tx1 -> {
384
- assertThat (tx1 .isNewTransaction ()).isTrue ();
385
- definition .setPropagationBehavior (TransactionDefinition .PROPAGATION_NESTED );
386
- return operator .execute (tx2 -> {
387
- assertThat (tx2 .isNewTransaction ()).isTrue ();
388
- return Mono .empty ();
389
- });
390
- }).as (StepVerifier ::create )
391
- .verifyComplete ();
394
+ assertThat (tx1 .hasTransaction ()).isTrue ();
395
+ assertThat (tx1 .isNewTransaction ()).isTrue ();
396
+ assertThat (tx1 .isNested ()).isFalse ();
397
+ definition .setPropagationBehavior (TransactionDefinition .PROPAGATION_NESTED );
398
+ return operator .execute (tx2 -> {
399
+ assertThat (tx2 .hasTransaction ()).isTrue ();
400
+ assertThat (tx2 .isNewTransaction ()).isTrue ();
401
+ assertThat (tx2 .isNested ()).isTrue ();
402
+ return Mono .empty ();
403
+ });
404
+ }).as (StepVerifier ::create ).verifyComplete ();
392
405
393
406
verify (connectionMock ).createSavepoint ("SAVEPOINT_1" );
394
407
verify (connectionMock ).releaseSavepoint ("SAVEPOINT_1" );
@@ -407,15 +420,20 @@ void testPropagationNestedWithExistingTransactionAndRollback() {
407
420
408
421
TransactionalOperator operator = TransactionalOperator .create (tm , definition );
409
422
operator .execute (tx1 -> {
410
- assertThat (tx1 .isNewTransaction ()).isTrue ();
411
- definition .setPropagationBehavior (TransactionDefinition .PROPAGATION_NESTED );
412
- return operator .execute (tx2 -> {
413
- assertThat (tx2 .isNewTransaction ()).isTrue ();
414
- tx2 .setRollbackOnly ();
415
- return Mono .empty ();
416
- });
417
- }).as (StepVerifier ::create )
418
- .verifyComplete ();
423
+ assertThat (tx1 .hasTransaction ()).isTrue ();
424
+ assertThat (tx1 .isNewTransaction ()).isTrue ();
425
+ assertThat (tx1 .isNested ()).isFalse ();
426
+ definition .setPropagationBehavior (TransactionDefinition .PROPAGATION_NESTED );
427
+ return operator .execute (tx2 -> {
428
+ assertThat (tx2 .hasTransaction ()).isTrue ();
429
+ assertThat (tx2 .isNewTransaction ()).isTrue ();
430
+ assertThat (tx2 .isNested ()).isTrue ();
431
+ assertThat (tx2 .isRollbackOnly ()).isFalse ();
432
+ tx2 .setRollbackOnly ();
433
+ assertThat (tx2 .isRollbackOnly ()).isTrue ();
434
+ return Mono .empty ();
435
+ });
436
+ }).as (StepVerifier ::create ).verifyComplete ();
419
437
420
438
verify (connectionMock ).createSavepoint ("SAVEPOINT_1" );
421
439
verify (connectionMock ).rollbackTransactionToSavepoint ("SAVEPOINT_1" );
@@ -432,16 +450,19 @@ void testPropagationSupportsAndNested() {
432
450
433
451
TransactionalOperator operator = TransactionalOperator .create (tm , definition );
434
452
operator .execute (tx1 -> {
435
- assertThat (tx1 .isNewTransaction ()).isFalse ();
436
- DefaultTransactionDefinition innerDef = new DefaultTransactionDefinition ();
437
- innerDef .setPropagationBehavior (TransactionDefinition .PROPAGATION_NESTED );
438
- TransactionalOperator inner = TransactionalOperator .create (tm , innerDef );
439
- return inner .execute (tx2 -> {
440
- assertThat (tx2 .isNewTransaction ()).isTrue ();
441
- return Mono .empty ();
442
- });
443
- }).as (StepVerifier ::create )
444
- .verifyComplete ();
453
+ assertThat (tx1 .hasTransaction ()).isFalse ();
454
+ assertThat (tx1 .isNewTransaction ()).isFalse ();
455
+ assertThat (tx1 .isNested ()).isFalse ();
456
+ DefaultTransactionDefinition innerDef = new DefaultTransactionDefinition ();
457
+ innerDef .setPropagationBehavior (TransactionDefinition .PROPAGATION_NESTED );
458
+ TransactionalOperator inner = TransactionalOperator .create (tm , innerDef );
459
+ return inner .execute (tx2 -> {
460
+ assertThat (tx2 .hasTransaction ()).isTrue ();
461
+ assertThat (tx2 .isNewTransaction ()).isTrue ();
462
+ assertThat (tx2 .isNested ()).isFalse ();
463
+ return Mono .empty ();
464
+ });
465
+ }).as (StepVerifier ::create ).verifyComplete ();
445
466
446
467
verify (connectionMock ).commitTransaction ();
447
468
verify (connectionMock ).close ();
@@ -456,17 +477,22 @@ void testPropagationSupportsAndNestedWithRollback() {
456
477
457
478
TransactionalOperator operator = TransactionalOperator .create (tm , definition );
458
479
operator .execute (tx1 -> {
459
- assertThat (tx1 .isNewTransaction ()).isFalse ();
460
- DefaultTransactionDefinition innerDef = new DefaultTransactionDefinition ();
461
- innerDef .setPropagationBehavior (TransactionDefinition .PROPAGATION_NESTED );
462
- TransactionalOperator inner = TransactionalOperator .create (tm , innerDef );
463
- return inner .execute (tx2 -> {
464
- assertThat (tx2 .isNewTransaction ()).isTrue ();
465
- tx2 .setRollbackOnly ();
466
- return Mono .empty ();
467
- });
468
- }).as (StepVerifier ::create )
469
- .verifyComplete ();
480
+ assertThat (tx1 .hasTransaction ()).isFalse ();
481
+ assertThat (tx1 .isNewTransaction ()).isFalse ();
482
+ assertThat (tx1 .isNested ()).isFalse ();
483
+ DefaultTransactionDefinition innerDef = new DefaultTransactionDefinition ();
484
+ innerDef .setPropagationBehavior (TransactionDefinition .PROPAGATION_NESTED );
485
+ TransactionalOperator inner = TransactionalOperator .create (tm , innerDef );
486
+ return inner .execute (tx2 -> {
487
+ assertThat (tx2 .hasTransaction ()).isTrue ();
488
+ assertThat (tx2 .isNewTransaction ()).isTrue ();
489
+ assertThat (tx2 .isNested ()).isFalse ();
490
+ assertThat (tx2 .isRollbackOnly ()).isFalse ();
491
+ tx2 .setRollbackOnly ();
492
+ assertThat (tx2 .isRollbackOnly ()).isTrue ();
493
+ return Mono .empty ();
494
+ });
495
+ }).as (StepVerifier ::create ).verifyComplete ();
470
496
471
497
verify (connectionMock ).rollbackTransaction ();
472
498
verify (connectionMock ).close ();
@@ -481,16 +507,19 @@ void testPropagationSupportsAndRequiresNew() {
481
507
482
508
TransactionalOperator operator = TransactionalOperator .create (tm , definition );
483
509
operator .execute (tx1 -> {
510
+ assertThat (tx1 .hasTransaction ()).isFalse ();
484
511
assertThat (tx1 .isNewTransaction ()).isFalse ();
512
+ assertThat (tx1 .isNested ()).isFalse ();
485
513
DefaultTransactionDefinition innerDef = new DefaultTransactionDefinition ();
486
514
innerDef .setPropagationBehavior (TransactionDefinition .PROPAGATION_REQUIRES_NEW );
487
515
TransactionalOperator inner = TransactionalOperator .create (tm , innerDef );
488
516
return inner .execute (tx2 -> {
517
+ assertThat (tx2 .hasTransaction ()).isTrue ();
489
518
assertThat (tx2 .isNewTransaction ()).isTrue ();
519
+ assertThat (tx2 .isNested ()).isFalse ();
490
520
return Mono .empty ();
491
521
});
492
- }).as (StepVerifier ::create )
493
- .verifyComplete ();
522
+ }).as (StepVerifier ::create ).verifyComplete ();
494
523
495
524
verify (connectionMock ).commitTransaction ();
496
525
verify (connectionMock ).close ();
@@ -505,17 +534,22 @@ void testPropagationSupportsAndRequiresNewWithRollback() {
505
534
506
535
TransactionalOperator operator = TransactionalOperator .create (tm , definition );
507
536
operator .execute (tx1 -> {
508
- assertThat (tx1 .isNewTransaction ()).isFalse ();
509
- DefaultTransactionDefinition innerDef = new DefaultTransactionDefinition ();
510
- innerDef .setPropagationBehavior (TransactionDefinition .PROPAGATION_REQUIRES_NEW );
511
- TransactionalOperator inner = TransactionalOperator .create (tm , innerDef );
512
- return inner .execute (tx2 -> {
513
- assertThat (tx2 .isNewTransaction ()).isTrue ();
514
- tx2 .setRollbackOnly ();
515
- return Mono .empty ();
516
- });
517
- }).as (StepVerifier ::create )
518
- .verifyComplete ();
537
+ assertThat (tx1 .hasTransaction ()).isFalse ();
538
+ assertThat (tx1 .isNewTransaction ()).isFalse ();
539
+ assertThat (tx1 .isNested ()).isFalse ();
540
+ DefaultTransactionDefinition innerDef = new DefaultTransactionDefinition ();
541
+ innerDef .setPropagationBehavior (TransactionDefinition .PROPAGATION_REQUIRES_NEW );
542
+ TransactionalOperator inner = TransactionalOperator .create (tm , innerDef );
543
+ return inner .execute (tx2 -> {
544
+ assertThat (tx2 .hasTransaction ()).isTrue ();
545
+ assertThat (tx2 .isNewTransaction ()).isTrue ();
546
+ assertThat (tx2 .isNested ()).isFalse ();
547
+ assertThat (tx2 .isRollbackOnly ()).isFalse ();
548
+ tx2 .setRollbackOnly ();
549
+ assertThat (tx2 .isRollbackOnly ()).isTrue ();
550
+ return Mono .empty ();
551
+ });
552
+ }).as (StepVerifier ::create ).verifyComplete ();
519
553
520
554
verify (connectionMock ).rollbackTransaction ();
521
555
verify (connectionMock ).close ();
0 commit comments