added tests for destroy method
This commit is contained in:
		
							parent
							
								
									6da603ad0d
								
							
						
					
					
						commit
						f1c68b8be2
					
				@ -39,19 +39,23 @@ import org.thingsboard.rule.engine.api.TbNodeException;
 | 
			
		||||
import org.thingsboard.rule.engine.api.util.TbNodeUtils;
 | 
			
		||||
import org.thingsboard.server.common.data.id.DeviceId;
 | 
			
		||||
import org.thingsboard.server.common.data.msg.TbMsgType;
 | 
			
		||||
import org.thingsboard.server.common.data.msg.TbNodeConnectionType;
 | 
			
		||||
import org.thingsboard.server.common.msg.TbMsg;
 | 
			
		||||
import org.thingsboard.server.common.msg.TbMsgMetaData;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
import java.util.stream.Stream;
 | 
			
		||||
 | 
			
		||||
import static org.assertj.core.api.Assertions.assertThat;
 | 
			
		||||
import static org.assertj.core.api.Assertions.assertThatNoException;
 | 
			
		||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.any;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.eq;
 | 
			
		||||
import static org.mockito.BDDMockito.given;
 | 
			
		||||
import static org.mockito.BDDMockito.never;
 | 
			
		||||
import static org.mockito.BDDMockito.spy;
 | 
			
		||||
import static org.mockito.BDDMockito.then;
 | 
			
		||||
import static org.mockito.BDDMockito.willReturn;
 | 
			
		||||
@ -103,9 +107,10 @@ class TbPubSubNodeTest {
 | 
			
		||||
 | 
			
		||||
    @ParameterizedTest
 | 
			
		||||
    @MethodSource
 | 
			
		||||
    public void givenMessageAttributesPatterns_whenOnMsg_thenTellSuccess(
 | 
			
		||||
    public void givenForceAckIsTrueAndMessageAttributesPatterns_whenOnMsg_thenEnqueueForTellNext(
 | 
			
		||||
            String attributeName, String attributeValue, TbMsgMetaData metaData, String data) {
 | 
			
		||||
        config.setMessageAttributes(Map.of(attributeName, attributeValue));
 | 
			
		||||
        ReflectionTestUtils.setField(node, "forceAck", true);
 | 
			
		||||
        init();
 | 
			
		||||
 | 
			
		||||
        String messageId = "2070443601311540";
 | 
			
		||||
@ -115,6 +120,7 @@ class TbPubSubNodeTest {
 | 
			
		||||
        TbMsg msg = TbMsg.newMsg(TbMsgType.POST_TELEMETRY_REQUEST, DEVICE_ID, metaData, data);
 | 
			
		||||
        node.onMsg(ctxMock, msg);
 | 
			
		||||
 | 
			
		||||
        then(ctxMock).should().ack(msg);
 | 
			
		||||
        PubsubMessage.Builder pubsubMessageBuilder = PubsubMessage.newBuilder();
 | 
			
		||||
        pubsubMessageBuilder.setData(ByteString.copyFromUtf8(msg.getData()));
 | 
			
		||||
        this.config.getMessageAttributes().forEach((k, v) -> {
 | 
			
		||||
@ -124,7 +130,7 @@ class TbPubSubNodeTest {
 | 
			
		||||
        });
 | 
			
		||||
        then(pubSubClientMock).should().publish(pubsubMessageBuilder.build());
 | 
			
		||||
        ArgumentCaptor<TbMsg> actualMsg = ArgumentCaptor.forClass(TbMsg.class);
 | 
			
		||||
        then(ctxMock).should().tellSuccess(actualMsg.capture());
 | 
			
		||||
        then(ctxMock).should().enqueueForTellNext(actualMsg.capture(), eq(TbNodeConnectionType.SUCCESS));
 | 
			
		||||
        metaData.putValue("messageId", messageId);
 | 
			
		||||
        TbMsg expectedMsg = TbMsg.transformMsgMetadata(msg, metaData);
 | 
			
		||||
        assertThat(actualMsg.getValue())
 | 
			
		||||
@ -133,7 +139,7 @@ class TbPubSubNodeTest {
 | 
			
		||||
                .isEqualTo(expectedMsg);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static Stream<Arguments> givenMessageAttributesPatterns_whenOnMsg_thenTellSuccess() {
 | 
			
		||||
    private static Stream<Arguments> givenForceAckIsTrueAndMessageAttributesPatterns_whenOnMsg_thenEnqueueForTellNext() {
 | 
			
		||||
        return Stream.of(
 | 
			
		||||
                Arguments.of("attributeName", "attributeValue", new TbMsgMetaData(), TbMsg.EMPTY_JSON_OBJECT),
 | 
			
		||||
                Arguments.of("${mdAttrName}", "${mdAttrValue}", new TbMsgMetaData(
 | 
			
		||||
@ -147,8 +153,9 @@ class TbPubSubNodeTest {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void givenErrorOccursOnTheGCP_whenOnMsg_thenTellFailure() {
 | 
			
		||||
    public void givenForceAckIsFalseAndErrorOccursOnTheGCP_whenOnMsg_thenTellFailure() {
 | 
			
		||||
        init();
 | 
			
		||||
        ReflectionTestUtils.setField(node, "forceAck", false);
 | 
			
		||||
 | 
			
		||||
        String errorMsg = "Something went wrong!";
 | 
			
		||||
        ApiFuture<String> failedFuture = ApiFutures.immediateFailedFuture(new RuntimeException(errorMsg));
 | 
			
		||||
@ -159,6 +166,7 @@ class TbPubSubNodeTest {
 | 
			
		||||
        TbMsg msg = TbMsg.newMsg(TbMsgType.POST_TELEMETRY_REQUEST, DEVICE_ID, metaData, TbMsg.EMPTY_JSON_OBJECT);
 | 
			
		||||
        node.onMsg(ctxMock, msg);
 | 
			
		||||
 | 
			
		||||
        then(ctxMock).should(never()).ack(any());
 | 
			
		||||
        ArgumentCaptor<TbMsg> actualMsg = ArgumentCaptor.forClass(TbMsg.class);
 | 
			
		||||
        ArgumentCaptor<Throwable> actualError = ArgumentCaptor.forClass(Throwable.class);
 | 
			
		||||
        then(ctxMock).should().tellFailure(actualMsg.capture(), actualError.capture());
 | 
			
		||||
@ -171,6 +179,21 @@ class TbPubSubNodeTest {
 | 
			
		||||
        assertThat(actualError.getValue()).isInstanceOf(RuntimeException.class).hasMessage(errorMsg);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void givenPubSubClientIsNotNull_whenDestroy_thenShutDownAndAwaitTermination() throws InterruptedException {
 | 
			
		||||
        ReflectionTestUtils.setField(node, "pubSubClient", pubSubClientMock);
 | 
			
		||||
        node.destroy();
 | 
			
		||||
        then(pubSubClientMock).should().shutdown();
 | 
			
		||||
        then(pubSubClientMock).should().awaitTermination(1, TimeUnit.SECONDS);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void givenPubSubClientIsNull_whenDestroy_thenShutDownAndAwaitTermination() {
 | 
			
		||||
        ReflectionTestUtils.setField(node, "pubSubClient", null);
 | 
			
		||||
        node.destroy();
 | 
			
		||||
        then(pubSubClientMock).shouldHaveNoInteractions();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void init() {
 | 
			
		||||
        ReflectionTestUtils.setField(node, "config", config);
 | 
			
		||||
        ReflectionTestUtils.setField(node, "pubSubClient", pubSubClientMock);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user