Skip to content

Commit e46e558

Browse files
author
Vignesh Raja
authored
Release version 1.0.1 (#27)
1 parent 255ee26 commit e46e558

File tree

10 files changed

+168
-39
lines changed

10 files changed

+168
-39
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 1.0.1
2+
3+
- Allow for configurability of `clientEngine` and `clientVersion` through `Optimizely.Builder`
4+
- Remove ppid query string from V1 events
5+
6+
17
## 1.0.0
28

39
- Introduce support for Full Stack projects in Optimizely X with no breaking changes from previous version

core-api/src/main/java/com/optimizely/ab/Optimizely.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,11 @@
3131
import com.optimizely.ab.error.RaiseExceptionErrorHandler;
3232
import com.optimizely.ab.event.EventHandler;
3333
import com.optimizely.ab.event.LogEvent;
34+
import com.optimizely.ab.event.internal.BuildVersionInfo;
3435
import com.optimizely.ab.event.internal.EventBuilder;
3536
import com.optimizely.ab.event.internal.EventBuilderV1;
3637
import com.optimizely.ab.event.internal.EventBuilderV2;
38+
import com.optimizely.ab.event.internal.payload.Event.ClientEngine;
3739
import com.optimizely.ab.internal.ProjectValidationUtils;
3840

3941
import org.slf4j.Logger;
@@ -441,6 +443,8 @@ public static class Builder {
441443
private ErrorHandler errorHandler;
442444
private EventHandler eventHandler;
443445
private EventBuilder eventBuilder;
446+
private ClientEngine clientEngine;
447+
private String clientVersion;
444448
private ProjectConfig projectConfig;
445449

446450
public Builder(@Nonnull String datafile,
@@ -459,6 +463,16 @@ public Builder withUserExperimentRecord(UserExperimentRecord userExperimentRecor
459463
return this;
460464
}
461465

466+
public Builder withClientEngine(ClientEngine clientEngine) {
467+
this.clientEngine = clientEngine;
468+
return this;
469+
}
470+
471+
public Builder withClientVersion(String clientVersion) {
472+
this.clientVersion = clientVersion;
473+
return this;
474+
}
475+
462476
protected Builder withBucketing(Bucketer bucketer) {
463477
this.bucketer = bucketer;
464478
return this;
@@ -485,11 +499,19 @@ public Optimizely build() throws ConfigParseException {
485499
bucketer = new Bucketer(projectConfig, userExperimentRecord);
486500
}
487501

502+
if (clientEngine == null) {
503+
clientEngine = ClientEngine.JAVA_SDK;
504+
}
505+
506+
if (clientVersion == null) {
507+
clientVersion = BuildVersionInfo.VERSION;
508+
}
509+
488510
if (eventBuilder == null) {
489511
if (projectConfig.getVersion().equals(ProjectConfig.V1)) {
490512
eventBuilder = new EventBuilderV1();
491513
} else {
492-
eventBuilder = new EventBuilderV2();
514+
eventBuilder = new EventBuilderV2(clientEngine, clientVersion);
493515
}
494516
}
495517

core-api/src/main/java/com/optimizely/ab/event/internal/EventBuilderV1.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ public class EventBuilderV1 extends EventBuilder {
5656
private static final String EXPERIMENT_PARAM_PREFIX = "x";
5757
private static final String GOAL_ID_PARAM = "g";
5858
private static final String GOAL_NAME_PARAM = "n";
59-
private static final String PPID_PARAM = "p";
6059
private static final String PROJECT_ID_PARAM = "a";
6160
private static final String EVENT_VALUE_PARAM = "v";
6261
private static final String SEGMENT_PARAM_PREFIX = "s";
@@ -112,7 +111,6 @@ private void addCommonRequestParams(Map<String, String> requestParams, ProjectCo
112111

113112
addProjectId(requestParams, projectConfig.getProjectId());
114113
addAccountId(requestParams, projectConfig.getAccountId());
115-
addPpid(requestParams, userId);
116114
addUserId(requestParams, userId);
117115
addSegments(requestParams, attributes, projectConfig);
118116
addTime(requestParams);
@@ -137,16 +135,6 @@ private void addProjectId(Map<String, String> requestParams, String projectId) {
137135
requestParams.put(PROJECT_ID_PARAM, projectId);
138136
}
139137

140-
/**
141-
* Helper method to populate the {@code PPID} param.
142-
*
143-
* @param requestParams the request params
144-
* @param userId the user id for the impression event
145-
*/
146-
private void addPpid(Map<String, String> requestParams, String userId) {
147-
requestParams.put(PPID_PARAM, userId);
148-
}
149-
150138
/**
151139
* Helper method to populate the experiment bucket map. That is, the map of {@code {experimentId -> variationId}}
152140
* for all active experiments.

core-api/src/main/java/com/optimizely/ab/event/internal/EventBuilderV2.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717
package com.optimizely.ab.event.internal;
1818

19+
import com.optimizely.ab.annotations.VisibleForTesting;
1920
import com.optimizely.ab.bucketing.Bucketer;
2021
import com.optimizely.ab.config.Attribute;
2122
import com.optimizely.ab.config.Experiment;
@@ -25,6 +26,7 @@
2526
import com.optimizely.ab.event.internal.payload.Conversion;
2627
import com.optimizely.ab.event.internal.payload.Decision;
2728
import com.optimizely.ab.event.internal.payload.EventMetric;
29+
import com.optimizely.ab.event.internal.payload.Event.ClientEngine;
2830
import com.optimizely.ab.event.internal.payload.Feature;
2931
import com.optimizely.ab.event.internal.payload.Impression;
3032
import com.optimizely.ab.event.internal.payload.LayerState;
@@ -52,9 +54,21 @@ public class EventBuilderV2 extends EventBuilder {
5254
static final String IMPRESSION_ENDPOINT = "https://p13nlog.dz.optimizely.com/log/decision";
5355
static final String CONVERSION_ENDPOINT = "https://p13nlog.dz.optimizely.com/log/event";
5456

57+
@VisibleForTesting
58+
public final ClientEngine clientEngine;
59+
60+
@VisibleForTesting
61+
public final String clientVersion;
62+
5563
private Serializer serializer;
5664

5765
public EventBuilderV2() {
66+
this(ClientEngine.JAVA_SDK, BuildVersionInfo.VERSION);
67+
}
68+
69+
public EventBuilderV2(ClientEngine clientEngine, String clientVersion) {
70+
this.clientEngine = clientEngine;
71+
this.clientVersion = clientVersion;
5872
this.serializer = DefaultJsonSerializer.getInstance();
5973
}
6074

@@ -79,6 +93,8 @@ public LogEvent createImpressionEvent(@Nonnull ProjectConfig projectConfig,
7993
impressionPayload.setLayerId(activatedExperiment.getLayerId());
8094
impressionPayload.setAccountId(projectConfig.getAccountId());
8195
impressionPayload.setUserFeatures(createFeatures(attributes, projectConfig));
96+
impressionPayload.setClientEngine(clientEngine);
97+
impressionPayload.setClientVersion(clientVersion);
8298

8399
String payload = this.serializer.serialize(impressionPayload);
84100
return new LogEvent(RequestMethod.POST, IMPRESSION_ENDPOINT, Collections.<String, String>emptyMap(), payload);
@@ -117,6 +133,8 @@ public LogEvent createConversionEvent(@Nonnull ProjectConfig projectConfig,
117133

118134
conversionPayload.setEventFeatures(Collections.<Feature>emptyList());
119135
conversionPayload.setIsGlobalHoldback(false);
136+
conversionPayload.setClientEngine(clientEngine);
137+
conversionPayload.setClientVersion(clientVersion);
120138

121139
String payload = this.serializer.serialize(conversionPayload);
122140
return new LogEvent(RequestMethod.POST, CONVERSION_ENDPOINT, Collections.<String, String>emptyMap(), payload);

core-api/src/main/java/com/optimizely/ab/event/internal/payload/Event.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,43 @@
1616
*/
1717
package com.optimizely.ab.event.internal.payload;
1818

19-
import com.optimizely.ab.annotations.VisibleForTesting;
19+
import com.fasterxml.jackson.annotation.JsonValue;
2020

2121
import com.optimizely.ab.event.internal.BuildVersionInfo;
2222

2323
public class Event {
2424

25-
String clientEngine = "java-sdk";
25+
public enum ClientEngine {
26+
JAVA_SDK ("java-sdk"),
27+
ANDROID_SDK ("android-sdk");
28+
29+
private final String clientEngineValue;
30+
31+
ClientEngine(String clientEngineValue) {
32+
this.clientEngineValue = clientEngineValue;
33+
}
34+
35+
@JsonValue
36+
public String getClientEngineValue() {
37+
return clientEngineValue;
38+
}
39+
}
40+
41+
String clientEngine = ClientEngine.JAVA_SDK.getClientEngineValue();
2642
String clientVersion = BuildVersionInfo.VERSION;
2743

2844
public String getClientEngine() {
2945
return clientEngine;
3046
}
3147

48+
public void setClientEngine(ClientEngine clientEngine) {
49+
this.clientEngine = clientEngine.getClientEngineValue();
50+
}
51+
3252
public String getClientVersion() {
3353
return clientVersion;
3454
}
3555

36-
@VisibleForTesting
3756
public void setClientVersion(String clientVersion) {
3857
this.clientVersion = clientVersion;
3958
}

core-api/src/test/java/com/optimizely/ab/OptimizelyBuilderTest.java

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@
1616
*/
1717
package com.optimizely.ab;
1818

19-
import ch.qos.logback.classic.Level;
20-
2119
import com.optimizely.ab.bucketing.UserExperimentRecord;
2220
import com.optimizely.ab.config.ProjectConfigTestUtils;
2321
import com.optimizely.ab.config.parser.ConfigParseException;
2422
import com.optimizely.ab.error.ErrorHandler;
2523
import com.optimizely.ab.error.NoOpErrorHandler;
2624
import com.optimizely.ab.event.EventHandler;
27-
import com.optimizely.ab.internal.LogbackVerifier;
25+
import com.optimizely.ab.event.internal.BuildVersionInfo;
26+
import com.optimizely.ab.event.internal.EventBuilderV2;
27+
import com.optimizely.ab.event.internal.payload.Event.ClientEngine;
2828

2929
import org.junit.Rule;
3030
import org.junit.Test;
@@ -41,7 +41,6 @@
4141
import static com.optimizely.ab.config.ProjectConfigTestUtils.validProjectConfigV2;
4242
import static org.hamcrest.CoreMatchers.instanceOf;
4343
import static org.hamcrest.CoreMatchers.is;
44-
import static org.junit.Assert.assertNull;
4544
import static org.junit.Assert.assertThat;
4645
import static org.mockito.Mockito.mock;
4746

@@ -57,9 +56,6 @@ public class OptimizelyBuilderTest {
5756
@Rule
5857
public MockitoRule rule = MockitoJUnit.rule();
5958

60-
@Rule
61-
public LogbackVerifier logbackVerifier = new LogbackVerifier();
62-
6359
@Mock private EventHandler mockEventHandler;
6460

6561
@Mock private ErrorHandler mockErrorHandler;
@@ -115,6 +111,40 @@ public void withUserExperimentRecord() throws Exception {
115111
assertThat(optimizelyClient.bucketer.getUserExperimentRecord(), is(userExperimentRecord));
116112
}
117113

114+
@Test
115+
public void withDefaultClientEngine() throws Exception {
116+
Optimizely optimizelyClient = Optimizely.builder(validConfigJsonV2(), mockEventHandler)
117+
.build();
118+
119+
assertThat(((EventBuilderV2)optimizelyClient.eventBuilder).clientEngine, is(ClientEngine.JAVA_SDK));
120+
}
121+
122+
@Test
123+
public void withCustomClientEngine() throws Exception {
124+
Optimizely optimizelyClient = Optimizely.builder(validConfigJsonV2(), mockEventHandler)
125+
.withClientEngine(ClientEngine.ANDROID_SDK)
126+
.build();
127+
128+
assertThat(((EventBuilderV2)optimizelyClient.eventBuilder).clientEngine, is(ClientEngine.ANDROID_SDK));
129+
}
130+
131+
@Test
132+
public void withDefaultClientVersion() throws Exception {
133+
Optimizely optimizelyClient = Optimizely.builder(validConfigJsonV2(), mockEventHandler)
134+
.build();
135+
136+
assertThat(((EventBuilderV2)optimizelyClient.eventBuilder).clientVersion, is(BuildVersionInfo.VERSION));
137+
}
138+
139+
@Test
140+
public void withCustomClientVersion() throws Exception {
141+
Optimizely optimizelyClient = Optimizely.builder(validConfigJsonV2(), mockEventHandler)
142+
.withClientVersion("0.0.0")
143+
.build();
144+
145+
assertThat(((EventBuilderV2)optimizelyClient.eventBuilder).clientVersion, is("0.0.0"));
146+
}
147+
118148
@Test
119149
public void builderThrowsConfigParseExceptionForInvalidDatafile() throws Exception {
120150
thrown.expect(ConfigParseException.class);

core-api/src/test/java/com/optimizely/ab/OptimizelyTestV2.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@
3131
import com.optimizely.ab.error.RaiseExceptionErrorHandler;
3232
import com.optimizely.ab.event.EventHandler;
3333
import com.optimizely.ab.event.LogEvent;
34+
import com.optimizely.ab.event.internal.BuildVersionInfo;
3435
import com.optimizely.ab.event.internal.EventBuilder;
3536
import com.optimizely.ab.event.internal.EventBuilderV2;
37+
import com.optimizely.ab.event.internal.payload.Event.ClientEngine;
3638
import com.optimizely.ab.internal.LogbackVerifier;
3739
import com.optimizely.ab.internal.ProjectValidationUtils;
3840

@@ -788,9 +790,9 @@ public void trackEventWithAttributes() throws Exception {
788790
testParams.put("test", "params");
789791
LogEvent logEventToDispatch = new LogEvent(RequestMethod.GET, "test_url", testParams, "");
790792
when(mockEventBuilder.createConversionEvent(eq(projectConfig), eq(mockBucketer), eq("userId"),
791-
eq(eventType.getId()), eq(eventType.getKey()),
792-
anyMapOf(String.class, String.class)))
793-
.thenReturn(logEventToDispatch);
793+
eq(eventType.getId()), eq(eventType.getKey()),
794+
anyMapOf(String.class, String.class)))
795+
.thenReturn(logEventToDispatch);
794796

795797
logbackVerifier.expectMessage(Level.INFO, "Tracking event \"clicked_cart\" for user \"userId\".");
796798
logbackVerifier.expectMessage(Level.DEBUG, "Dispatching conversion event to URL test_url with params " +

core-api/src/test/java/com/optimizely/ab/event/internal/EventBuilderV1Test.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public void createImpressionParams() throws Exception {
7171
userId, attributeMap);
7272
Map<String, String> requestParams = impressionEvent.getRequestParams();
7373

74-
assertThat(requestParams.size(), is(9));
74+
assertThat(requestParams.size(), is(8));
7575

7676
verifyCommonRequestParams(projectConfig, requestParams, userId, attribute);
7777

@@ -126,7 +126,7 @@ public void createConversionParams() throws Exception {
126126
}
127127
}
128128

129-
assertThat(requestParams.size(), is(10));
129+
assertThat(requestParams.size(), is(9));
130130

131131
verifyCommonRequestParams(projectConfig, requestParams, userId, attribute);
132132

@@ -262,7 +262,7 @@ public void createConversionParamsForcedVariationBucketingPrecedesAudienceEval()
262262
}
263263
}
264264

265-
assertThat(conversionEvent.getRequestParams().size(), is(9));
265+
assertThat(conversionEvent.getRequestParams().size(), is(8));
266266
}
267267

268268
/**
@@ -310,9 +310,6 @@ private void verifyCommonRequestParams(ProjectConfig projectConfig, Map<String,
310310
// verify segments
311311
assertThat(requestParams, hasEntry("s" + attribute.getSegmentId(), "value"));
312312

313-
// verify ppid
314-
assertThat(requestParams, hasEntry("p", "userId"));
315-
316313
// verify source
317314
String sourceValue = requestParams.get("src");
318315
assertThat(sourceValue, startsWith("java-sdk-"));

0 commit comments

Comments
 (0)