Skip to content

Commit

Permalink
Merge pull request #430 from splitio/impression-listener
Browse files Browse the repository at this point in the history
[SDKS-7479] Update track impressions to send all impressions to listener
  • Loading branch information
nmayorsplit authored Sep 6, 2023
2 parents d439f75 + 2817e33 commit 8ce783b
Show file tree
Hide file tree
Showing 2 changed files with 149 additions and 19 deletions.
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

0 comments on commit 8ce783b

Please sign in to comment.