34
34
import com .google .android .gms .tasks .TaskCompletionSource ;
35
35
import com .google .android .gms .tasks .Tasks ;
36
36
import com .google .firebase .FirebaseApp ;
37
- import com .google .firebase .concurrent .TestOnlyExecutors ;
38
37
import com .google .firebase .crashlytics .internal .CrashlyticsNativeComponent ;
39
38
import com .google .firebase .crashlytics .internal .CrashlyticsTestCase ;
40
- import com .google .firebase .crashlytics .internal .CrashlyticsWorker ;
41
39
import com .google .firebase .crashlytics .internal .DevelopmentPlatformProvider ;
42
40
import com .google .firebase .crashlytics .internal .NativeSessionFileProvider ;
43
41
import com .google .firebase .crashlytics .internal .analytics .AnalyticsEventLogger ;
57
55
import java .util .TreeSet ;
58
56
import java .util .concurrent .Executor ;
59
57
import java .util .concurrent .TimeUnit ;
58
+ import org .junit .Test ;
60
59
import org .mockito .ArgumentCaptor ;
61
60
62
61
public class CrashlyticsControllerTest extends CrashlyticsTestCase {
63
62
private static final String GOOGLE_APP_ID = "google:app:id" ;
64
63
private static final String SESSION_ID = "session_id" ;
65
64
66
- private final CrashlyticsWorker commonWorker =
67
- new CrashlyticsWorker (TestOnlyExecutors .background ());
68
-
69
65
private Context testContext ;
70
66
private IdManager idManager ;
71
67
private SettingsProvider testSettingsProvider ;
@@ -103,19 +99,14 @@ protected void setUp() throws Exception {
103
99
when (testSettingsProvider .getSettingsAsync ()).thenReturn (Tasks .forResult (testSettings ));
104
100
}
105
101
106
- @ Override
107
- protected void tearDown () throws Exception {
108
- super .tearDown ();
109
- commonWorker .await ();
110
- }
111
-
112
102
/** A convenience class for building CrashlyticsController instances for testing. */
113
103
private class ControllerBuilder {
114
104
private DataCollectionArbiter dataCollectionArbiter ;
115
105
private CrashlyticsNativeComponent nativeComponent = null ;
116
106
private AnalyticsEventLogger analyticsEventLogger ;
117
107
private SessionReportingCoordinator sessionReportingCoordinator ;
118
108
109
+ private CrashlyticsBackgroundWorker backgroundWorker ;
119
110
private LogFileManager logFileManager = null ;
120
111
121
112
private UserMetadata userMetadata = null ;
@@ -127,6 +118,8 @@ private class ControllerBuilder {
127
118
analyticsEventLogger = mock (AnalyticsEventLogger .class );
128
119
129
120
sessionReportingCoordinator = mockSessionReportingCoordinator ;
121
+
122
+ backgroundWorker = new CrashlyticsBackgroundWorker (new SameThreadExecutorService ());
130
123
}
131
124
132
125
ControllerBuilder setDataCollectionArbiter (DataCollectionArbiter arbiter ) {
@@ -175,7 +168,7 @@ public CrashlyticsController build() {
175
168
final CrashlyticsController controller =
176
169
new CrashlyticsController (
177
170
testContext .getApplicationContext (),
178
- commonWorker ,
171
+ backgroundWorker ,
179
172
idManager ,
180
173
dataCollectionArbiter ,
181
174
testFileStore ,
@@ -215,8 +208,6 @@ public void testWriteNonFatal_callsSessionReportingCoordinatorPersistNonFatal()
215
208
controller .writeNonFatalException (thread , nonFatal );
216
209
controller .doCloseSessions (testSettingsProvider );
217
210
218
- commonWorker .await ();
219
-
220
211
verify (mockSessionReportingCoordinator )
221
212
.persistNonFatalEvent (eq (nonFatal ), eq (thread ), eq (sessionId ), anyLong ());
222
213
}
@@ -237,8 +228,9 @@ public void testFatalException_callsSessionReportingCoordinatorPersistFatal() th
237
228
.persistFatalEvent (eq (fatal ), eq (thread ), eq (sessionId ), anyLong ());
238
229
}
239
230
231
+ @ Test
240
232
@ SdkSuppress (minSdkVersion = 30 ) // ApplicationExitInfo
241
- public void testOnDemandFatal_callLogFatalException () throws Exception {
233
+ public void testOnDemandFatal_callLogFatalException () {
242
234
Thread thread = Thread .currentThread ();
243
235
Exception fatal = new RuntimeException ("Fatal" );
244
236
Thread .UncaughtExceptionHandler exceptionHandler = mock (Thread .UncaughtExceptionHandler .class );
@@ -254,8 +246,6 @@ public void testOnDemandFatal_callLogFatalException() throws Exception {
254
246
controller .enableExceptionHandling (SESSION_ID , exceptionHandler , testSettingsProvider );
255
247
controller .logFatalException (thread , fatal );
256
248
257
- commonWorker .await ();
258
-
259
249
verify (mockUserMetadata ).setNewSession (not (eq (SESSION_ID )));
260
250
}
261
251
@@ -333,20 +323,17 @@ public File getOsFile() {
333
323
final CrashlyticsController controller =
334
324
builder ().setNativeComponent (mockNativeComponent ).setLogFileManager (logFileManager ).build ();
335
325
336
- commonWorker .submit (() -> controller .finalizeSessions (testSettingsProvider ));
337
- commonWorker .await ();
338
-
326
+ controller .finalizeSessions (testSettingsProvider );
339
327
verify (mockSessionReportingCoordinator )
340
328
.finalizeSessionWithNativeEvent (eq (previousSessionId ), any (), any ());
341
329
verify (mockSessionReportingCoordinator , never ())
342
330
.finalizeSessionWithNativeEvent (eq (sessionId ), any (), any ());
343
331
}
344
332
345
333
@ SdkSuppress (minSdkVersion = 30 ) // ApplicationExitInfo
346
- public void testMissingNativeComponentCausesNoReports () throws Exception {
334
+ public void testMissingNativeComponentCausesNoReports () {
347
335
final CrashlyticsController controller = createController ();
348
- commonWorker .submit (() -> controller .finalizeSessions (testSettingsProvider ));
349
- commonWorker .await ();
336
+ controller .finalizeSessions (testSettingsProvider );
350
337
351
338
List <String > sessions = testFileStore .getAllOpenSessionIds ();
352
339
for (String sessionId : sessions ) {
@@ -397,8 +384,7 @@ public void testFinalizeSessionAfterCrashOk() throws Exception {
397
384
testSettingsProvider , Thread .currentThread (), new RuntimeException ());
398
385
399
386
// This should not throw.
400
- commonWorker .submit (() -> controller .finalizeSessions (testSettingsProvider ));
401
- commonWorker .await ();
387
+ controller .finalizeSessions (testSettingsProvider );
402
388
}
403
389
404
390
@ SdkSuppress (minSdkVersion = 30 ) // ApplicationExitInfo
@@ -549,7 +535,7 @@ public void testUploadDisabledThenEnabled() throws Exception {
549
535
}
550
536
551
537
@ SdkSuppress (minSdkVersion = 30 ) // ApplicationExitInfo
552
- public void testFatalEvent_sendsAppExceptionEvent () throws Exception {
538
+ public void testFatalEvent_sendsAppExceptionEvent () {
553
539
final String sessionId = "sessionId" ;
554
540
final LogFileManager logFileManager = new LogFileManager (testFileStore );
555
541
final AnalyticsEventLogger mockFirebaseAnalyticsLogger = mock (AnalyticsEventLogger .class );
@@ -562,14 +548,10 @@ public void testFatalEvent_sendsAppExceptionEvent() throws Exception {
562
548
when (mockSessionReportingCoordinator .listSortedOpenSessionIds ())
563
549
.thenReturn (new TreeSet <>(Collections .singleton (sessionId )));
564
550
565
- commonWorker .submit (
566
- () -> {
567
- controller .openSession (SESSION_ID );
568
- controller .handleUncaughtException (
569
- testSettingsProvider , Thread .currentThread (), new RuntimeException ("Fatal" ));
570
- controller .finalizeSessions (testSettingsProvider );
571
- });
572
- commonWorker .await ();
551
+ controller .openSession (SESSION_ID );
552
+ controller .handleUncaughtException (
553
+ testSettingsProvider , Thread .currentThread (), new RuntimeException ("Fatal" ));
554
+ controller .finalizeSessions (testSettingsProvider );
573
555
574
556
assertFirebaseAnalyticsCrashEvent (mockFirebaseAnalyticsLogger );
575
557
}
0 commit comments