Skip to content

Commit 96c104d

Browse files
Adding tests
1 parent 154a615 commit 96c104d

File tree

8 files changed

+279
-75
lines changed

8 files changed

+279
-75
lines changed

client/src/main/java/io/split/client/SplitFactoryImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import io.split.integrations.IntegrationsConfig;
2828
import io.split.telemetry.storage.InMemoryTelemetryStorage;
2929
import io.split.telemetry.storage.TelemetryStorage;
30-
import io.split.telemetry.synchronizer.SynchronizerMemory;
30+
import io.split.telemetry.synchronizer.TelemetrySubmitter;
3131
import io.split.telemetry.synchronizer.TelemetrySyncTask;
3232
import io.split.telemetry.synchronizer.TelemetrySynchronizer;
3333
import org.apache.hc.client5.http.auth.AuthScope;
@@ -123,7 +123,7 @@ public SplitFactoryImpl(String apiToken, SplitClientConfig config) throws URISyn
123123
// Cache Initialisations
124124
_segmentCache = new SegmentCacheInMemoryImpl();
125125
_splitCache = new InMemoryCacheImp();
126-
_telemetrySynchronizer = new SynchronizerMemory(_httpclient, URI.create(config.get_telemetryURL()), _telemetryStorage, _splitCache, _segmentCache, _telemetryStorage, _startTime);
126+
_telemetrySynchronizer = new TelemetrySubmitter(_httpclient, URI.create(config.get_telemetryURL()), _telemetryStorage, _splitCache, _segmentCache, _telemetryStorage, _startTime);
127127

128128

129129
// Segments

client/src/main/java/io/split/telemetry/synchronizer/SynchronizerMemory.java renamed to client/src/main/java/io/split/telemetry/synchronizer/TelemetrySubmitter.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.split.telemetry.synchronizer;
22

3+
import com.google.common.annotations.VisibleForTesting;
34
import io.split.cache.SegmentCache;
45
import io.split.cache.SplitCache;
56
import io.split.client.SplitClientConfig;
@@ -23,7 +24,7 @@
2324
import java.util.List;
2425
import java.util.Map;
2526

26-
public class SynchronizerMemory implements TelemetrySynchronizer{
27+
public class TelemetrySubmitter implements TelemetrySynchronizer{
2728

2829
private static final int OPERATION_MODE = 0;
2930
private static final String STORAGE = "memory";
@@ -34,7 +35,7 @@ public class SynchronizerMemory implements TelemetrySynchronizer{
3435
private SegmentCache _segmentCache;
3536
private final long _initStartTime;
3637

37-
public SynchronizerMemory(CloseableHttpClient client, URI telemetryRootEndpoint, TelemetryStorageConsumer telemetryStorageConsumer, SplitCache splitCache,
38+
public TelemetrySubmitter(CloseableHttpClient client, URI telemetryRootEndpoint, TelemetryStorageConsumer telemetryStorageConsumer, SplitCache splitCache,
3839
SegmentCache segmentCache, TelemetryRuntimeProducer telemetryRuntimeProducer, long initStartTime) throws URISyntaxException {
3940
_httpHttpTelemetryMemorySender = HttpTelemetryMemorySender.create(client, telemetryRootEndpoint, telemetryRuntimeProducer);
4041
_teleTelemetryStorageConsumer = telemetryStorageConsumer;
@@ -53,7 +54,8 @@ public void synchronizeStats() throws Exception {
5354
_httpHttpTelemetryMemorySender.postStats(generateStats());
5455
}
5556

56-
private Stats generateStats() throws Exception {
57+
@VisibleForTesting
58+
Stats generateStats() throws Exception {
5759
Stats stats = new Stats();
5860
stats.set_lastSynchronization(_teleTelemetryStorageConsumer.getLastSynchronization());
5961
stats.set_methodLatencies(_teleTelemetryStorageConsumer.popLatencies());
@@ -76,7 +78,8 @@ private Stats generateStats() throws Exception {
7678
return stats;
7779
}
7880

79-
private Config generateConfig(SplitClientConfig splitClientConfig, long readyTimestamp, Map<String, Long> factoryInstances, List<String> tags) {
81+
@VisibleForTesting
82+
Config generateConfig(SplitClientConfig splitClientConfig, long readyTimestamp, Map<String, Long> factoryInstances, List<String> tags) {
8083
Config config = new Config();
8184
Rates rates = new Rates();
8285
URLOverrides urlOverrides = new URLOverrides();
@@ -93,11 +96,11 @@ private Config generateConfig(SplitClientConfig splitClientConfig, long readyTim
9396
rates.set_segments(splitClientConfig.segmentsRefreshRate());
9497
rates.set_splits(splitClientConfig.featuresRefreshRate());
9598

96-
urlOverrides.set_auth(SplitClientConfig.AUTH_ENDPOINT.equals(splitClientConfig.authServiceURL()));
97-
urlOverrides.set_stream(SplitClientConfig.STREAMING_ENDPOINT.equals(splitClientConfig.streamingServiceURL()));
98-
urlOverrides.set_sdk(SplitClientConfig.SDK_ENDPOINT.equals(splitClientConfig.endpoint()));
99-
urlOverrides.set_events(SplitClientConfig.EVENTS_ENDPOINT.equals(splitClientConfig.eventsEndpoint()));
100-
urlOverrides.set_telemetry(SplitClientConfig.TELEMETRY_ENDPOINT.equals(splitClientConfig.get_telemetryURL()));
99+
urlOverrides.set_auth(!SplitClientConfig.AUTH_ENDPOINT.equals(splitClientConfig.authServiceURL()));
100+
urlOverrides.set_stream(!SplitClientConfig.STREAMING_ENDPOINT.equals(splitClientConfig.streamingServiceURL()));
101+
urlOverrides.set_sdk(!SplitClientConfig.SDK_ENDPOINT.equals(splitClientConfig.endpoint()));
102+
urlOverrides.set_events(!SplitClientConfig.EVENTS_ENDPOINT.equals(splitClientConfig.eventsEndpoint()));
103+
urlOverrides.set_telemetry(!SplitClientConfig.TELEMETRY_ENDPOINT.equals(splitClientConfig.get_telemetryURL()));
101104

102105
config.set_burTimeouts(_teleTelemetryStorageConsumer.getBURTimeouts());
103106
config.set_nonReadyUsages(_teleTelemetryStorageConsumer.getNonReadyUsages());

client/src/test/java/io/split/client/SplitFactoryImplTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package io.split.client;
22

33
import io.split.client.impressions.ImpressionsManager;
4+
import io.split.engine.segments.SegmentSynchronizationTaskImp;
45
import io.split.integrations.IntegrationsConfig;
6+
import io.split.telemetry.storage.TelemetryStorage;
57
import junit.framework.TestCase;
68
import org.junit.Test;
9+
import org.mockito.Mockito;
710

11+
import java.lang.reflect.Field;
12+
import java.lang.reflect.Modifier;
813
import java.net.URISyntaxException;
914

1015
public class SplitFactoryImplTest extends TestCase {
@@ -89,6 +94,7 @@ public void testFactoryInstantiationWithProxy() throws Exception {
8994

9095
@Test
9196
public void testFactoryDestroy() throws Exception {
97+
TelemetryStorage telemetryStorage = Mockito.mock(TelemetryStorage.class);
9298
SplitClientConfig splitClientConfig = SplitClientConfig.builder()
9399
.enableDebug()
94100
.impressionsMode(ImpressionsManager.Mode.DEBUG)
@@ -98,10 +104,20 @@ public void testFactoryDestroy() throws Exception {
98104
.authServiceURL(AUTH_SERVICE)
99105
.setBlockUntilReadyTimeout(10000)
100106
.build();
107+
101108
SplitFactoryImpl splitFactory = new SplitFactoryImpl(API_KEY, splitClientConfig);
109+
//Before destroy we replace telemetryStorage via reflection.
110+
Field factoryDestroy = SplitFactoryImpl.class.getDeclaredField("_telemetryStorage");
111+
factoryDestroy.setAccessible(true);
112+
Field modifiersField = Field.class.getDeclaredField("modifiers");
113+
modifiersField.setAccessible(true);
114+
modifiersField.setInt(factoryDestroy, factoryDestroy.getModifiers() & ~Modifier.FINAL);
115+
116+
factoryDestroy.set(splitFactory, telemetryStorage);
102117
splitFactory.destroy();
103118

104119
assertTrue(splitFactory.isDestroyed());
120+
Mockito.verify(telemetryStorage, Mockito.times(1)).recordSessionLength(Mockito.anyLong());
105121
}
106122

107123
}

client/src/test/java/io/split/client/impressions/ImpressionsManagerImplTest.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
import io.split.client.dtos.KeyImpression;
55
import io.split.client.dtos.TestImpressions;
66

7+
import io.split.telemetry.domain.enums.ImpressionsDataTypeEnum;
78
import io.split.telemetry.storage.InMemoryTelemetryStorage;
89
import io.split.telemetry.storage.TelemetryStorage;
10+
import org.junit.Before;
911
import org.junit.Ignore;
1012
import org.junit.Test;
1113
import org.junit.runner.RunWith;
@@ -21,15 +23,19 @@
2123

2224
import static org.hamcrest.Matchers.*;
2325
import static org.junit.Assert.assertThat;
24-
import static org.mockito.Mockito.never;
25-
import static org.mockito.Mockito.verify;
26+
import static org.mockito.Mockito.*;
2627

2728
/**
2829
* Created by patricioe on 6/20/16.
2930
*/
3031
@RunWith(MockitoJUnitRunner.class)
3132
public class ImpressionsManagerImplTest {
32-
private static final TelemetryStorage TELEMETRY_STORAGE = Mockito.mock(InMemoryTelemetryStorage.class);
33+
private static TelemetryStorage TELEMETRY_STORAGE = Mockito.mock(InMemoryTelemetryStorage.class);
34+
35+
@Before
36+
public void setUp() {
37+
TELEMETRY_STORAGE = Mockito.mock(InMemoryTelemetryStorage.class);
38+
}
3339

3440
@Captor
3541
private ArgumentCaptor<List<TestImpressions>> impressionsCaptor;
@@ -102,6 +108,7 @@ public void worksButDropsImpressions() throws URISyntaxException {
102108
List<TestImpressions> captured = impressionsCaptor.getValue();
103109

104110
assertThat(captured.size(), is(equalTo(3)));
111+
Mockito.verify(TELEMETRY_STORAGE, times(1)).recordImpressionStats(ImpressionsDataTypeEnum.IMPRESSIONS_DROPPED, 1);
105112
}
106113

107114
@Test
@@ -138,6 +145,8 @@ public void works4ImpressionsInOneTest() throws URISyntaxException {
138145
assertThat(captured.size(), is(equalTo(1)));
139146
assertThat(captured.get(0).keyImpressions.size(), is(equalTo(4)));
140147
assertThat(captured.get(0).keyImpressions.get(0), is(equalTo(ki1)));
148+
Mockito.verify(TELEMETRY_STORAGE, times(2)).recordImpressionStats(ImpressionsDataTypeEnum.IMPRESSIONS_DEDUPED, 1);
149+
Mockito.verify(TELEMETRY_STORAGE, times(4)).recordImpressionStats(ImpressionsDataTypeEnum.IMPRESSIONS_QUEUED, 1);
141150
}
142151

143152
@Test

client/src/test/java/io/split/engine/sse/AuthApiClientTest.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,20 @@
88
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
99
import org.apache.hc.core5.http.HttpStatus;
1010
import org.junit.Assert;
11+
import org.junit.Before;
1112
import org.junit.Test;
1213
import org.mockito.Mockito;
1314

1415
import java.io.IOException;
1516
import java.lang.reflect.InvocationTargetException;
1617

1718
public class AuthApiClientTest {
18-
private static final TelemetryStorage TELEMETRY_STORAGE = Mockito.mock(InMemoryTelemetryStorage.class);
19+
private static TelemetryStorage TELEMETRY_STORAGE = Mockito.mock(InMemoryTelemetryStorage.class);
20+
21+
@Before
22+
public void setUp() {
23+
TELEMETRY_STORAGE = Mockito.mock(InMemoryTelemetryStorage.class);
24+
}
1925
@Test
2026
public void authenticateWithPushEnabledShouldReturnSuccess() throws IOException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
2127
CloseableHttpClient httpClientMock = TestHelper.mockHttpClient("streaming-auth-push-enabled.json", HttpStatus.SC_OK);
@@ -28,6 +34,9 @@ public void authenticateWithPushEnabledShouldReturnSuccess() throws IOException,
2834
Assert.assertFalse(result.isRetry());
2935
Assert.assertFalse(StringUtils.isEmpty(result.getToken()));
3036
Assert.assertTrue(result.getExpiration() > 0);
37+
Mockito.verify(TELEMETRY_STORAGE, Mockito.times(1)).recordTokenRefreshes();
38+
Mockito.verify(TELEMETRY_STORAGE, Mockito.times(1)).recordSyncLatency(Mockito.anyObject(), Mockito.anyLong());
39+
Mockito.verify(TELEMETRY_STORAGE, Mockito.times(1)).recordSuccessfulSync(Mockito.anyObject(), Mockito.anyLong());
3140

3241
}
3342

@@ -95,5 +104,6 @@ public void authenticateServerUnauthorizedShouldReturnErrorWithoutRetry() throws
95104
Assert.assertTrue(StringUtils.isEmpty(result.getChannels()));
96105
Assert.assertTrue(StringUtils.isEmpty(result.getToken()));
97106
Assert.assertFalse(result.isRetry());
107+
Mockito.verify(TELEMETRY_STORAGE, Mockito.times(1)).recordAuthRejections();
98108
}
99109
}

client/src/test/java/io/split/telemetry/synchronizer/SynchronizerMemoryTest.java

Lines changed: 0 additions & 58 deletions
This file was deleted.

0 commit comments

Comments
 (0)