diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/math/TbMathNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/math/TbMathNodeTest.java index 80e669847c..ba81fbad20 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/math/TbMathNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/math/TbMathNodeTest.java @@ -89,13 +89,13 @@ import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) public class TbMathNodeTest { - static final int RULE_DISPATCHER_POOL_SIZE = 2; - static final int DB_CALLBACK_POOL_SIZE = 3; + static final int RULE_DISPATCHER_POOL_SIZE = 3; + static final int DB_CALLBACK_POOL_SIZE = 4; static final long TIMEOUT = TimeUnit.SECONDS.toMillis(5); private final EntityId originator = DeviceId.fromString("ccd71696-0586-422d-940e-755a41ec3b0d"); private final TenantId tenantId = TenantId.fromUUID(UUID.fromString("e7f46b23-0c7d-42f5-9b06-fc35ab17af8a")); - @Mock(lenient = true) + @Mock(strictness = Mock.Strictness.LENIENT) private TbContext ctx; @Mock private AttributesService attributesService; @@ -122,8 +122,9 @@ public class TbMathNodeTest { @AfterEach public void after() { - ruleEngineDispatcherExecutor.executor().shutdownNow(); - dbCallbackExecutor.executor().shutdownNow(); + // shutdownNow makes some tests flaky + ruleEngineDispatcherExecutor.destroy(); + dbCallbackExecutor.destroy(); } private TbMathNode initNode(TbRuleNodeMathFunctionType operation, TbMathResult result, TbMathArgument... arguments) { @@ -538,7 +539,7 @@ public class TbMathNodeTest { node.onMsg(ctx, msg); ArgumentCaptor tCaptor = ArgumentCaptor.forClass(Throwable.class); - Mockito.verify(ctx, Mockito.timeout(5000)).tellFailure(eq(msg), tCaptor.capture()); + Mockito.verify(ctx, timeout(TIMEOUT)).tellFailure(eq(msg), tCaptor.capture()); assertNotNull(tCaptor.getValue().getMessage()); } @@ -553,7 +554,7 @@ public class TbMathNodeTest { node.onMsg(ctx, msg); ArgumentCaptor tCaptor = ArgumentCaptor.forClass(Throwable.class); - Mockito.verify(ctx, Mockito.timeout(5000)).tellFailure(eq(msg), tCaptor.capture()); + Mockito.verify(ctx, timeout(TIMEOUT)).tellFailure(eq(msg), tCaptor.capture()); assertNotNull(tCaptor.getValue().getMessage()); } @@ -669,11 +670,11 @@ public class TbMathNodeTest { // submit slow msg may block all rule engine dispatcher threads slowMsgList.forEach(msg -> ruleEngineDispatcherExecutor.executeAsync(() -> node.onMsg(ctx, msg))); // wait until dispatcher threads started with all slowMsg - verify(node, new Timeout(TimeUnit.SECONDS.toMillis(5), times(slowMsgList.size()))).onMsg(eq(ctx), argThat(slowMsgList::contains)); + verify(node, new Timeout(TIMEOUT, times(slowMsgList.size()))).onMsg(eq(ctx), argThat(slowMsgList::contains)); slowProcessingLatch.countDown(); - verify(ctx, new Timeout(TimeUnit.SECONDS.toMillis(5), times(slowMsgList.size()))).tellFailure(any(), any()); + verify(ctx, new Timeout(TIMEOUT, times(slowMsgList.size()))).tellFailure(any(), any()); verify(ctx, never()).tellSuccess(any()); } @@ -713,7 +714,7 @@ public class TbMathNodeTest { .toList(); ctxNodes.forEach(ctxNode -> ruleEngineDispatcherExecutor.executeAsync(() -> ctxNode.getRight() .onMsg(ctxNode.getLeft(), TbMsg.newMsg(TbMsgType.POST_TELEMETRY_REQUEST, originator, TbMsgMetaData.EMPTY, "{\"a\":2,\"b\":2}")))); - ctxNodes.forEach(ctxNode -> verify(ctxNode.getRight(), timeout(5000)).onMsg(eq(ctxNode.getLeft()), any())); + ctxNodes.forEach(ctxNode -> verify(ctxNode.getRight(), timeout(TIMEOUT)).onMsg(eq(ctxNode.getLeft()), any())); processingLatch.countDown(); SoftAssertions softly = new SoftAssertions(); @@ -721,7 +722,7 @@ public class TbMathNodeTest { final TbContext ctx = ctxNode.getLeft(); final String resultKey = ctxNode.getMiddle(); ArgumentCaptor msgCaptor = ArgumentCaptor.forClass(TbMsg.class); - verify(ctx, timeout(5000)).tellSuccess(msgCaptor.capture()); + verify(ctx, timeout(TIMEOUT)).tellSuccess(msgCaptor.capture()); TbMsg resultMsg = msgCaptor.getValue(); assertThat(resultMsg).as("result msg non null for result key " + resultKey).isNotNull();