mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-21 06:18:06 +01:00
Tag client request metrics with specific client versions
This commit is contained in:
committed by
Jon Chambers
parent
bf6939ec00
commit
23a3e32eb8
@@ -30,7 +30,6 @@ import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.CsvSource;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
import org.junit.jupiter.params.provider.ValueSource;
|
||||
import org.junitpioneer.jupiter.cartesian.CartesianTest;
|
||||
import org.mockito.Mock;
|
||||
import org.signal.chat.backup.BackupsGrpc;
|
||||
import org.signal.chat.backup.GetBackupAuthCredentialsRequest;
|
||||
|
||||
@@ -36,6 +36,7 @@ import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.ValueSource;
|
||||
import org.junitpioneer.jupiter.cartesian.CartesianTest;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.whispersystems.textsecuregcm.storage.ClientReleaseManager;
|
||||
|
||||
@@ -75,10 +76,11 @@ class MetricsHttpEventHandlerTest {
|
||||
listener = new MetricsHttpEventHandler(null, meterRegistry, clientReleaseManager, Set.of("/test"));
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ValueSource(booleans = {true, false})
|
||||
@CartesianTest
|
||||
@SuppressWarnings("unchecked")
|
||||
void testRequests(boolean pathFromFilter) {
|
||||
void testRequests(@CartesianTest.Values(booleans = {true, false}) final boolean pathFromFilter,
|
||||
@CartesianTest.Values(booleans = {true, false}) final boolean versionActive) {
|
||||
|
||||
final String path = "/test";
|
||||
final String method = "GET";
|
||||
final int statusCode = 200;
|
||||
@@ -105,10 +107,11 @@ class MetricsHttpEventHandlerTest {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
final Response response = mock(Response.class);
|
||||
when(response.getStatus()).thenReturn(statusCode);
|
||||
|
||||
when(clientReleaseManager.isVersionActive(any(), any())).thenReturn(versionActive);
|
||||
|
||||
final ArgumentCaptor<Iterable<Tag>> tagCaptor = ArgumentCaptor.forClass(Iterable.class);
|
||||
|
||||
listener.onRequestRead(request, Content.Chunk.from(ByteBuffer.allocate(512), true));
|
||||
@@ -127,7 +130,7 @@ class MetricsHttpEventHandlerTest {
|
||||
tags.add(tag);
|
||||
}
|
||||
|
||||
assertEquals(6, tags.size());
|
||||
assertEquals(versionActive ? 7 : 6, tags.size());
|
||||
assertTrue(tags.contains(Tag.of(MetricsHttpEventHandler.PATH_TAG, path)));
|
||||
assertTrue(tags.contains(Tag.of(MetricsHttpEventHandler.METHOD_TAG, method)));
|
||||
assertTrue(tags.contains(Tag.of(MetricsHttpEventHandler.STATUS_CODE_TAG, String.valueOf(statusCode))));
|
||||
@@ -135,6 +138,7 @@ class MetricsHttpEventHandlerTest {
|
||||
tags.contains(Tag.of(MetricsHttpEventHandler.TRAFFIC_SOURCE_TAG, TrafficSource.HTTP.name().toLowerCase())));
|
||||
assertTrue(tags.contains(Tag.of(UserAgentTagUtil.PLATFORM_TAG, "android")));
|
||||
assertTrue(tags.contains(Tag.of(UserAgentTagUtil.LIBSIGNAL_TAG, "false")));
|
||||
assertEquals(versionActive, tags.contains(Tag.of(UserAgentTagUtil.VERSION_TAG, "6.53.7")));
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
|
||||
@@ -11,6 +11,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@@ -65,6 +67,8 @@ class MetricsRequestEventListenerTest {
|
||||
private Counter counter;
|
||||
private Counter responseBytesCounter;
|
||||
private Counter requestBytesCounter;
|
||||
private Counter requestsByVersionCounter;
|
||||
private ClientReleaseManager clientReleaseManager;
|
||||
private MetricsRequestEventListener listener;
|
||||
|
||||
private static final TrafficSource TRAFFIC_SOURCE = TrafficSource.HTTP;
|
||||
@@ -75,20 +79,22 @@ class MetricsRequestEventListenerTest {
|
||||
counter = mock(Counter.class);
|
||||
responseBytesCounter = mock(Counter.class);
|
||||
requestBytesCounter = mock(Counter.class);
|
||||
|
||||
final ClientReleaseManager clientReleaseManager = mock(ClientReleaseManager.class);
|
||||
when(clientReleaseManager.isVersionActive(any(), any())).thenReturn(false);
|
||||
requestsByVersionCounter = mock(Counter.class);
|
||||
clientReleaseManager = mock(ClientReleaseManager.class);
|
||||
|
||||
listener = new MetricsRequestEventListener(TRAFFIC_SOURCE, meterRegistry, clientReleaseManager);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ParameterizedTest
|
||||
@ValueSource(booleans = {true, false})
|
||||
@SuppressWarnings("unchecked")
|
||||
void testOnEvent() {
|
||||
void testOnEvent(final boolean versionActive) {
|
||||
final String path = "/test";
|
||||
final String method = "GET";
|
||||
final int statusCode = 200;
|
||||
|
||||
when(clientReleaseManager.isVersionActive(any(), any())).thenReturn(versionActive);
|
||||
|
||||
final ExtendedUriInfo uriInfo = mock(ExtendedUriInfo.class);
|
||||
when(uriInfo.getMatchedTemplates()).thenReturn(Collections.singletonList(new UriTemplate(path)));
|
||||
|
||||
@@ -115,6 +121,8 @@ class MetricsRequestEventListenerTest {
|
||||
.thenReturn(responseBytesCounter);
|
||||
when(meterRegistry.counter(eq(MetricsRequestEventListener.REQUEST_BYTES_COUNTER_NAME), any(Iterable.class)))
|
||||
.thenReturn(requestBytesCounter);
|
||||
when(meterRegistry.counter(eq(MetricsRequestEventListener.REQUESTS_BY_VERSION_COUNTER_NAME), any(Iterable.class)))
|
||||
.thenReturn(requestsByVersionCounter);
|
||||
|
||||
listener.onEvent(event);
|
||||
|
||||
@@ -122,6 +130,7 @@ class MetricsRequestEventListenerTest {
|
||||
verify(counter).increment();
|
||||
verify(responseBytesCounter).increment(1024L);
|
||||
verify(requestBytesCounter).increment(512L);
|
||||
verify(requestsByVersionCounter, versionActive ? times(1) : never()).increment();
|
||||
|
||||
final Iterable<Tag> tagIterable = tagCaptor.getValue();
|
||||
final Set<Tag> tags = new HashSet<>();
|
||||
@@ -130,7 +139,7 @@ class MetricsRequestEventListenerTest {
|
||||
tags.add(tag);
|
||||
}
|
||||
|
||||
assertEquals(7, tags.size());
|
||||
assertEquals(versionActive ? 8 : 7, tags.size());
|
||||
assertTrue(tags.contains(Tag.of(MetricsRequestEventListener.PATH_TAG, path)));
|
||||
assertTrue(tags.contains(Tag.of(MetricsRequestEventListener.METHOD_TAG, method)));
|
||||
assertTrue(tags.contains(Tag.of(MetricsRequestEventListener.STATUS_CODE_TAG, String.valueOf(statusCode))));
|
||||
@@ -138,6 +147,7 @@ class MetricsRequestEventListenerTest {
|
||||
assertTrue(tags.contains(Tag.of(MetricsRequestEventListener.AUTHENTICATED_TAG, "false")));
|
||||
assertTrue(tags.contains(Tag.of(UserAgentTagUtil.PLATFORM_TAG, "android")));
|
||||
assertTrue(tags.contains(Tag.of(UserAgentTagUtil.LIBSIGNAL_TAG, "true")));
|
||||
assertEquals(versionActive, tags.contains(Tag.of(UserAgentTagUtil.VERSION_TAG, "7.6.2")));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user