Skip to content

Commit af75691

Browse files
committed
FIN-348 resolve an issue in the test context causing memory leaks.
1 parent 2979547 commit af75691

File tree

4 files changed

+45
-18
lines changed

4 files changed

+45
-18
lines changed

bpmn-process/src/main/java/com/jongsoft/finance/bpmn/ProcessEngineConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public ProcessEngineConfiguration(
3737
public ProcessEngine processEngine() throws IOException {
3838
var configuration = new StandaloneProcessEngineConfiguration();
3939

40-
configuration.setHistory(org.camunda.bpm.engine.ProcessEngineConfiguration.HISTORY_FULL)
40+
configuration.setHistory(org.camunda.bpm.engine.ProcessEngineConfiguration.HISTORY_AUTO)
4141
.setJobExecutorActivate(true)
4242
.setMetricsEnabled(true)
4343
.setJdbcDriver(camundaDatasourceConfiguration.getDriverClassName())

bpmn-process/src/test/java/com/jongsoft/finance/bpmn/process/ProcessExtension.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
import java.lang.annotation.Retention;
88
import java.lang.annotation.RetentionPolicy;
99

10-
@MicronautTest(startApplication = false)
11-
@TestInstance(TestInstance.Lifecycle.PER_METHOD)
10+
@MicronautTest
11+
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
1212
@Retention(RetentionPolicy.RUNTIME)
1313
@ExtendWith({
1414
ProcessTestExtension.class

bpmn-process/src/test/java/com/jongsoft/finance/bpmn/process/ProcessTestExtension.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,42 @@
88
import org.junit.jupiter.api.extension.ExtensionContext;
99
import org.junit.jupiter.api.extension.ParameterContext;
1010
import org.junit.jupiter.api.extension.ParameterResolutionException;
11+
import org.mockito.Mockito;
1112

1213
import java.lang.reflect.AnnotatedElement;
1314
import java.util.List;
1415
import java.util.function.Consumer;
1516

1617
public class ProcessTestExtension extends MicronautJunit5Extension {
1718

19+
static {
20+
new EventBus(Mockito.mock(ApplicationEventPublisher.class));
21+
}
22+
1823
public interface ProcessExecution<T extends ProcessExecution> {
1924
ProcessExecution<?> obtainChildProcess(String processKey);
2025
T verifyCompleted();
2126
<Y> T yankVariable(String variableName, Consumer<Y> consumer);
2227
}
2328

29+
private RuntimeContext runtimeContext;
30+
31+
@Override
32+
public void beforeAll(ExtensionContext extensionContext) throws Exception {
33+
super.beforeAll(extensionContext);
34+
runtimeContext = new RuntimeContext(applicationContext);
35+
}
36+
37+
@Override
38+
public void afterAll(ExtensionContext extensionContext) throws Exception {
39+
runtimeContext.clean();
40+
super.afterAll(extensionContext);
41+
}
42+
2443
@Override
2544
protected void beforeEach(ExtensionContext context, @Nullable Object testInstance, @Nullable AnnotatedElement method, List<Property> propertyAnnotations) {
2645
super.beforeEach(context, testInstance, method, propertyAnnotations);
27-
28-
new EventBus(applicationContext.getBean(ApplicationEventPublisher.class));
46+
runtimeContext.resetMocks();
2947
}
3048

3149
@Override
@@ -37,7 +55,7 @@ public boolean supportsParameter(ParameterContext parameterContext, ExtensionCon
3755
@Override
3856
public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
3957
if (isProcessContext(parameterContext)) {
40-
return new RuntimeContext(applicationContext);
58+
return runtimeContext;
4159
}
4260
return super.resolveParameter(parameterContext, extensionContext);
4361
}

bpmn-process/src/test/java/com/jongsoft/finance/bpmn/process/RuntimeContext.java

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
@Slf4j
4343
public class RuntimeContext {
4444

45-
private final ApplicationContext applicationContext;
45+
private ApplicationContext applicationContext;
4646

4747
private ProcessEngine processEngine;
4848

@@ -63,10 +63,14 @@ public RuntimeContext(ApplicationContext applicationContext) {
6363
this.processEngine = applicationContext.getBean(ProcessEngine.class);
6464
idGenerator = new MutableLong(100);
6565

66-
resetMocks();
6766
setupDefaultMocks();
6867
}
6968

69+
void clean() {
70+
processEngine.close();
71+
storageTokens.clear();
72+
}
73+
7074
public RuntimeContext withStorage() {
7175
var storageService = applicationContext.getBean(StorageService.class);
7276
Mockito.when(storageService.store(Mockito.any())).thenAnswer((Answer<String>) invocation -> {
@@ -254,17 +258,22 @@ public <T> T verifyInteraction(Class<T> type) {
254258
return Mockito.verify(applicationContext.getBean(type));
255259
}
256260

257-
private void resetMocks() {
258-
Mockito.reset(applicationContext.getBean(AuthenticationFacade.class));
259-
Mockito.reset(applicationContext.getBean(CurrentUserProvider.class));
260-
Mockito.reset(applicationContext.getBean(AccountProvider.class));
261-
Mockito.reset(applicationContext.getBean(TransactionProvider.class));
262-
Mockito.reset(applicationContext.getBean(ImportProvider.class));
263-
Mockito.reset(applicationContext.getBean(TransactionCreationHandler.class));
264-
Mockito.reset(applicationContext.getBean(TransactionRuleProvider.class));
265-
Mockito.reset(applicationContext.getBean(CategoryProvider.class));
266-
Mockito.reset(userAccount);
261+
void resetMocks() {
262+
Mockito.reset(
263+
applicationContext.getBean(AuthenticationFacade.class),
264+
applicationContext.getBean(CurrentUserProvider.class),
265+
applicationContext.getBean(AccountProvider.class),
266+
applicationContext.getBean(TransactionProvider.class),
267+
applicationContext.getBean(ImportProvider.class),
268+
applicationContext.getBean(TransactionCreationHandler.class),
269+
applicationContext.getBean(TransactionRuleProvider.class),
270+
applicationContext.getBean(CategoryProvider.class),
271+
applicationContext.getBean(StorageService.class),
272+
userAccount);
273+
274+
setupDefaultMocks();
267275
}
276+
268277
private void setupDefaultMocks() {
269278
Mockito.when(applicationContext.getBean(AuthenticationFacade.class).authenticated())
270279
.thenReturn("test-user");

0 commit comments

Comments
 (0)