Skip to content

Commit ad79067

Browse files
committed
added test for REQUIRES_NEW
1 parent e5f79c2 commit ad79067

File tree

3 files changed

+56
-33
lines changed

3 files changed

+56
-33
lines changed

RUN_AND_BUILD.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
mvn versions:display-dependency-updates
2-
mvn versions:set -DnewVersion=1.3.1 -DgenerateBackupPoms=false
2+
mvn versions:set -DnewVersion=1.4.0-SNAPSHOT -DgenerateBackupPoms=false
33
mvn versions:set -DnewVersion=1.3.2-SNAPSHOT -DgenerateBackupPoms=false
44

55
## postgres

core/src/test/java/org/sterl/spring/persistent_tasks/scheduler/SchedulerServiceTransactionTest.java

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
import org.springframework.beans.factory.annotation.Autowired;
1111
import org.springframework.context.annotation.Bean;
1212
import org.springframework.context.annotation.Configuration;
13-
import org.springframework.transaction.annotation.Transactional;
1413
import org.sterl.spring.persistent_tasks.AbstractSpringTest;
15-
import org.sterl.spring.persistent_tasks.api.RetryStrategy;
1614
import org.sterl.spring.persistent_tasks.api.PersistentTask;
15+
import org.sterl.spring.persistent_tasks.api.RetryStrategy;
16+
import org.sterl.spring.persistent_tasks.api.TransactionalTask;
1717
import org.sterl.spring.persistent_tasks.api.TaskId.TaskTriggerBuilder;
1818
import org.sterl.spring.persistent_tasks.api.TriggerKey;
1919
import org.sterl.spring.persistent_tasks.shared.model.TriggerStatus;
@@ -24,15 +24,13 @@ class SchedulerServiceTransactionTest extends AbstractSpringTest {
2424

2525
private SchedulerService subject;
2626
private static AtomicBoolean sendError = new AtomicBoolean(false);
27-
private static AtomicBoolean inTrx = new AtomicBoolean(false);
2827
@Autowired private PersonRepository personRepository;
2928

3029
@Configuration
3130
static class Config {
3231
@Bean
33-
PersistentTask<String> savePerson(PersonRepository personRepository) {
34-
return new PersistentTask<>() {
35-
@Transactional
32+
PersistentTask<String> savePersonInTrx(PersonRepository personRepository) {
33+
return new TransactionalTask<String>() {
3634
@Override
3735
public void accept(String name) {
3836
personRepository.save(new PersonBE(name));
@@ -43,9 +41,21 @@ public void accept(String name) {
4341
public RetryStrategy retryStrategy() {
4442
return RetryStrategy.THREE_RETRIES_IMMEDIATELY;
4543
}
44+
};
45+
}
46+
47+
@Bean
48+
PersistentTask<String> savePersonNoTrx(PersonRepository personRepository) {
49+
return new PersistentTask<>() {
4650
@Override
47-
public boolean isTransactional() {
48-
return inTrx.get();
51+
public void accept(String name) {
52+
personRepository.save(new PersonBE(name));
53+
if (sendError.get()) {
54+
throw new RuntimeException("Error requested for " + name);
55+
}
56+
}
57+
public RetryStrategy retryStrategy() {
58+
return RetryStrategy.THREE_RETRIES_IMMEDIATELY;
4959
}
5060
};
5161
}
@@ -57,64 +67,63 @@ public void beforeEach() throws Exception {
5767
subject = schedulerService;
5868
personRepository.deleteAllInBatch();
5969
sendError.set(false);
60-
inTrx.set(false);
6170
}
62-
71+
6372
@Test
64-
void testSaveEntity() throws Exception {
73+
void testSaveTransactions() throws Exception {
6574
// GIVEN
66-
final var trigger = TaskTriggerBuilder.newTrigger("savePerson").state("Paul").build();
75+
final var request = TaskTriggerBuilder.newTrigger("savePersonNoTrx").state("Paul").build();
76+
var trigger = triggerService.queue(request);
6777

6878
// WHEN
6979
hibernateAsserts.reset();
70-
subject.runOrQueue(trigger).get();
80+
triggerService.run(trigger);
7181

7282
// THEN
73-
// AND one the service, one the event and one more status update,
74-
// one more to save the trigger
75-
hibernateAsserts.assertTrxCount(4);
83+
// AND one the service, one the event and one more status update
84+
hibernateAsserts.assertTrxCount(3);
7685
assertThat(personRepository.count()).isOne();
7786
}
7887

88+
7989
@Test
80-
void testSaveTransactions() throws Exception {
90+
void testTrxCountTriggerService() throws Exception {
8191
// GIVEN
82-
final var request = TaskTriggerBuilder.newTrigger("savePerson").state("Paul").build();
92+
final var request = TaskTriggerBuilder.newTrigger("savePersonInTrx").state("Paul").build();
8393
var trigger = triggerService.queue(request);
8494

8595
// WHEN
8696
hibernateAsserts.reset();
8797
triggerService.run(trigger);
8898

8999
// THEN
90-
// AND one the service, one the event and one more status update
91-
hibernateAsserts.assertTrxCount(3);
100+
hibernateAsserts.assertTrxCount(1);
92101
assertThat(personRepository.count()).isOne();
93102
}
94-
95103

96104
@Test
97-
void testTrxCountTriggerService() throws Exception {
105+
void testFailTrxCount() throws Exception {
98106
// GIVEN
99-
final var request = TaskTriggerBuilder.newTrigger("savePerson").state("Paul").build();
107+
final var request = TaskTriggerBuilder.newTrigger("savePersonInTrx").state("Paul").build();
100108
var trigger = triggerService.queue(request);
101-
inTrx.set(true);
109+
sendError.set(true);
102110

103111
// WHEN
104112
hibernateAsserts.reset();
105113
triggerService.run(trigger);
106114

107115
// THEN
108-
hibernateAsserts.assertTrxCount(1);
109-
assertThat(personRepository.count()).isOne();
116+
// first the work which runs on error
117+
// second the update to the trigger
118+
// third to write the history
119+
hibernateAsserts.assertTrxCount(3);
110120
}
111121

112122
@Test
113123
void testRollbackAndRetry() throws Exception {
114124
// GIVEN
115-
final var triggerRequest = TaskTriggerBuilder.newTrigger("savePerson").state("Paul").build();
125+
final var triggerRequest = TaskTriggerBuilder.newTrigger("savePersonInTrx").state("Paul").build();
116126
sendError.set(true);
117-
inTrx.set(true);
118127

119128
// WHEN
120129
var key = subject.runOrQueue(triggerRequest);

core/src/test/java/org/sterl/spring/persistent_tasks/task/TaskTransactionTest.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ static class Config {
5656
@Bean("transactionalAnonymous")
5757
PersistentTask<String> transactionalAnonymous(PersonRepository personRepository) {
5858
return new PersistentTask<String>() {
59-
@Transactional(timeout = 7, propagation = Propagation.MANDATORY)
59+
@Transactional(timeout = 7, propagation = Propagation.REQUIRES_NEW)
6060
@Override
6161
public void accept(String name) {
6262
personRepository.save(new PersonBE(name));
@@ -111,9 +111,23 @@ void testGetTransactionTemplate() {
111111
assertThat(a.get().getIsolationLevel()).isEqualTo(Isolation.REPEATABLE_READ.value());
112112

113113
a = subject.getTransactionTemplate(transactionalAnonymous);
114-
assertThat(a).isPresent();
115-
assertThat(a.get().getTimeout()).isEqualTo(7);
116-
assertThat(a.get().getPropagationBehavior()).isEqualTo(Propagation.REQUIRED.value());
114+
assertThat(a).isEmpty();
115+
}
116+
117+
@Test
118+
void testRequiresNewHasOwnTransaction() {
119+
// GIVEN
120+
var t = triggerService.queue(TaskTriggerBuilder
121+
.newTrigger("transactionalAnonymous", "test").build());
122+
123+
// WHEN
124+
personRepository.deleteAllInBatch();
125+
hibernateAsserts.reset();
126+
triggerService.run(t).get();
127+
128+
// THEN
129+
hibernateAsserts.assertTrxCount(3);
130+
assertThat(personRepository.count()).isEqualTo(1);
117131
}
118132

119133
@ParameterizedTest

0 commit comments

Comments
 (0)