Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public static ImpressionsManagerImpl instanceForTest(SplitClientConfig config,
ImpressionsStorageProducer impressionsStorageProducer,
ProcessImpressionStrategy processImpressionStrategy,
ImpressionCounter counter,
ImpressionListener listener) throws URISyntaxException {
ImpressionListener listener) {
return new ImpressionsManagerImpl(config, impressionsSender, telemetryRuntimeProducer, impressionsStorageConsumer,
impressionsStorageProducer, processImpressionStrategy, counter, listener);
}
Expand All @@ -73,7 +73,7 @@ private ImpressionsManagerImpl(SplitClientConfig config,
ImpressionsStorageProducer impressionsStorageProducer,
ProcessImpressionStrategy processImpressionStrategy,
ImpressionCounter impressionCounter,
ImpressionListener impressionListener) throws URISyntaxException {
ImpressionListener impressionListener) {


_config = checkNotNull(config);
Expand Down Expand Up @@ -117,7 +117,7 @@ public void track(List<Impression> impressions) {

ImpressionsResult impressionsResult = _processImpressionStrategy.process(impressions);
List<Impression> impressionsForLogs = impressionsResult.getImpressionsToQueue();
List<Impression> impressionsToListener = impressionsResult.getImpressionsToQueue();
List<Impression> impressionsToListener = impressionsResult.getImpressionsToListener();

int totalImpressions = impressionsForLogs.size();
long queued = _impressionsStorageProducer.put(impressionsForLogs.stream().map(KeyImpression::fromImpression).collect(Collectors.toList()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@

import java.net.URISyntaxException;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Optional;
Expand Down Expand Up @@ -55,6 +56,9 @@ public void setUp() {
@Captor
private ArgumentCaptor<List<TestImpressions>> impressionsCaptor;

@Captor
private ArgumentCaptor<List<KeyImpression>> impressionKeyList;

@Captor
private ArgumentCaptor<UniqueKeys> uniqueKeysCaptor;

Expand Down Expand Up @@ -100,7 +104,133 @@ public void works() throws URISyntaxException {
}

@Test
public void worksButDropsImpressions() throws URISyntaxException {
public void testImpressionListenerOptimize() {
SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(10)
.endpoint("nowhere.com", "nowhere.com")
.impressionsMode(ImpressionsManager.Mode.OPTIMIZED)
.build();
ImpressionsStorage storage = Mockito.mock(InMemoryImpressionsStorage.class);

ImpressionsSender senderMock = Mockito.mock(ImpressionsSender.class);
ImpressionCounter impressionCounter = new ImpressionCounter();
ImpressionObserver impressionObserver = new ImpressionObserver(200);
TelemetryStorageProducer telemetryStorageProducer = new InMemoryTelemetryStorage();

ProcessImpressionStrategy processImpressionStrategy = new ProcessImpressionOptimized(true, impressionObserver, impressionCounter, telemetryStorageProducer);

ImpressionListener impressionListener = Mockito.mock(AsynchronousImpressionListener.class);

ImpressionsManagerImpl treatmentLog = ImpressionsManagerImpl.instanceForTest(config, senderMock, TELEMETRY_STORAGE, storage, storage, processImpressionStrategy, impressionCounter, impressionListener);
treatmentLog.start();

KeyImpression ki1 = keyImpression("test1", "adil", "on", 1L, 1L);
KeyImpression ki2 = keyImpression("test1", "adil", "on", 1L, 1L);
KeyImpression ki3 = keyImpression("test1", "pato", "on", 3L, 2L);
KeyImpression ki4 = keyImpression("test2", "pato", "on", 4L, 3L);

List<Impression> impressionList = new ArrayList<>();
impressionList.add(new Impression(ki1.keyName, null, ki1.feature, ki1.treatment, ki1.time, null, ki1.changeNumber, null));
impressionList.add(new Impression(ki2.keyName, null, ki2.feature, ki2.treatment, ki2.time, null, ki2.changeNumber, null));
impressionList.add(new Impression(ki3.keyName, null, ki3.feature, ki3.treatment, ki3.time, null, ki3.changeNumber, null));
impressionList.add(new Impression(ki4.keyName, null, ki4.feature, ki4.treatment, ki4.time, null, ki4.changeNumber, null));

treatmentLog.track(impressionList);
verify(impressionListener, times(4)).log(Mockito.anyObject());

verify(storage).put(impressionKeyList.capture());

List captured = impressionKeyList.getValue();

Assert.assertEquals(3, captured.size());
}

@Test
public void testImpressionListenerDebug() {
SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(6)
.endpoint("nowhere.com", "nowhere.com")
.impressionsMode(ImpressionsManager.Mode.DEBUG)
.build();
ImpressionsStorage storage = Mockito.mock(InMemoryImpressionsStorage.class);

ImpressionsSender senderMock = Mockito.mock(ImpressionsSender.class);
ImpressionCounter impressionCounter = Mockito.mock(ImpressionCounter.class);
ImpressionObserver impressionObserver = new ImpressionObserver(200);

ProcessImpressionStrategy processImpressionStrategy = new ProcessImpressionDebug(true, impressionObserver);

ImpressionListener impressionListener = Mockito.mock(AsynchronousImpressionListener.class);

ImpressionsManagerImpl treatmentLog = ImpressionsManagerImpl.instanceForTest(config, senderMock, TELEMETRY_STORAGE, storage, storage, processImpressionStrategy, impressionCounter, impressionListener);
treatmentLog.start();

KeyImpression ki1 = keyImpression("test1", "adil", "on", 1L, 1L);
KeyImpression ki2 = keyImpression("test1", "adil", "on", 1L, 1L);
KeyImpression ki3 = keyImpression("test1", "pato", "on", 3L, 2L);
KeyImpression ki4 = keyImpression("test2", "pato", "on", 4L, 3L);

List<Impression> impressionList = new ArrayList<>();
impressionList.add(new Impression(ki1.keyName, null, ki1.feature, ki1.treatment, ki1.time, null, ki1.changeNumber, null));
impressionList.add(new Impression(ki2.keyName, null, ki2.feature, ki2.treatment, ki2.time, null, ki2.changeNumber, null));
impressionList.add(new Impression(ki3.keyName, null, ki3.feature, ki3.treatment, ki3.time, null, ki3.changeNumber, null));
impressionList.add(new Impression(ki4.keyName, null, ki4.feature, ki4.treatment, ki4.time, null, ki4.changeNumber, null));

treatmentLog.track(impressionList);
verify(impressionListener, times(4)).log(Mockito.anyObject());

verify(storage).put(impressionKeyList.capture());

List captured = impressionKeyList.getValue();

Assert.assertEquals(4, captured.size());
}

@Test
public void testImpressionListenerNone() {
SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(10)
.endpoint("nowhere.com", "nowhere.com")
.impressionsMode(ImpressionsManager.Mode.NONE)
.build();
ImpressionsStorage storage = Mockito.mock(InMemoryImpressionsStorage.class);

ImpressionsSender senderMock = Mockito.mock(ImpressionsSender.class);
TelemetrySynchronizer telemetrySynchronizer = Mockito.mock(TelemetryInMemorySubmitter.class);
ImpressionCounter impressionCounter = new ImpressionCounter();
UniqueKeysTracker uniqueKeysTracker = new UniqueKeysTrackerImp(telemetrySynchronizer, 1000, 1000, null);
uniqueKeysTracker.start();

ProcessImpressionStrategy processImpressionStrategy = new ProcessImpressionNone(true, uniqueKeysTracker, impressionCounter);

ImpressionListener impressionListener = Mockito.mock(AsynchronousImpressionListener.class);

ImpressionsManagerImpl treatmentLog = ImpressionsManagerImpl.instanceForTest(config, senderMock, TELEMETRY_STORAGE, storage, storage, processImpressionStrategy, impressionCounter, impressionListener);
treatmentLog.start();

KeyImpression ki1 = keyImpression("test1", "adil", "on", 1L, 1L);
KeyImpression ki2 = keyImpression("test1", "adil", "on", 1L, 1L);
KeyImpression ki3 = keyImpression("test1", "pato", "on", 3L, 2L);
KeyImpression ki4 = keyImpression("test2", "pato", "on", 4L, 3L);

List<Impression> impressionList = new ArrayList<>();
impressionList.add(new Impression(ki1.keyName, null, ki1.feature, ki1.treatment, ki1.time, null, ki1.changeNumber, null));
impressionList.add(new Impression(ki2.keyName, null, ki2.feature, ki2.treatment, ki2.time, null, ki2.changeNumber, null));
impressionList.add(new Impression(ki3.keyName, null, ki3.feature, ki3.treatment, ki3.time, null, ki3.changeNumber, null));
impressionList.add(new Impression(ki4.keyName, null, ki4.feature, ki4.treatment, ki4.time, null, ki4.changeNumber, null));

treatmentLog.track(impressionList);
verify(impressionListener, times(4)).log(Mockito.anyObject());

verify(storage).put(impressionKeyList.capture());

List captured = impressionKeyList.getValue();

Assert.assertEquals(0, captured.size());
}

@Test
public void worksButDropsImpressions() {

SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(3)
Expand Down Expand Up @@ -141,7 +271,7 @@ public void worksButDropsImpressions() throws URISyntaxException {
}

@Test
public void works4ImpressionsInOneTest() throws URISyntaxException {
public void works4ImpressionsInOneTest() {

SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(10)
Expand Down Expand Up @@ -184,7 +314,7 @@ public void works4ImpressionsInOneTest() throws URISyntaxException {
}

@Test
public void worksNoImpressions() throws URISyntaxException {
public void worksNoImpressions() {

SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(10)
Expand All @@ -210,7 +340,7 @@ public void worksNoImpressions() throws URISyntaxException {
}

@Test
public void alreadySeenImpressionsAreMarked() throws URISyntaxException {
public void alreadySeenImpressionsAreMarked() {
SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(10)
.endpoint("nowhere.com", "nowhere.com")
Expand Down Expand Up @@ -266,7 +396,7 @@ public void alreadySeenImpressionsAreMarked() throws URISyntaxException {
}

@Test
public void testImpressionsStandaloneModeOptimizedMode() throws URISyntaxException {
public void testImpressionsStandaloneModeOptimizedMode() {
SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(10)
.endpoint("nowhere.com", "nowhere.com")
Expand Down Expand Up @@ -322,7 +452,7 @@ public void testImpressionsStandaloneModeOptimizedMode() throws URISyntaxExcepti
}

@Test
public void testImpressionsStandaloneModeDebugMode() throws URISyntaxException {
public void testImpressionsStandaloneModeDebugMode() {
SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(10)
.endpoint("nowhere.com", "nowhere.com")
Expand Down Expand Up @@ -370,7 +500,7 @@ public void testImpressionsStandaloneModeDebugMode() throws URISyntaxException {
}

@Test
public void testImpressionsStandaloneModeNoneMode() throws URISyntaxException {
public void testImpressionsStandaloneModeNoneMode() {
SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(10)
.endpoint("nowhere.com", "nowhere.com")
Expand Down Expand Up @@ -426,7 +556,7 @@ public void testImpressionsStandaloneModeNoneMode() throws URISyntaxException {
}

@Test
public void testImpressionsConsumerModeOptimizedMode() throws URISyntaxException {
public void testImpressionsConsumerModeOptimizedMode() {
SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(10)
.endpoint("nowhere.com", "nowhere.com")
Expand Down Expand Up @@ -483,7 +613,7 @@ public void testImpressionsConsumerModeOptimizedMode() throws URISyntaxException
}

@Test
public void testImpressionsConsumerModeNoneMode() throws URISyntaxException {
public void testImpressionsConsumerModeNoneMode() {
SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(10)
.endpoint("nowhere.com", "nowhere.com")
Expand Down Expand Up @@ -540,7 +670,7 @@ public void testImpressionsConsumerModeNoneMode() throws URISyntaxException {
}

@Test
public void testImpressionsConsumerModeDebugMode() throws URISyntaxException {
public void testImpressionsConsumerModeDebugMode() {
SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(10)
.endpoint("nowhere.com", "nowhere.com")
Expand Down Expand Up @@ -590,7 +720,7 @@ public void testImpressionsConsumerModeDebugMode() throws URISyntaxException {
}

@Test
public void testCounterStandaloneModeOptimizedMode() throws URISyntaxException {
public void testCounterStandaloneModeOptimizedMode() {
SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(10)
.endpoint("nowhere.com", "nowhere.com")
Expand All @@ -609,7 +739,7 @@ public void testCounterStandaloneModeOptimizedMode() throws URISyntaxException {
Assert.assertNotNull(manager.getCounter());
}
@Test
public void testCounterStandaloneModeDebugMode() throws URISyntaxException {
public void testCounterStandaloneModeDebugMode() {
SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(10)
.endpoint("nowhere.com", "nowhere.com")
Expand All @@ -627,7 +757,7 @@ public void testCounterStandaloneModeDebugMode() throws URISyntaxException {
}

@Test
public void testCounterStandaloneModeNoseMode() throws URISyntaxException {
public void testCounterStandaloneModeNoneMode() {
SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(10)
.endpoint("nowhere.com", "nowhere.com")
Expand All @@ -645,7 +775,7 @@ public void testCounterStandaloneModeNoseMode() throws URISyntaxException {
}

@Test
public void testCounterConsumerModeOptimizedMode() throws URISyntaxException {
public void testCounterConsumerModeOptimizedMode() {
SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(10)
.endpoint("nowhere.com", "nowhere.com")
Expand All @@ -665,7 +795,7 @@ public void testCounterConsumerModeOptimizedMode() throws URISyntaxException {
}

@Test
public void testCounterConsumerModeDebugMode() throws URISyntaxException {
public void testCounterConsumerModeDebugMode() {
SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(10)
.endpoint("nowhere.com", "nowhere.com")
Expand All @@ -684,7 +814,7 @@ public void testCounterConsumerModeDebugMode() throws URISyntaxException {
}

@Test
public void testCounterConsumerModeNoneMode() throws URISyntaxException {
public void testCounterConsumerModeNoneMode() {
SplitClientConfig config = SplitClientConfig.builder()
.impressionsQueueSize(10)
.endpoint("nowhere.com", "nowhere.com")
Expand Down