Skip to content

Commit 728b1a4

Browse files
committed
add tests for high numbers
1 parent 8c5c077 commit 728b1a4

File tree

3 files changed

+64
-15
lines changed

3 files changed

+64
-15
lines changed

AndroidSDKCore/src/main/java/com/leanplum/internal/Request.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ private void triggerErrorCallback(Exception e) {
337337
error.error(e);
338338
}
339339
if (apiResponse != null) {
340-
List<Map<String, Object>> requests = getUnsentRequests();
340+
List<Map<String, Object>> requests = getUnsentRequests(1.0);
341341
List<Map<String, Object>> requestsToSend = removeIrrelevantBackgroundStartRequests(requests);
342342
apiResponse.response(requestsToSend, null, requests.size());
343343
}
@@ -652,7 +652,7 @@ static void deleteSentRequests(int requestsCount) {
652652
}
653653
}
654654

655-
public List<Map<String, Object>> getUnsentRequests() {
655+
public List<Map<String, Object>> getUnsentRequests(double fraction) {
656656
List<Map<String, Object>> requestData;
657657

658658
synchronized (Request.class) {

AndroidSDKTests/src/test/java/com/leanplum/LeanplumTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ public void testCrashes() throws Exception {
405405
request2.sendEventually();
406406
// Get a number of events in the database.
407407
// Expectation: 2 events.
408-
List unsentRequests = request1.getUnsentRequests();
408+
List unsentRequests = request1.getUnsentRequests(1.0);
409409
assertNotNull(unsentRequests);
410410
assertEquals(2, unsentRequests.size());
411411

@@ -427,7 +427,7 @@ public void testCrashes() throws Exception {
427427

428428
// Get a number of events in the database. Checks if ours two events still here.
429429
// Expectation: 2 events.
430-
unsentRequests = request1.getUnsentRequests();
430+
unsentRequests = request1.getUnsentRequests(1.0);
431431
assertNotNull(unsentRequests);
432432
assertEquals(2, unsentRequests.size());
433433

@@ -444,7 +444,7 @@ public void onRequest(String httpMethod, String apiMethod, Map<String, Object> p
444444

445445
// Get a number of events in the database. Make sure we sent all events.
446446
// Expectation: 0 events.
447-
unsentRequests = request1.getUnsentRequests();
447+
unsentRequests = request1.getUnsentRequests(1.0);
448448
assertNotNull(unsentRequests);
449449
assertEquals(0, unsentRequests.size());
450450

AndroidSDKTests/src/test/java/com/leanplum/internal/RequestTest.java

Lines changed: 59 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,14 @@ public void testRemoveIrrelevantBackgroundStartRequests() throws NoSuchMethodExc
9696

9797
// Invoke method with specific test data.
9898
// Expectation: No request returned.
99-
List unsentRequests = request.getUnsentRequests();
99+
List unsentRequests = request.getUnsentRequests(1.0);
100100
assertNotNull(unsentRequests);
101101
assertEquals(0, unsentRequests.size());
102102

103103
// Regular start request.
104104
// Expectation: One request returned.
105105
request.sendEventually();
106-
unsentRequests = request.getUnsentRequests();
106+
unsentRequests = request.getUnsentRequests(1.0);
107107
assertNotNull(unsentRequests);
108108
assertEquals(1, unsentRequests.size());
109109
Request.deleteSentRequests(unsentRequests.size());
@@ -118,7 +118,7 @@ public void testRemoveIrrelevantBackgroundStartRequests() throws NoSuchMethodExc
118118
put(Constants.Params.BACKGROUND, Boolean.toString(false));
119119
put("fg", "2");
120120
}}).sendEventually();
121-
unsentRequests = request.getUnsentRequests();
121+
unsentRequests = request.getUnsentRequests(1.0);
122122
assertNotNull(unsentRequests);
123123
assertEquals(2, unsentRequests.size());
124124
Request.deleteSentRequests(unsentRequests.size());
@@ -133,7 +133,7 @@ public void testRemoveIrrelevantBackgroundStartRequests() throws NoSuchMethodExc
133133
put(Constants.Params.BACKGROUND, Boolean.toString(false));
134134
put("fg", "1");
135135
}}).sendEventually();
136-
unsentRequests = request.getUnsentRequests();
136+
unsentRequests = request.getUnsentRequests(1.0);
137137
List unsentRequestsData =
138138
(List) removeIrrelevantBackgroundStartRequests.invoke(Request.class, unsentRequests);
139139
assertNotNull(unsentRequestsData);
@@ -155,7 +155,7 @@ public void testRemoveIrrelevantBackgroundStartRequests() throws NoSuchMethodExc
155155
put(Constants.Params.BACKGROUND, Boolean.toString(false));
156156
put("fg", "1");
157157
}}).sendEventually();
158-
unsentRequests = request.getUnsentRequests();
158+
unsentRequests = request.getUnsentRequests(1.0);
159159

160160
assertNotNull(unsentRequests);
161161
unsentRequestsData =
@@ -178,7 +178,7 @@ public void testRemoveIrrelevantBackgroundStartRequests() throws NoSuchMethodExc
178178
put(Constants.Params.BACKGROUND, Boolean.toString(true));
179179
put("bg", "2");
180180
}}).sendEventually();
181-
unsentRequests = request.getUnsentRequests();
181+
unsentRequests = request.getUnsentRequests(1.0);
182182
assertNotNull(unsentRequests);
183183
unsentRequestsData =
184184
(List) removeIrrelevantBackgroundStartRequests.invoke(Request.class, unsentRequests);
@@ -200,28 +200,77 @@ public void testRemoveIrrelevantBackgroundStartRequests() throws NoSuchMethodExc
200200
put(Constants.Params.BACKGROUND, Boolean.toString(true));
201201
put("bg", "2");
202202
}}).sendEventually();
203-
unsentRequests = request.getUnsentRequests();
203+
unsentRequests = request.getUnsentRequests(1.0);
204204
unsentRequestsData =
205205
(List) removeIrrelevantBackgroundStartRequests.invoke(Request.class, unsentRequests);
206206
assertNotNull(unsentRequestsData);
207207
assertEquals(3, unsentRequestsData.size());
208208
Request.deleteSentRequests(unsentRequests.size());
209209
LeanplumEventDataManagerTest.setDatabaseToNull();
210210
}
211+
212+
@Test
213+
public void testJsonEncodeUnsentRequestsWithExceptionLargeNumbers() throws NoSuchMethodException,
214+
InvocationTargetException, IllegalAccessException {
215+
LeanplumEventDataManager.init(Leanplum.getContext());
216+
Request.RequestsWithEncoding requestsWithEncoding;
217+
// Prepare testable objects and method.
218+
Request request = spy(new Request("POST", Constants.Methods.START, null));
219+
request.sendEventually();
220+
for (int i = 0;i < 4999; i++) {
221+
new Request("POST", Constants.Methods.START, null).sendEventually();
222+
}
223+
// Expectation: 10000 requests returned.
224+
requestsWithEncoding = request.getRequestsWithEncodedStringStoredRequests(1.0);
225+
226+
assertNotNull(requestsWithEncoding.unsentRequests);
227+
assertEquals(5000, requestsWithEncoding.unsentRequests.size());
228+
229+
// Throw OOM on 5000 requests
230+
// Expectation: 2500 requests returned.
231+
when(request.getUnsentRequests(1.0)).thenThrow(OutOfMemoryError.class);
232+
requestsWithEncoding = request.getRequestsWithEncodedStringStoredRequests(1.0);
233+
234+
assertNotNull(requestsWithEncoding.unsentRequests);
235+
assertEquals(2500, requestsWithEncoding.unsentRequests.size());
236+
237+
// Throw OOM on 2500, 5000 requests
238+
// Expectation: 1250 requests returned.
239+
when(request.getUnsentRequests(0.5)).thenThrow(OutOfMemoryError.class);
240+
requestsWithEncoding = request.getRequestsWithEncodedStringStoredRequests(1.0);
241+
242+
assertNotNull(requestsWithEncoding.unsentRequests);
243+
assertEquals(1250, requestsWithEncoding.unsentRequests.size());
244+
245+
}
211246

212247
@Test
213-
public void testJsonEncodeUnsentRequests() {
248+
public void testJsonEncodeUnsentRequestsWithException() {
214249
List<Map<String, Object>> requests = mockRequests(2, 2);
215250

216251
Request realRequest = new Request("POST", Constants.Methods.START, null);
217252
Request request = spy(realRequest);
218-
when(request.getUnsentRequests()).thenReturn(requests);
253+
when(request.getUnsentRequests(1.0)).thenThrow(OutOfMemoryError.class);
254+
when(request.getUnsentRequests(0.5)).thenThrow(OutOfMemoryError.class);
255+
when(request.getUnsentRequests(0.25)).thenReturn(requests);
219256

220-
Request.RequestsWithEncoding requestsWithEncoding = request.getRequestsWithEncodedStringStoredRequests();
257+
Request.RequestsWithEncoding requestsWithEncoding = request.getRequestsWithEncodedStringStoredRequests(1.0);
221258

222259
assertEquals("{\"data\":[{\"0\":\"0\"},{\"0\":\"1\"},{\"1\":\"0\"},{\"1\":\"1\"}]}", requestsWithEncoding.jsonEncodedString);
223260
}
224261

262+
@Test
263+
public void testJsonEncodeUnsentRequests() {
264+
List<Map<String, Object>> requests = mockRequests(2, 2);
265+
266+
Request realRequest = new Request("POST", Constants.Methods.START, null);
267+
Request request = spy(realRequest);
268+
when(request.getUnsentRequests(1.0)).thenReturn(requests);
269+
270+
Request.RequestsWithEncoding requestsWithEncoding = request.getRequestsWithEncodedStringStoredRequests(1.0);
271+
272+
assertEquals("{\"data\":[{\"0\":\"0\"},{\"0\":\"1\"},{\"1\":\"0\"},{\"1\":\"1\"}]}", requestsWithEncoding.jsonEncodedString);
273+
}
225274
@Test
226275
public void testGetRequestsWithEncodedStringStoredRequests() {
227276
List<Map<String, Object>> requests = mockRequests(2, 2);

0 commit comments

Comments
 (0)