View Javadoc

1   package com.atlassian.messagequeue.internal.core;
2   
3   import cloud.atlassian.external.container.DefaultProductContainerProxy;
4   import com.atlassian.messagequeue.registry.MessageContext;
5   import com.atlassian.messagequeue.registry.MessageRunner;
6   import com.atlassian.tenant.impl.TenantIdSetter;
7   import com.timgroup.statsd.StatsDClient;
8   import org.junit.After;
9   import org.junit.Before;
10  import org.junit.Test;
11  import org.junit.runner.RunWith;
12  import org.mockito.Mock;
13  import org.mockito.runners.MockitoJUnitRunner;
14  
15  import java.util.Optional;
16  
17  import static com.atlassian.messagequeue.internal.core.NestedMessageConstants.MESSAGE_RUNNER_KEY_ATTRIBUTE_NAME;
18  import static com.atlassian.messagequeue.internal.core.NestedMessageConstants.TENANT_ID_ATTRIBUTE_NAME;
19  import static com.atlassian.messagequeue.internal.core.NestedMessageConsumer.STATSD_MESSAGE_PROCESSING_COUNT;
20  import static com.atlassian.messagequeue.internal.core.NestedMessageConsumer.STATSD_MESSAGE_PROCESSING_DURATION;
21  import static com.atlassian.messagequeue.internal.core.NestedMessageConsumer.STATSD_MESSAGE_PROCESSING_TENANTID_SET;
22  import static com.atlassian.messagequeue.internal.core.NestedMessageConsumer.STATSD_MSG_RUNNER_TAG_PREFIX;
23  import static java.util.Collections.emptyList;
24  import static java.util.Optional.empty;
25  import static org.junit.Assert.fail;
26  import static org.mockito.Matchers.any;
27  import static org.mockito.Matchers.anyLong;
28  import static org.mockito.Matchers.eq;
29  import static org.mockito.Mockito.verify;
30  import static org.mockito.Mockito.when;
31  
32  @RunWith(MockitoJUnitRunner.class)
33  public class NestedMessageConsumerTest {
34      private static final String TENANT_ID = "test_tenantID";
35      private static final String MSG_RUNNER_KEY = "test_messageRunnerKey";
36  
37      @Mock
38      private MessageRunnerRegistryHelper messageRunnerHelper;
39      @Mock
40      private TenantIdSetter tenantIdSetter;
41      @Mock
42      private MessageValidatorRegistryHelper messageValidatorRegistryHelper;
43      @Mock
44      private StatsDClient statsDClient;
45      @Mock
46      private MessageRunner messageRunner;
47      @Mock
48      private MessageContext messageContext;
49  
50      private NestedMessageConsumer nestedMessageConsumer;
51  
52      @Before
53      public void setup() {
54          when(messageValidatorRegistryHelper.getAllValidators()).thenReturn(emptyList());
55          when(messageRunnerHelper.getMessageRunner(any())).thenReturn(Optional.of(messageRunner));
56          when(messageContext.getMessageId()).thenReturn(empty());
57          nestedMessageConsumer = new NestedMessageConsumer(messageRunnerHelper, tenantIdSetter, messageValidatorRegistryHelper);
58      }
59  
60      @After
61      public void teardown() {
62          DefaultProductContainerProxy.getInstance().setComponentSupplier(StatsDClient.class, Optional::empty);
63      }
64  
65      @Test
66      public void consume_send_metrics_when_statsdclient_available() {
67          NestedMessage nestedMessage = getNestedMessage();
68  
69          DefaultProductContainerProxy.getInstance().setComponentSupplier(StatsDClient.class, () -> Optional.of(statsDClient));
70          final String TAG = STATSD_MSG_RUNNER_TAG_PREFIX + MSG_RUNNER_KEY;
71          nestedMessageConsumer.consume(nestedMessage, messageContext);
72          verify(statsDClient).increment(STATSD_MESSAGE_PROCESSING_COUNT, TAG);
73          verify(statsDClient).recordExecutionTime(eq(STATSD_MESSAGE_PROCESSING_DURATION), anyLong(), eq(TAG));
74          verify(statsDClient).recordSetValue(STATSD_MESSAGE_PROCESSING_TENANTID_SET, TENANT_ID, TAG);
75  
76      }
77  
78      @Test
79      public void consume_resilent_when_statsdclient_NOT_available() {
80          NestedMessage nestedMessage = getNestedMessage();
81  
82          DefaultProductContainerProxy.getInstance().setComponentSupplier(StatsDClient.class, Optional::empty);
83          try {
84              nestedMessageConsumer.consume(nestedMessage, messageContext);
85          } catch (Exception anyException) {
86              fail("There shouldn't be Exception procrssing the msg.");
87          }
88      }
89  
90      private static NestedMessage getNestedMessage() {
91          NestedMessage nestedMessage = new NestedMessage();
92          nestedMessage.addAttribute(TENANT_ID_ATTRIBUTE_NAME, TENANT_ID);
93          nestedMessage.addAttribute(MESSAGE_RUNNER_KEY_ATTRIBUTE_NAME, MSG_RUNNER_KEY);
94          return nestedMessage;
95      }
96  }