refactored parametrized tests

This commit is contained in:
IrynaMatveieva 2024-06-06 19:10:09 +03:00
parent 6be2c61717
commit f9a126df31

View File

@ -22,10 +22,12 @@ import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.EnumSource;
import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.MethodSource;
import org.junit.jupiter.params.provider.NullAndEmptySource;
import org.junit.jupiter.params.provider.ValueSource; import org.junit.jupiter.params.provider.ValueSource;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.test.util.ReflectionTestUtils;
import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.rule.engine.api.RuleEngineDeviceRpcRequest; import org.thingsboard.rule.engine.api.RuleEngineDeviceRpcRequest;
import org.thingsboard.rule.engine.api.RuleEngineDeviceRpcResponse; import org.thingsboard.rule.engine.api.RuleEngineDeviceRpcResponse;
@ -45,9 +47,8 @@ import org.thingsboard.server.common.data.rpc.RpcError;
import org.thingsboard.server.common.msg.TbMsg; import org.thingsboard.server.common.msg.TbMsg;
import org.thingsboard.server.common.msg.TbMsgMetaData; import org.thingsboard.server.common.msg.TbMsgMetaData;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.Random;
import java.util.UUID; import java.util.UUID;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.stream.Stream; import java.util.stream.Stream;
@ -100,34 +101,30 @@ public class TbSendRPCRequestNodeTest {
@ParameterizedTest @ParameterizedTest
@MethodSource @MethodSource
void givenOneway_whenOnMsg_thenVerifyRequest(Map<String, String> metadata, Consumer<RuleEngineDeviceRpcRequest> requestConsumer) { public void givenOneway_whenOnMsg_thenVerifyRequest(String mdKeyValue, boolean expectedResult) {
given(ctxMock.getRpcService()).willReturn(rpcServiceMock); given(ctxMock.getRpcService()).willReturn(rpcServiceMock);
given(ctxMock.getTenantId()).willReturn(TENANT_ID); given(ctxMock.getTenantId()).willReturn(TENANT_ID);
TbMsgMetaData msgMetadata = metadata == null ? TbMsgMetaData.EMPTY : new TbMsgMetaData(metadata); TbMsgMetaData msgMetadata = new TbMsgMetaData();
msgMetadata.putValue("oneway", mdKeyValue);
TbMsg msg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, msgMetadata, MSG_DATA); TbMsg msg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, msgMetadata, MSG_DATA);
node.onMsg(ctxMock, msg); node.onMsg(ctxMock, msg);
verifyRequest(requestConsumer); var ruleEngineDeviceRpcRequestCaptor = captureRequest();
assertThat(ruleEngineDeviceRpcRequestCaptor.getValue().isOneway()).isEqualTo(expectedResult);
} }
private static Stream<Arguments> givenOneway_whenOnMsg_thenVerifyRequest() { private static Stream<Arguments> givenOneway_whenOnMsg_thenVerifyRequest() {
var metadata = new HashMap<>();
metadata.put("oneway", null);
return Stream.of( return Stream.of(
Arguments.of(Map.of("oneway", "true"), (Consumer<RuleEngineDeviceRpcRequest>) req -> Arguments.of("true", true),
assertThat(req.isOneway()).isTrue()), Arguments.of("false", false),
Arguments.of(null, (Consumer<RuleEngineDeviceRpcRequest>) req -> Arguments.of(null, false),
assertThat(req.isOneway()).isFalse()), Arguments.of("", false)
Arguments.of(Map.of("oneway", ""), (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.isOneway()).isFalse()),
Arguments.of(metadata, (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.isOneway()).isFalse())
); );
} }
@Test @Test
void givenMsgBody_whenOnMsg_thenVerifyRequest() { public void givenMsgBody_whenOnMsg_thenVerifyRequest() {
given(ctxMock.getRpcService()).willReturn(rpcServiceMock); given(ctxMock.getRpcService()).willReturn(rpcServiceMock);
given(ctxMock.getTenantId()).willReturn(TENANT_ID); given(ctxMock.getTenantId()).willReturn(TENANT_ID);
@ -144,205 +141,211 @@ public class TbSendRPCRequestNodeTest {
.hasFieldOrPropertyWithValue("additionalInfo", "information"); .hasFieldOrPropertyWithValue("additionalInfo", "information");
} }
@ParameterizedTest @Test
@MethodSource public void givenRequestIdIsNotSet_whenOnMsg_thenVerifyRequest() {
void givenRequestId_whenOnMsg_thenVerifyRequest(String requestId, Consumer<RuleEngineDeviceRpcRequest> requestConsumer) { Random randomMock = mock(Random.class);
given(randomMock.nextInt()).willReturn(123);
ReflectionTestUtils.setField(node, "random", randomMock);
given(ctxMock.getRpcService()).willReturn(rpcServiceMock); given(ctxMock.getRpcService()).willReturn(rpcServiceMock);
given(ctxMock.getTenantId()).willReturn(TENANT_ID); given(ctxMock.getTenantId()).willReturn(TENANT_ID);
String data = String.format(""" TbMsg msg = TbMsg.newMsg(TbMsgType.TO_SERVER_RPC_REQUEST, DEVICE_ID, TbMsgMetaData.EMPTY, MSG_DATA);
node.onMsg(ctxMock, msg);
ArgumentCaptor<RuleEngineDeviceRpcRequest> requestCaptor = captureRequest();
assertThat(requestCaptor.getValue().getRequestId()).isEqualTo(123);
}
@Test
public void givenRequestId_whenOnMsg_thenVerifyRequest() {
given(ctxMock.getRpcService()).willReturn(rpcServiceMock);
given(ctxMock.getTenantId()).willReturn(TENANT_ID);
String data = """
{ {
"method": "setGpio", "method": "setGpio",
"params": { "params": {
"pin": "23", "pin": "23",
"value": 1 "value": 1
}%s%s },
"requestId": 12345
} }
""", requestId != null ? ",\"requestId\":" : "", requestId != null ? requestId : ""); """;
TbMsg msg = TbMsg.newMsg(TbMsgType.TO_SERVER_RPC_REQUEST, DEVICE_ID, TbMsgMetaData.EMPTY, data); TbMsg msg = TbMsg.newMsg(TbMsgType.TO_SERVER_RPC_REQUEST, DEVICE_ID, TbMsgMetaData.EMPTY, data);
node.onMsg(ctxMock, msg); node.onMsg(ctxMock, msg);
verifyRequest(requestConsumer); ArgumentCaptor<RuleEngineDeviceRpcRequest> requestCaptor = captureRequest();
assertThat(requestCaptor.getValue().getRequestId()).isEqualTo(12345);
} }
private static Stream<Arguments> givenRequestId_whenOnMsg_thenVerifyRequest() { @Test
return Stream.of( public void givenRequestUUID_whenOnMsg_thenVerifyRequest() {
Arguments.of("12345", (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.getRequestId()).isEqualTo(12345)),
Arguments.of(null, (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.getRequestId()).isNotNull())
);
}
@ParameterizedTest
@MethodSource
void givenRequestUUID_whenOnMsg_thenVerifyRequest(Map<String, String> metadata, Consumer<RuleEngineDeviceRpcRequest> requestConsumer) {
given(ctxMock.getRpcService()).willReturn(rpcServiceMock); given(ctxMock.getRpcService()).willReturn(rpcServiceMock);
given(ctxMock.getTenantId()).willReturn(TENANT_ID); given(ctxMock.getTenantId()).willReturn(TENANT_ID);
TbMsgMetaData msgMetadata = metadata == null ? TbMsgMetaData.EMPTY : new TbMsgMetaData(metadata); String requestUUID = "b795a241-5a30-48fb-92d5-46b864d47130";
TbMsg msg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, msgMetadata, MSG_DATA); TbMsgMetaData metadata = new TbMsgMetaData();
metadata.putValue("requestUUID", requestUUID);
TbMsg msg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, metadata, MSG_DATA);
node.onMsg(ctxMock, msg); node.onMsg(ctxMock, msg);
verifyRequest(requestConsumer); ArgumentCaptor<RuleEngineDeviceRpcRequest> requestCaptor = captureRequest();
} assertThat(requestCaptor.getValue().getRequestUUID()).isEqualTo(UUID.fromString(requestUUID));
private static Stream<Arguments> givenRequestUUID_whenOnMsg_thenVerifyRequest() {
var metadata= new HashMap<>();
metadata.put("requestUUID", null);
return Stream.of(
Arguments.of(Map.of("requestUUID", "1c4ef338-ea1b-495f-8e2b-67981f27cf35"), (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.getRequestUUID()).isEqualTo(UUID.fromString("1c4ef338-ea1b-495f-8e2b-67981f27cf35"))),
Arguments.of(null, (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.getRequestUUID()).isNotNull()),
Arguments.of(Map.of("requestUUID", ""), (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.getRequestUUID()).isNotNull()),
Arguments.of(metadata, (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.getRequestUUID()).isNotNull())
);
} }
@ParameterizedTest @ParameterizedTest
@MethodSource @NullAndEmptySource
void givenOriginServiceId_whenOnMsg_thenVerifyRequest(Map<String, String> metadata, Consumer<RuleEngineDeviceRpcRequest> requestConsumer) { public void givenInvalidRequestUUID_whenOnMsg_thenVerifyRequest(String requestUUID) {
given(ctxMock.getRpcService()).willReturn(rpcServiceMock); given(ctxMock.getRpcService()).willReturn(rpcServiceMock);
given(ctxMock.getTenantId()).willReturn(TENANT_ID); given(ctxMock.getTenantId()).willReturn(TENANT_ID);
TbMsgMetaData msgMetaData = metadata == null ? TbMsgMetaData.EMPTY : new TbMsgMetaData(metadata); TbMsgMetaData metadata = new TbMsgMetaData();
TbMsg msg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, msgMetaData, MSG_DATA); metadata.putValue("requestUUID", requestUUID);
TbMsg msg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, metadata, MSG_DATA);
node.onMsg(ctxMock, msg); node.onMsg(ctxMock, msg);
verifyRequest(requestConsumer); ArgumentCaptor<RuleEngineDeviceRpcRequest> requestCaptor = captureRequest();
assertThat(requestCaptor.getValue().getRequestUUID()).isNotNull();
} }
private static Stream<Arguments> givenOriginServiceId_whenOnMsg_thenVerifyRequest() { @Test
var metadata= new HashMap<>(); public void givenOriginServiceId_whenOnMsg_thenVerifyRequest() {
metadata.put("originServiceId", null);
return Stream.of(
Arguments.of(Map.of("originServiceId", "service-id-123"), (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.getOriginServiceId()).isEqualTo("service-id-123")),
Arguments.of(null, (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.getOriginServiceId()).isNull()),
Arguments.of(Map.of("originServiceId", ""), (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.getOriginServiceId()).isNull()),
Arguments.of(metadata, (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.getOriginServiceId()).isNull())
);
}
@ParameterizedTest
@MethodSource
void givenExpirationTime_whenOnMsg_thenVerifyRequest(Map<String, String> metadata, Consumer<RuleEngineDeviceRpcRequest> requestConsumer) {
given(ctxMock.getRpcService()).willReturn(rpcServiceMock); given(ctxMock.getRpcService()).willReturn(rpcServiceMock);
given(ctxMock.getTenantId()).willReturn(TENANT_ID); given(ctxMock.getTenantId()).willReturn(TENANT_ID);
TbMsgMetaData msgMetaData = metadata == null ? TbMsgMetaData.EMPTY : new TbMsgMetaData(metadata); String originServiceId = "service-id-123";
TbMsg msg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, msgMetaData, MSG_DATA); TbMsgMetaData metadata = new TbMsgMetaData();
metadata.putValue("originServiceId", originServiceId);
TbMsg msg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, metadata, MSG_DATA);
node.onMsg(ctxMock, msg); node.onMsg(ctxMock, msg);
verifyRequest(requestConsumer); ArgumentCaptor<RuleEngineDeviceRpcRequest> requestCaptor = captureRequest();
} assertThat(requestCaptor.getValue().getOriginServiceId()).isEqualTo(originServiceId);
private static Stream<Arguments> givenExpirationTime_whenOnMsg_thenVerifyRequest() {
var metadata= new HashMap<>();
metadata.put(DataConstants.EXPIRATION_TIME, null);
return Stream.of(
Arguments.of(Map.of(DataConstants.EXPIRATION_TIME, "2000000000000"), (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.getExpirationTime()).isEqualTo(2000000000000L)),
Arguments.of(null, (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.getExpirationTime()).isGreaterThan(System.currentTimeMillis())),
Arguments.of(Map.of(DataConstants.EXPIRATION_TIME, ""), (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.getExpirationTime()).isGreaterThan(System.currentTimeMillis())),
Arguments.of(metadata, (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.getExpirationTime()).isGreaterThan(System.currentTimeMillis()))
);
} }
@ParameterizedTest @ParameterizedTest
@MethodSource @NullAndEmptySource
void givenRetries_whenOnMsg_thenVerifyRequest(Map<String, String> metadata, Consumer<RuleEngineDeviceRpcRequest> requestConsumer) { public void givenInvalidOriginServiceId_whenOnMsg_thenVerifyRequest(String originServiceId) {
given(ctxMock.getRpcService()).willReturn(rpcServiceMock); given(ctxMock.getRpcService()).willReturn(rpcServiceMock);
given(ctxMock.getTenantId()).willReturn(TENANT_ID); given(ctxMock.getTenantId()).willReturn(TENANT_ID);
TbMsgMetaData msgMetaData = metadata == null ? TbMsgMetaData.EMPTY : new TbMsgMetaData(metadata); TbMsgMetaData metadata = new TbMsgMetaData();
TbMsg msg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, msgMetaData, MSG_DATA); metadata.putValue("originServiceId", originServiceId);
TbMsg msg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, metadata, MSG_DATA);
node.onMsg(ctxMock, msg); node.onMsg(ctxMock, msg);
verifyRequest(requestConsumer); ArgumentCaptor<RuleEngineDeviceRpcRequest> requestCaptor = captureRequest();
assertThat(requestCaptor.getValue().getOriginServiceId()).isNull();
} }
private static Stream<Arguments> givenRetries_whenOnMsg_thenVerifyRequest() { @Test
var metadata= new HashMap<>(); public void givenExpirationTime_whenOnMsg_thenVerifyRequest() {
metadata.put(DataConstants.RETRIES, null); given(ctxMock.getRpcService()).willReturn(rpcServiceMock);
return Stream.of( given(ctxMock.getTenantId()).willReturn(TENANT_ID);
Arguments.of(Map.of(DataConstants.RETRIES, "3"), (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.getRetries()).isEqualTo(3)), String expirationTime = "2000000000000";
Arguments.of(null, (Consumer<RuleEngineDeviceRpcRequest>) req -> TbMsgMetaData metadata = new TbMsgMetaData();
assertThat(req.getRetries()).isNull()), metadata.putValue(DataConstants.EXPIRATION_TIME, expirationTime);
Arguments.of(Map.of(DataConstants.RETRIES,""), (Consumer<RuleEngineDeviceRpcRequest>) req -> TbMsg msg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, metadata, MSG_DATA);
assertThat(req.getRetries()).isNull()), node.onMsg(ctxMock, msg);
Arguments.of(metadata, (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.getRetries()).isNull()) ArgumentCaptor<RuleEngineDeviceRpcRequest> requestCaptor = captureRequest();
); assertThat(requestCaptor.getValue().getExpirationTime()).isEqualTo(Long.parseLong(expirationTime));
} }
@ParameterizedTest @ParameterizedTest
@MethodSource @NullAndEmptySource
void givenTbMsgType_whenOnMsg_thenVerifyRequest(TbMsgType msgType, Consumer<RuleEngineDeviceRpcRequest> requestConsumer) { public void givenInvalidExpirationTime_whenOnMsg_thenVerifyRequest(String expirationTime) {
given(ctxMock.getRpcService()).willReturn(rpcServiceMock);
given(ctxMock.getTenantId()).willReturn(TENANT_ID);
TbMsgMetaData metadata = new TbMsgMetaData();
metadata.putValue(DataConstants.EXPIRATION_TIME, expirationTime);
TbMsg msg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, metadata, MSG_DATA);
node.onMsg(ctxMock, msg);
ArgumentCaptor<RuleEngineDeviceRpcRequest> requestCaptor = captureRequest();
assertThat(requestCaptor.getValue().getExpirationTime()).isGreaterThan(System.currentTimeMillis());
}
@Test
public void givenRetries_whenOnMsg_thenVerifyRequest() {
given(ctxMock.getRpcService()).willReturn(rpcServiceMock);
given(ctxMock.getTenantId()).willReturn(TENANT_ID);
Integer retries = 3;
TbMsgMetaData metadata = new TbMsgMetaData();
metadata.putValue(DataConstants.RETRIES, String.valueOf(retries));
TbMsg msg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, metadata, MSG_DATA);
node.onMsg(ctxMock, msg);
ArgumentCaptor<RuleEngineDeviceRpcRequest> requestCaptor = captureRequest();
assertThat(requestCaptor.getValue().getRetries()).isEqualTo(retries);
}
@ParameterizedTest
@NullAndEmptySource
public void givenInvalidRetriesValue_whenOnMsg_thenVerifyRequest(String retries) {
given(ctxMock.getRpcService()).willReturn(rpcServiceMock);
given(ctxMock.getTenantId()).willReturn(TENANT_ID);
TbMsgMetaData metadata = new TbMsgMetaData();
metadata.putValue(DataConstants.RETRIES, retries);
TbMsg msg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, metadata, MSG_DATA);
node.onMsg(ctxMock, msg);
ArgumentCaptor<RuleEngineDeviceRpcRequest> requestCaptor = captureRequest();
assertThat(requestCaptor.getValue().getRetries()).isNull();
}
@ParameterizedTest
@EnumSource(TbMsgType.class)
public void givenTbMsgType_whenOnMsg_thenVerifyRequest(TbMsgType msgType) {
given(ctxMock.getRpcService()).willReturn(rpcServiceMock); given(ctxMock.getRpcService()).willReturn(rpcServiceMock);
given(ctxMock.getTenantId()).willReturn(TENANT_ID); given(ctxMock.getTenantId()).willReturn(TENANT_ID);
TbMsg msg = TbMsg.newMsg(msgType, DEVICE_ID, TbMsgMetaData.EMPTY, MSG_DATA); TbMsg msg = TbMsg.newMsg(msgType, DEVICE_ID, TbMsgMetaData.EMPTY, MSG_DATA);
node.onMsg(ctxMock, msg); node.onMsg(ctxMock, msg);
verifyRequest(requestConsumer); ArgumentCaptor<RuleEngineDeviceRpcRequest> requestCaptor = captureRequest();
if (msgType == TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE) {
assertThat(requestCaptor.getValue().isRestApiCall()).isTrue();
return;
} }
assertThat(requestCaptor.getValue().isRestApiCall()).isFalse();
private static Stream<Arguments> givenTbMsgType_whenOnMsg_thenVerifyRequest() {
return Stream.of(
Arguments.of(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.isRestApiCall()).isTrue()),
Arguments.of(TbMsgType.TO_SERVER_RPC_REQUEST, (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.isRestApiCall()).isFalse())
);
} }
@ParameterizedTest @ParameterizedTest
@MethodSource @MethodSource
void givenPersistent_whenOnMsg_thenVerifyRequest(Map<String, String> metadata, Consumer<RuleEngineDeviceRpcRequest> requestConsumer) { public void givenPersistent_whenOnMsg_thenVerifyRequest(String isPersisted, boolean expectedPersistence) {
given(ctxMock.getRpcService()).willReturn(rpcServiceMock); given(ctxMock.getRpcService()).willReturn(rpcServiceMock);
given(ctxMock.getTenantId()).willReturn(TENANT_ID); given(ctxMock.getTenantId()).willReturn(TENANT_ID);
TbMsgMetaData msgMetaData = metadata == null ? TbMsgMetaData.EMPTY : new TbMsgMetaData(metadata); TbMsgMetaData metadata = new TbMsgMetaData();
TbMsg msg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, msgMetaData, MSG_DATA); metadata.putValue(DataConstants.PERSISTENT, isPersisted);
TbMsg msg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, metadata, MSG_DATA);
node.onMsg(ctxMock, msg); node.onMsg(ctxMock, msg);
verifyRequest(requestConsumer); ArgumentCaptor<RuleEngineDeviceRpcRequest> requestCaptor = captureRequest();
assertThat(requestCaptor.getValue().isPersisted()).isEqualTo(expectedPersistence);
} }
private static Stream<Arguments> givenPersistent_whenOnMsg_thenVerifyRequest() { private static Stream<Arguments> givenPersistent_whenOnMsg_thenVerifyRequest() {
var metadata= new HashMap<>();
metadata.put(DataConstants.PERSISTENT, null);
return Stream.of( return Stream.of(
Arguments.of(Map.of(DataConstants.PERSISTENT, "true"), (Consumer<RuleEngineDeviceRpcRequest>) req -> Arguments.of("true", true),
assertThat(req.isPersisted()).isTrue()), Arguments.of("false", false),
Arguments.of(null, (Consumer<RuleEngineDeviceRpcRequest>) req -> Arguments.of(null, false),
assertThat(req.isPersisted()).isFalse()), Arguments.of("", false)
Arguments.of(Map.of(DataConstants.PERSISTENT, ""), (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.isPersisted()).isFalse()),
Arguments.of(metadata, (Consumer<RuleEngineDeviceRpcRequest>) req ->
assertThat(req.isPersisted()).isFalse())
); );
} }
private void verifyRequest(Consumer<RuleEngineDeviceRpcRequest> requestConsumer) { private ArgumentCaptor<RuleEngineDeviceRpcRequest> captureRequest() {
ArgumentCaptor<RuleEngineDeviceRpcRequest> requestCaptor = ArgumentCaptor.forClass(RuleEngineDeviceRpcRequest.class); ArgumentCaptor<RuleEngineDeviceRpcRequest> requestCaptor = ArgumentCaptor.forClass(RuleEngineDeviceRpcRequest.class);
then(rpcServiceMock).should().sendRpcRequestToDevice(requestCaptor.capture(), any(Consumer.class)); then(rpcServiceMock).should().sendRpcRequestToDevice(requestCaptor.capture(), any(Consumer.class));
requestConsumer.accept(requestCaptor.getValue()); return requestCaptor;
} }
@Test @Test
void givenRpcResponseWithoutError_whenOnMsg_thenSendsRpcRequest() { public void givenRpcResponseWithoutError_whenOnMsg_thenSendsRpcRequest() {
TbMsg outMsg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, TbMsgMetaData.EMPTY, TbMsg.EMPTY_JSON_OBJECT); TbMsg outMsg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, TbMsgMetaData.EMPTY, TbMsg.EMPTY_JSON_OBJECT);
given(ctxMock.getRpcService()).willReturn(rpcServiceMock); given(ctxMock.getRpcService()).willReturn(rpcServiceMock);
@ -366,7 +369,7 @@ public class TbSendRPCRequestNodeTest {
} }
@Test @Test
void givenRpcResponseWithError_whenOnMsg_thenTellFailure() { public void givenRpcResponseWithError_whenOnMsg_thenTellFailure() {
TbMsg outMsg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, TbMsgMetaData.EMPTY, TbMsg.EMPTY_JSON_OBJECT); TbMsg outMsg = TbMsg.newMsg(TbMsgType.RPC_CALL_FROM_SERVER_TO_DEVICE, DEVICE_ID, TbMsgMetaData.EMPTY, TbMsg.EMPTY_JSON_OBJECT);
given(ctxMock.getRpcService()).willReturn(rpcServiceMock); given(ctxMock.getRpcService()).willReturn(rpcServiceMock);
@ -390,7 +393,7 @@ public class TbSendRPCRequestNodeTest {
@ParameterizedTest @ParameterizedTest
@EnumSource(EntityType.class) @EnumSource(EntityType.class)
void givenOriginatorIsNotDevice_whenOnMsg_thenThrowsException(EntityType entityType) { public void givenOriginatorIsNotDevice_whenOnMsg_thenThrowsException(EntityType entityType) {
EntityId entityId = EntityIdFactory.getByTypeAndUuid(entityType, "ac21a1bb-eabf-4463-8313-24bea1f498d9"); EntityId entityId = EntityIdFactory.getByTypeAndUuid(entityType, "ac21a1bb-eabf-4463-8313-24bea1f498d9");
TbMsg msg = TbMsg.newMsg(TbMsgType.POST_TELEMETRY_REQUEST, entityId, TbMsgMetaData.EMPTY, TbMsg.EMPTY_JSON_OBJECT); TbMsg msg = TbMsg.newMsg(TbMsgType.POST_TELEMETRY_REQUEST, entityId, TbMsgMetaData.EMPTY, TbMsg.EMPTY_JSON_OBJECT);
@ -405,7 +408,7 @@ public class TbSendRPCRequestNodeTest {
@ParameterizedTest @ParameterizedTest
@ValueSource(strings = {"method", "params"}) @ValueSource(strings = {"method", "params"})
void givenMethodOrParamsAreNotPresent_whenOnMsg_thenThrowsException(String key) { public void givenMethodOrParamsAreNotPresent_whenOnMsg_thenThrowsException(String key) {
TbMsg msg = TbMsg.newMsg(TbMsgType.POST_TELEMETRY_REQUEST, DEVICE_ID, TbMsgMetaData.EMPTY, "{\"" + key + "\": \"value\"}"); TbMsg msg = TbMsg.newMsg(TbMsgType.POST_TELEMETRY_REQUEST, DEVICE_ID, TbMsgMetaData.EMPTY, "{\"" + key + "\": \"value\"}");
node.onMsg(ctxMock, msg); node.onMsg(ctxMock, msg);