Skip to content

Commit 4b54afa

Browse files
fix(tests): add TestQueueFactory setup in beforeEach
Otherwise the rebuildContext was creating a new applicationContext that doesn't contain the testExecutions
1 parent a74f4be commit 4b54afa

File tree

7 files changed

+24
-21
lines changed

7 files changed

+24
-21
lines changed

core/src/test/java/io/kestra/core/runners/pebble/filters/DateFilterTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,10 @@
1414
import java.util.Map;
1515

1616
import jakarta.inject.Inject;
17-
import org.junit.jupiter.api.TestInstance;
18-
import org.junit.jupiter.api.TestInstance.Lifecycle;
1917

2018
import static org.assertj.core.api.Assertions.assertThat;
2119

2220
@KestraTest
23-
@TestInstance(Lifecycle.PER_CLASS)
2421
class DateFilterTest {
2522
public static final ZonedDateTime NOW = ZonedDateTime.parse("2013-09-08T16:19:12.123456+01");
2623

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package io.kestra.runner.mysql;
22

33
import io.kestra.jdbc.runner.JdbcRunnerRetryTest;
4-
import org.junit.jupiter.api.TestInstance;
5-
import org.junit.jupiter.api.TestInstance.Lifecycle;
64

7-
@TestInstance(Lifecycle.PER_CLASS)
85
public class MysqlRunnerRetryTest extends JdbcRunnerRetryTest {
96

107
}

scheduler/src/test/java/io/kestra/scheduler/AbstractSchedulerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
import java.util.Map;
3535
import java.util.Optional;
3636

37-
@KestraTest(rebuildContext = true)
37+
@KestraTest
3838
abstract public class AbstractSchedulerTest {
3939
@Inject
4040
protected ApplicationContext applicationContext;

scheduler/src/test/java/io/kestra/scheduler/SchedulerScheduleTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
import static org.assertj.core.api.Assertions.assertThat;
4343
import static org.mockito.Mockito.*;
4444

45-
@TestInstance(Lifecycle.PER_CLASS)
4645
public class SchedulerScheduleTest extends AbstractSchedulerTest {
4746
@Inject
4847
protected FlowListeners flowListenersService;
@@ -687,4 +686,4 @@ void recoverNONELongRunningExecution() throws Exception {
687686
Await.until(() -> this.triggerState.findLast(trigger).map(t -> t.getNextExecutionDate().isAfter(lastTrigger.getNextExecutionDate().plusSeconds(10))).orElse(false).booleanValue(), Duration.ofMillis(100), Duration.ofSeconds(20));
688687
}
689688
}
690-
}
689+
}

tests/src/main/java/io/kestra/core/junit/extensions/KestraTestExtension.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,33 @@
11
package io.kestra.core.junit.extensions;
22

33
import io.kestra.core.junit.annotations.KestraTest;
4+
import io.kestra.core.models.executions.Execution;
45
import io.kestra.core.models.executions.ExecutionKilled;
56
import io.kestra.core.models.executions.ExecutionKilledExecution;
67
import io.kestra.core.queues.QueueException;
78
import io.kestra.core.queues.QueueFactoryInterface;
89
import io.kestra.core.queues.QueueInterface;
10+
import io.kestra.core.queues.TestQueueFactory;
911
import io.kestra.core.repositories.ExecutionRepositoryInterface;
1012
import io.kestra.core.runners.TestRunner;
1113
import io.kestra.core.utils.TestsUtils;
14+
import io.micronaut.core.annotation.NonNull;
15+
import io.micronaut.inject.BeanDefinition;
1216
import io.micronaut.inject.qualifiers.Qualifiers;
1317
import io.micronaut.test.annotation.MicronautTestValue;
1418
import io.micronaut.test.extensions.junit5.MicronautJunit5Extension;
1519
import lombok.extern.slf4j.Slf4j;
1620
import org.junit.jupiter.api.extension.ExtensionContext;
1721
import org.junit.platform.commons.support.AnnotationSupport;
1822

23+
import java.util.ArrayList;
1924
import java.util.ConcurrentModificationException;
25+
import java.util.List;
2026

2127
@Slf4j
2228
public class KestraTestExtension extends MicronautJunit5Extension {
29+
public static final ThreadLocal<List<Execution>> testExecutions = ThreadLocal.withInitial(ArrayList::new);
30+
2331
private static final ExtensionContext.Namespace NAMESPACE = ExtensionContext.Namespace.create(KestraTestExtension.class);
2432

2533
@Override
@@ -58,6 +66,7 @@ public void beforeAll(ExtensionContext extensionContext) throws Exception {
5866
KestraTest kestraTest = extensionContext.getTestClass()
5967
.orElseThrow()
6068
.getAnnotation(KestraTest.class);
69+
6170
if (kestraTest.startRunner()) {
6271
TestRunner runner = applicationContext.getBean(TestRunner.class);
6372
if (!runner.isRunning()) {
@@ -68,6 +77,12 @@ public void beforeAll(ExtensionContext extensionContext) throws Exception {
6877
}
6978
}
7079

80+
@Override
81+
public void beforeTestExecution(ExtensionContext context) {
82+
TestQueueFactory testQueueFactory = applicationContext.getBean(TestQueueFactory.class);
83+
testQueueFactory.setTestExecutionsList(testExecutions.get());
84+
}
85+
7186
@Override
7287
public void afterTestExecution(ExtensionContext context) throws Exception {
7388
super.afterTestExecution(context);
@@ -77,21 +92,22 @@ public void afterTestExecution(ExtensionContext context) throws Exception {
7792
KestraTest kestraTest = context.getTestClass()
7893
.orElseThrow()
7994
.getAnnotation(KestraTest.class);
80-
if (kestraTest.startRunner()
95+
if (!testExecutions.get().isEmpty() &&
96+
kestraTest.startRunner()
8197
&& applicationContext.containsBean(ExecutionRepositoryInterface.class)
8298
&& applicationContext.containsBean(QueueInterface.class, Qualifiers.byName(QueueFactoryInterface.KILL_NAMED))) {
8399
ExecutionRepositoryInterface executionRepository = applicationContext.getBean(ExecutionRepositoryInterface.class);
84100
QueueInterface<ExecutionKilled> killQueue = applicationContext.getBean(QueueInterface.class, Qualifiers.byName(QueueFactoryInterface.KILL_NAMED));
85101

86102
retryingExecutionKill(executionRepository, killQueue, 10);
87103

88-
TestRunner.testExecutions.get().clear();
104+
testExecutions.get().clear();
89105
}
90106
}
91107

92108
private void retryingExecutionKill(ExecutionRepositoryInterface executionRepository, QueueInterface<ExecutionKilled> killQueue, int retriesLeft) throws InterruptedException {
93109
try {
94-
TestRunner.testExecutions.get().stream()
110+
testExecutions.get().stream()
95111
.flatMap(launchedExecution -> executionRepository.findById(launchedExecution.getTenantId(), launchedExecution.getId()).stream())
96112
.filter(inRepository -> inRepository.getState().isRunning())
97113
.forEach(inRepository -> {

tests/src/main/java/io/kestra/core/queues/TestQueueFactory.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
import io.kestra.core.models.executions.Execution;
44
import io.micronaut.context.annotation.Bean;
5+
import io.micronaut.context.annotation.Context;
56
import io.micronaut.context.annotation.Factory;
67
import io.micronaut.context.annotation.Replaces;
8+
import io.micronaut.core.annotation.Introspected;
79
import jakarta.inject.Named;
810
import jakarta.inject.Singleton;
911

@@ -25,6 +27,7 @@ public void setTestExecutionsList(List<Execution> testExecutions) {
2527
this.testExecutions = testExecutions;
2628
}
2729

30+
@SuppressWarnings("unchecked")
2831
@Singleton
2932
@Replaces(named = QueueFactoryInterface.EXECUTION_NAMED)
3033
@Named(QueueFactoryInterface.EXECUTION_NAMED)

tests/src/main/java/io/kestra/core/runners/TestRunner.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
package io.kestra.core.runners;
22

3-
import io.kestra.core.models.executions.Execution;
4-
import io.kestra.core.queues.TestQueueFactory;
5-
import io.kestra.core.queues.QueueFactoryInterface;
63
import io.kestra.core.server.Service;
74
import io.kestra.core.utils.Await;
85
import io.kestra.core.utils.ExecutorsUtils;
96
import io.kestra.worker.DefaultWorker;
107
import io.micronaut.context.ApplicationContext;
118
import io.micronaut.context.annotation.Value;
12-
import io.micronaut.inject.qualifiers.Qualifiers;
139
import jakarta.annotation.PreDestroy;
1410
import jakarta.inject.Inject;
1511
import jakarta.inject.Singleton;
@@ -29,8 +25,6 @@
2925
@Slf4j
3026
@Singleton
3127
public class TestRunner implements Runnable, AutoCloseable {
32-
public static final ThreadLocal<List<Execution>> testExecutions = ThreadLocal.withInitial(ArrayList::new);
33-
3428
@Setter private int workerThread = Math.max(3, Runtime.getRuntime().availableProcessors()) * 16;
3529
@Setter private boolean schedulerEnabled = true;
3630
@Setter private boolean workerEnabled = true;
@@ -52,9 +46,6 @@ public class TestRunner implements Runnable, AutoCloseable {
5246

5347
@Override
5448
public void run() {
55-
TestQueueFactory executionQueue = applicationContext.getBean(TestQueueFactory.class);
56-
executionQueue.setTestExecutionsList(testExecutions.get());
57-
5849
running.set(true);
5950

6051
poolExecutor = executorsUtils.cachedThreadPool("standalone-runner");

0 commit comments

Comments
 (0)