Skip to content

Commit 0e98209

Browse files
author
chris-hoefgen
committed
adding more unit tests, bug fixes and code cleanup
1 parent b2aa0df commit 0e98209

File tree

3 files changed

+72
-5
lines changed

3 files changed

+72
-5
lines changed

src/main/java/com/devcycle/sdk/server/local/api/DVCLocalClient.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,9 @@ public <T> Variable<T> variable(User user, String key, T defaultValue) {
119119
}
120120
return defaultVariable;
121121
}
122-
122+
String variableJSON = null;
123123
try {
124-
String variableJSON = localBucketing.getVariable(sdkKey, user, key, variableType, true);
124+
variableJSON = localBucketing.getVariable(sdkKey, user, key, variableType, true);
125125
if (variableJSON == null || variableJSON.isEmpty()) {
126126
return defaultVariable;
127127
} else {
@@ -137,12 +137,14 @@ public <T> Variable<T> variable(User user, String key, T defaultValue) {
137137
.build();
138138
if (variable.getType() != variableType) {
139139
System.out.printf("Variable type mismatch, returning default value");
140-
return variable;
140+
return defaultVariable;
141141
}
142142
variable.setDefaultValue(defaultValue);
143143
variable.setIsDefaulted(false);
144144
return variable;
145145
}
146+
} catch(JsonProcessingException jpe){
147+
System.out.printf("Unable to parse load Variable %s due to JSON error: err=%s, data=", key, jpe.getMessage(), variableJSON);
146148
} catch (Exception e) {
147149
System.out.printf("Unable to parse load Variable %s due to error: %s", key, e);
148150
}
@@ -199,8 +201,10 @@ public void close() {
199201
if (!isInitialized) {
200202
return;
201203
}
202-
configManager.cleanup();
203-
eventQueueManager.cleanup();
204+
if (configManager != null)
205+
configManager.cleanup();
206+
if(eventQueueManager != null)
207+
eventQueueManager.cleanup();
204208
}
205209

206210
private void validateUser(User user) {

src/main/java/com/devcycle/sdk/server/local/bucketing/LocalBucketing.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,9 @@ public String getVariable(String sdkKey, User user, String key, Variable.TypeEnu
191191
store, getVariablePtr, I32, I32, I32, I32, I32, I32);
192192

193193
int resultAddress = variableForUser.call(sdkKeyAddress, userAddress, keyAddress, wasmVariableType, shouldTrackEvent ? 1 : 0);
194+
if (resultAddress == 0){
195+
return null;
196+
}
194197
String variableString = readWasmString(resultAddress);
195198
return variableString;
196199
}

src/test/java/com/devcycle/sdk/server/local/DVCLocalClientTest.java

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,72 @@ public void variableTest() {
5050
User user = getUser();
5151
user.setEmail("giveMeVariationOff@email.com");
5252
Variable<String> var = client.variable(user, "string-var", "default string");
53+
Assert.assertNotNull(var);
5354
Assert.assertEquals("variationOff", var.getValue());
5455

5556
user.setEmail("giveMeVariationOn@email.com");
5657
var = client.variable(user, "string-var", "default string");
58+
Assert.assertNotNull(var);
5759
Assert.assertEquals("variationOn", var.getValue());
5860
}
61+
@Test
62+
public void variableTestNotInitialized(){
63+
// NOTE - this test will generate some additional logging noise from the EventQueue
64+
// because it isn't initialized properly before the first call to variable()
65+
DVCLocalClient client = new DVCLocalClient(apiKey);
66+
Variable<String> var = client.variable(getUser(), "string-var", "default string");
67+
Assert.assertNotNull(var);
68+
Assert.assertTrue(var.getIsDefaulted());
69+
Assert.assertEquals("default string", var.getValue());
70+
}
71+
72+
@Test
73+
public void variableTestUnknownVariableKey(){
74+
Variable<Boolean> var = client.variable(getUser(), "some-var-that-doesnt-exist", true);
75+
Assert.assertNotNull(var);
76+
Assert.assertTrue(var.getIsDefaulted());
77+
Assert.assertEquals(true, var.getValue());
78+
}
79+
80+
@Test
81+
public void variableTestTypeMismatch(){
82+
Variable<Boolean> var = client.variable(getUser(), "string-var", true);
83+
Assert.assertNotNull(var);
84+
Assert.assertTrue(var.getIsDefaulted());
85+
Assert.assertEquals(true, var.getValue());
86+
}
87+
88+
@Test
89+
public void variableTestNoDefault() {
90+
User user = getUser();
91+
try {
92+
Variable<String> var = client.variable(user, "string-var", null);
93+
Assert.fail("Expected IllegalArgumentException for null default value");
94+
}catch(IllegalArgumentException e) {
95+
// expected
96+
}
97+
}
98+
99+
@Test
100+
public void variableTestNullUser() {
101+
try{
102+
client.variable(null, "string-var", "default string");
103+
Assert.fail("Expected IllegalArgumentException for null user");
104+
}catch(IllegalArgumentException e) {
105+
// expected
106+
}
107+
}
108+
109+
@Test
110+
public void variableTestBadUserID() {
111+
User badUser = User.builder().userId("").build();
112+
try {
113+
client.variable(badUser, "string-var", "default string");
114+
Assert.fail("Expected IllegalArgumentException for empty userID");
115+
}catch(IllegalArgumentException e) {
116+
// expected
117+
}
118+
}
59119

60120
@Test
61121
public void variableValueTest() {

0 commit comments

Comments
 (0)