Skip to content

Commit 9af8374

Browse files
committed
Add session ID abstraction to facilitate deleting NDK reports
1 parent 8139b0a commit 9af8374

File tree

7 files changed

+160
-76
lines changed

7 files changed

+160
-76
lines changed

firebase-crashlytics/src/androidTest/java/com/google/firebase/crashlytics/internal/common/SessionReportingCoordinatorTest.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -349,16 +349,17 @@ public void onReportSend_successfulReportsAreDeleted() {
349349
final String sessionId1 = "sessionId1";
350350
final String sessionId2 = "sessionId2";
351351

352-
final List<CrashlyticsReport> finalizedReports = new ArrayList<>();
353-
final CrashlyticsReport mockReport1 = mockReport(sessionId1, orgId);
354-
final CrashlyticsReport mockReport2 = mockReport(sessionId2, orgId);
352+
final List<CrashlyticsReportWithSessionId> finalizedReports = new ArrayList<>();
353+
final CrashlyticsReportWithSessionId mockReport1 = mockReportWithSessionId(sessionId1, orgId);
354+
final CrashlyticsReportWithSessionId mockReport2 = mockReportWithSessionId(sessionId2, orgId);
355355
finalizedReports.add(mockReport1);
356356
finalizedReports.add(mockReport2);
357357

358358
when(reportPersistence.loadFinalizedReports()).thenReturn(finalizedReports);
359359

360-
final Task<CrashlyticsReport> successfulTask = Tasks.forResult(mockReport1);
361-
final Task<CrashlyticsReport> failedTask = Tasks.forException(new Exception("fail"));
360+
final Task<CrashlyticsReportWithSessionId> successfulTask = Tasks.forResult(mockReport1);
361+
final Task<CrashlyticsReportWithSessionId> failedTask =
362+
Tasks.forException(new Exception("fail"));
362363

363364
when(reportSender.sendReport(mockReport1)).thenReturn(successfulTask);
364365
when(reportSender.sendReport(mockReport2)).thenReturn(failedTask);
@@ -435,4 +436,12 @@ private static CrashlyticsReport mockReport(String sessionId, String orgId) {
435436
when(mockReport.withOrganizationId(orgId)).thenReturn(mockReport);
436437
return mockReport;
437438
}
439+
440+
private static CrashlyticsReportWithSessionId mockReportWithSessionId(
441+
String sessionId, String orgId) {
442+
return CrashlyticsReportWithSessionId.builder()
443+
.setReport(mockReport(sessionId, orgId))
444+
.setSessionId(sessionId)
445+
.build();
446+
}
438447
}

firebase-crashlytics/src/androidTest/java/com/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistenceTest.java

Lines changed: 55 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import static org.mockito.Mockito.when;
2020

2121
import androidx.test.runner.AndroidJUnit4;
22+
import com.google.firebase.crashlytics.internal.common.CrashlyticsReportWithSessionId;
2223
import com.google.firebase.crashlytics.internal.model.CrashlyticsReport;
2324
import com.google.firebase.crashlytics.internal.model.CrashlyticsReport.Session;
2425
import com.google.firebase.crashlytics.internal.model.CrashlyticsReport.Session.Application;
@@ -94,9 +95,10 @@ public void testLoadFinalizedReports_reportThenEvent_returnsReportWithEvent() {
9495

9596
reportPersistence.finalizeReports("skippedSession", endedAt);
9697

97-
final List<CrashlyticsReport> finalizedReports = reportPersistence.loadFinalizedReports();
98+
final List<CrashlyticsReportWithSessionId> finalizedReports =
99+
reportPersistence.loadFinalizedReports();
98100
assertEquals(1, finalizedReports.size());
99-
final CrashlyticsReport finalizedReport = finalizedReports.get(0);
101+
final CrashlyticsReport finalizedReport = finalizedReports.get(0).getReport();
100102
assertEquals(
101103
testReport
102104
.withSessionEndFields(endedAt, false, null)
@@ -119,9 +121,10 @@ public void testLoadFinalizedReports_reportThenMultipleEvents_returnsReportWithM
119121

120122
reportPersistence.finalizeReports("skippedSession", endedAt);
121123

122-
final List<CrashlyticsReport> finalizedReports = reportPersistence.loadFinalizedReports();
124+
final List<CrashlyticsReportWithSessionId> finalizedReports =
125+
reportPersistence.loadFinalizedReports();
123126
assertEquals(1, finalizedReports.size());
124-
final CrashlyticsReport finalizedReport = finalizedReports.get(0);
127+
final CrashlyticsReport finalizedReport = finalizedReports.get(0).getReport();
125128
assertEquals(
126129
testReport
127130
.withSessionEndFields(endedAt, false, null)
@@ -148,15 +151,16 @@ public void testLoadFinalizedReports_reportThenMultipleEvents_returnsReportWithM
148151

149152
reportPersistence.finalizeReports("skippedSession", endedAt);
150153

151-
final List<CrashlyticsReport> finalizedReports = reportPersistence.loadFinalizedReports();
154+
final List<CrashlyticsReportWithSessionId> finalizedReports =
155+
reportPersistence.loadFinalizedReports();
152156
assertEquals(2, finalizedReports.size());
153-
final CrashlyticsReport finalizedReport1 = finalizedReports.get(1);
157+
final CrashlyticsReport finalizedReport1 = finalizedReports.get(1).getReport();
154158
assertEquals(
155159
testReport1
156160
.withSessionEndFields(endedAt, false, null)
157161
.withEvents(ImmutableList.from(testEvent1)),
158162
finalizedReport1);
159-
final CrashlyticsReport finalizedReport2 = finalizedReports.get(0);
163+
final CrashlyticsReport finalizedReport2 = finalizedReports.get(0).getReport();
160164
assertEquals(
161165
testReport2
162166
.withSessionEndFields(endedAt, false, null)
@@ -174,7 +178,8 @@ public void testFinalizeReports_capsOpenSessions() throws IOException {
174178

175179
reportPersistence.finalizeReports("skippedSession", endedAt);
176180

177-
final List<CrashlyticsReport> finalizedReports = reportPersistence.loadFinalizedReports();
181+
final List<CrashlyticsReportWithSessionId> finalizedReports =
182+
reportPersistence.loadFinalizedReports();
178183
assertEquals(8, finalizedReports.size());
179184
}
180185

@@ -189,12 +194,13 @@ public void testFinalizeReports_capsOldestSessionsFirst() throws IOException {
189194

190195
reportPersistence.finalizeReports("skippedSession", endedAt);
191196

192-
final List<CrashlyticsReport> finalizedReports = reportPersistence.loadFinalizedReports();
197+
final List<CrashlyticsReportWithSessionId> finalizedReports =
198+
reportPersistence.loadFinalizedReports();
193199
assertEquals(8, finalizedReports.size());
194200

195201
List<String> reportIdentifiers = new ArrayList<>();
196-
for (CrashlyticsReport finalizedReport : finalizedReports) {
197-
reportIdentifiers.add(finalizedReport.getSession().getIdentifier());
202+
for (CrashlyticsReportWithSessionId finalizedReport : finalizedReports) {
203+
reportIdentifiers.add(finalizedReport.getSessionId());
198204
}
199205
List<String> expectedSessions =
200206
Arrays.asList("testSession12", "testSession13", "testSession14", "testSession15");
@@ -216,7 +222,8 @@ public void testFinalizeReports_skipsCappingCurrentSession() throws IOException
216222
final long endedAt = System.currentTimeMillis();
217223

218224
reportPersistence.finalizeReports("testSession5", endedAt);
219-
List<CrashlyticsReport> finalizedReports = reportPersistence.loadFinalizedReports();
225+
List<CrashlyticsReportWithSessionId> finalizedReports =
226+
reportPersistence.loadFinalizedReports();
220227
assertEquals(8, finalizedReports.size());
221228
persistReportWithEvent(reportPersistence, "testSession11", true);
222229
reportPersistence.finalizeReports("testSession11", endedAt);
@@ -235,7 +242,8 @@ public void testFinalizeReports_capsReports() throws IOException {
235242

236243
reportPersistence.finalizeReports("skippedSession", 0L);
237244

238-
final List<CrashlyticsReport> finalizedReports = reportPersistence.loadFinalizedReports();
245+
final List<CrashlyticsReportWithSessionId> finalizedReports =
246+
reportPersistence.loadFinalizedReports();
239247
assertEquals(4, finalizedReports.size());
240248
}
241249

@@ -257,7 +265,8 @@ public void testFinalizeReports_whenSettingsChanges_capsReports() throws IOExcep
257265
}
258266

259267
reportPersistence.finalizeReports("skippedSession", 0L);
260-
List<CrashlyticsReport> finalizedReports = reportPersistence.loadFinalizedReports();
268+
List<CrashlyticsReportWithSessionId> finalizedReports =
269+
reportPersistence.loadFinalizedReports();
261270
assertEquals(4, finalizedReports.size());
262271
when(settingsMock.getSessionData()).thenReturn(sessionSettingsDataMockDifferentValues);
263272

@@ -285,10 +294,11 @@ public void testFinalizeReports_removesLowPriorityReportsFirst() throws IOExcept
285294

286295
reportPersistence.finalizeReports("skippedSession", 0L);
287296

288-
final List<CrashlyticsReport> finalizedReports = reportPersistence.loadFinalizedReports();
297+
final List<CrashlyticsReportWithSessionId> finalizedReports =
298+
reportPersistence.loadFinalizedReports();
289299
assertEquals(4, finalizedReports.size());
290-
for (CrashlyticsReport finalizedReport : finalizedReports) {
291-
assertTrue(finalizedReport.getSession().getIdentifier().contains("high"));
300+
for (CrashlyticsReportWithSessionId finalizedReport : finalizedReports) {
301+
assertTrue(finalizedReport.getReport().getSession().getIdentifier().contains("high"));
292302
}
293303
}
294304

@@ -304,11 +314,12 @@ public void testFinalizeReports_removesOldestReportsFirst() throws IOException {
304314

305315
reportPersistence.finalizeReports("skippedSession", 0L);
306316

307-
final List<CrashlyticsReport> finalizedReports = reportPersistence.loadFinalizedReports();
317+
final List<CrashlyticsReportWithSessionId> finalizedReports =
318+
reportPersistence.loadFinalizedReports();
308319
assertEquals(4, finalizedReports.size());
309320
List<String> reportIdentifiers = new ArrayList<>();
310-
for (CrashlyticsReport finalizedReport : finalizedReports) {
311-
reportIdentifiers.add(finalizedReport.getSession().getIdentifier());
321+
for (CrashlyticsReportWithSessionId finalizedReport : finalizedReports) {
322+
reportIdentifiers.add(finalizedReport.getSessionId());
312323
}
313324

314325
List<String> expectedSessions =
@@ -335,9 +346,10 @@ public void testLoadFinalizedReports_reportWithUserId_returnsReportWithProperUse
335346

336347
reportPersistence.finalizeReports("skippedSession", 0L);
337348

338-
final List<CrashlyticsReport> finalizedReports = reportPersistence.loadFinalizedReports();
349+
final List<CrashlyticsReportWithSessionId> finalizedReports =
350+
reportPersistence.loadFinalizedReports();
339351
assertEquals(1, finalizedReports.size());
340-
final CrashlyticsReport finalizedReport = finalizedReports.get(0);
352+
final CrashlyticsReport finalizedReport = finalizedReports.get(0).getReport();
341353
assertNotNull(finalizedReport.getSession().getUser());
342354
assertEquals(userId, finalizedReport.getSession().getUser().getIdentifier());
343355
}
@@ -363,14 +375,15 @@ public void testLoadFinalizedReports_reportWithUserId_returnsReportWithProperUse
363375

364376
reportPersistence.finalizeReports("skippedSession", 0L);
365377

366-
final List<CrashlyticsReport> finalizedReports = reportPersistence.loadFinalizedReports();
378+
final List<CrashlyticsReportWithSessionId> finalizedReports =
379+
reportPersistence.loadFinalizedReports();
367380
assertEquals(2, finalizedReports.size());
368-
final CrashlyticsReport finalizedReport1 = finalizedReports.get(1);
369-
assertNotNull(finalizedReport1.getSession().getUser());
370-
assertEquals(userId1, finalizedReport1.getSession().getUser().getIdentifier());
371-
final CrashlyticsReport finalizedReport2 = finalizedReports.get(0);
372-
assertNotNull(finalizedReport2.getSession().getUser());
373-
assertEquals(userId2, finalizedReport2.getSession().getUser().getIdentifier());
381+
final CrashlyticsReportWithSessionId finalizedReport1 = finalizedReports.get(1);
382+
assertNotNull(finalizedReport1.getReport().getSession().getUser());
383+
assertEquals(userId1, finalizedReport1.getReport().getSession().getUser().getIdentifier());
384+
final CrashlyticsReportWithSessionId finalizedReport2 = finalizedReports.get(0);
385+
assertNotNull(finalizedReport2.getReport().getSession().getUser());
386+
assertEquals(userId2, finalizedReport2.getReport().getSession().getUser().getIdentifier());
374387
}
375388

376389
@Test
@@ -388,7 +401,8 @@ public void testFinalizeSessionWithNativeEvent_writesNativeSessions() {
388401
.build();
389402

390403
CrashlyticsReport report = makeTestNativeReport().withNdkPayload(filesPayload);
391-
List<CrashlyticsReport> finalizedReports = reportPersistence.loadFinalizedReports();
404+
List<CrashlyticsReportWithSessionId> finalizedReports =
405+
reportPersistence.loadFinalizedReports();
392406

393407
assertEquals(0, finalizedReports.size());
394408

@@ -397,7 +411,8 @@ public void testFinalizeSessionWithNativeEvent_writesNativeSessions() {
397411
finalizedReports = reportPersistence.loadFinalizedReports();
398412
assertEquals(1, finalizedReports.size());
399413
assertEquals(
400-
report.withNdkPayload(filesPayload).withOrganizationId("orgId"), finalizedReports.get(0));
414+
report.withNdkPayload(filesPayload).withOrganizationId("orgId"),
415+
finalizedReports.get(0).getReport());
401416
}
402417

403418
@Test
@@ -483,9 +498,10 @@ public void testPersistEvent_keepsAppropriateNumberOfMostRecentEvents() throws I
483498

484499
reportPersistence.finalizeReports("skippedSession", endedAt);
485500

486-
final List<CrashlyticsReport> finalizedReports = reportPersistence.loadFinalizedReports();
501+
final List<CrashlyticsReportWithSessionId> finalizedReports =
502+
reportPersistence.loadFinalizedReports();
487503
assertEquals(1, finalizedReports.size());
488-
final CrashlyticsReport finalizedReport = finalizedReports.get(0);
504+
final CrashlyticsReport finalizedReport = finalizedReports.get(0).getReport();
489505
assertEquals(4, finalizedReport.getSession().getEvents().size());
490506
assertEquals(
491507
testReport
@@ -526,9 +542,10 @@ public void testPersistEvent_whenSettingsChanges_keepsAppropriateNumberOfMostRec
526542

527543
reportPersistence.finalizeReports("skippedSession", endedAt);
528544

529-
final List<CrashlyticsReport> finalizedReports = reportPersistence.loadFinalizedReports();
545+
final List<CrashlyticsReportWithSessionId> finalizedReports =
546+
reportPersistence.loadFinalizedReports();
530547
assertEquals(1, finalizedReports.size());
531-
final CrashlyticsReport finalizedReport = finalizedReports.get(0);
548+
final CrashlyticsReport finalizedReport = finalizedReports.get(0).getReport();
532549
assertEquals(4, finalizedReport.getSession().getEvents().size());
533550
assertEquals(
534551
testReport
@@ -562,9 +579,10 @@ public void testPersistEvent_whenSettingsChanges_keepsAppropriateNumberOfMostRec
562579

563580
reportPersistence.finalizeReports("skippedSession", endedAt);
564581

565-
final List<CrashlyticsReport> finalizedReports2 = reportPersistence.loadFinalizedReports();
582+
final List<CrashlyticsReportWithSessionId> finalizedReports2 =
583+
reportPersistence.loadFinalizedReports();
566584
assertEquals(2, finalizedReports2.size());
567-
final CrashlyticsReport finalizedReport2 = finalizedReports2.get(0);
585+
final CrashlyticsReport finalizedReport2 = finalizedReports2.get(0).getReport();
568586
assertEquals(8, finalizedReport2.getSession().getEvents().size());
569587
assertEquals(
570588
testReport2

firebase-crashlytics/src/androidTest/java/com/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSenderTest.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.google.android.datatransport.TransportScheduleCallback;
2727
import com.google.android.gms.tasks.Task;
2828
import com.google.android.gms.tasks.Tasks;
29+
import com.google.firebase.crashlytics.internal.common.CrashlyticsReportWithSessionId;
2930
import com.google.firebase.crashlytics.internal.model.CrashlyticsReport;
3031
import java.util.concurrent.ExecutionException;
3132
import org.junit.Before;
@@ -52,11 +53,11 @@ public void setUp() throws Exception {
5253
public void testSendReportsSuccessful() throws Exception {
5354
doAnswer(callbackAnswer(null)).when(mockTransport).schedule(any(), any());
5455

55-
final CrashlyticsReport report1 = mock(CrashlyticsReport.class);
56-
final CrashlyticsReport report2 = mock(CrashlyticsReport.class);
56+
final CrashlyticsReportWithSessionId report1 = mock(CrashlyticsReportWithSessionId.class);
57+
final CrashlyticsReportWithSessionId report2 = mock(CrashlyticsReportWithSessionId.class);
5758

58-
final Task<CrashlyticsReport> send1 = reportSender.sendReport(report1);
59-
final Task<CrashlyticsReport> send2 = reportSender.sendReport(report2);
59+
final Task<CrashlyticsReportWithSessionId> send1 = reportSender.sendReport(report1);
60+
final Task<CrashlyticsReportWithSessionId> send2 = reportSender.sendReport(report2);
6061

6162
try {
6263
Tasks.await(send1);
@@ -76,11 +77,11 @@ public void testSendReportsFailure() throws Exception {
7677
final Exception ex = new Exception("fail");
7778
doAnswer(callbackAnswer(ex)).when(mockTransport).schedule(any(), any());
7879

79-
final CrashlyticsReport report1 = mock(CrashlyticsReport.class);
80-
final CrashlyticsReport report2 = mock(CrashlyticsReport.class);
80+
final CrashlyticsReportWithSessionId report1 = mock(CrashlyticsReportWithSessionId.class);
81+
final CrashlyticsReportWithSessionId report2 = mock(CrashlyticsReportWithSessionId.class);
8182

82-
final Task<CrashlyticsReport> send1 = reportSender.sendReport(report1);
83-
final Task<CrashlyticsReport> send2 = reportSender.sendReport(report2);
83+
final Task<CrashlyticsReportWithSessionId> send1 = reportSender.sendReport(report1);
84+
final Task<CrashlyticsReportWithSessionId> send2 = reportSender.sendReport(report2);
8485

8586
try {
8687
Tasks.await(send1);
@@ -103,11 +104,11 @@ public void testSendReports_oneSuccessOneFail() throws Exception {
103104
.when(mockTransport)
104105
.schedule(any(), any());
105106

106-
final CrashlyticsReport report1 = mock(CrashlyticsReport.class);
107-
final CrashlyticsReport report2 = mock(CrashlyticsReport.class);
107+
final CrashlyticsReportWithSessionId report1 = mock(CrashlyticsReportWithSessionId.class);
108+
final CrashlyticsReportWithSessionId report2 = mock(CrashlyticsReportWithSessionId.class);
108109

109-
final Task<CrashlyticsReport> send1 = reportSender.sendReport(report1);
110-
final Task<CrashlyticsReport> send2 = reportSender.sendReport(report2);
110+
final Task<CrashlyticsReportWithSessionId> send1 = reportSender.sendReport(report1);
111+
final Task<CrashlyticsReportWithSessionId> send2 = reportSender.sendReport(report2);
111112

112113
try {
113114
Tasks.await(send1);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Copyright 2020 Google LLC
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package com.google.firebase.crashlytics.internal.common;
16+
17+
import androidx.annotation.NonNull;
18+
import com.google.auto.value.AutoValue;
19+
import com.google.firebase.crashlytics.internal.model.CrashlyticsReport;
20+
21+
@AutoValue
22+
public abstract class CrashlyticsReportWithSessionId {
23+
24+
public abstract CrashlyticsReport getReport();
25+
26+
public abstract String getSessionId();
27+
28+
@AutoValue.Builder
29+
public abstract static class Builder {
30+
31+
@NonNull
32+
public abstract CrashlyticsReportWithSessionId.Builder setReport(
33+
@NonNull CrashlyticsReport value);
34+
35+
@NonNull
36+
public abstract CrashlyticsReportWithSessionId.Builder setSessionId(@NonNull String value);
37+
38+
@NonNull
39+
public abstract CrashlyticsReportWithSessionId build();
40+
}
41+
42+
@NonNull
43+
public static CrashlyticsReportWithSessionId.Builder builder() {
44+
return new AutoValue_CrashlyticsReportWithSessionId.Builder();
45+
}
46+
}

0 commit comments

Comments
 (0)