21
21
22
22
import android .content .SharedPreferences ;
23
23
import com .google .android .gms .tasks .Tasks ;
24
+ import com .google .firebase .concurrent .TestOnlyExecutors ;
24
25
import com .google .firebase .crashlytics .internal .CrashlyticsTestCase ;
26
+ import com .google .firebase .crashlytics .internal .common .InstallIdProvider .InstallIds ;
27
+ import com .google .firebase .crashlytics .internal .concurrency .CrashlyticsWorkers ;
25
28
import com .google .firebase .installations .FirebaseInstallationsApi ;
26
29
import java .util .concurrent .TimeoutException ;
27
30
28
31
public class IdManagerTest extends CrashlyticsTestCase {
29
32
30
- SharedPreferences prefs ;
31
- SharedPreferences legacyPrefs ;
33
+ private SharedPreferences prefs ;
34
+ private SharedPreferences legacyPrefs ;
35
+
36
+ private final CrashlyticsWorkers crashlyticsWorkers =
37
+ new CrashlyticsWorkers (TestOnlyExecutors .background (), TestOnlyExecutors .blocking ());
32
38
33
39
@ Override
34
40
public void setUp () throws Exception {
@@ -66,21 +72,21 @@ private IdManager createIdManager(String instanceId, DataCollectionArbiter arbit
66
72
return new IdManager (getContext (), getContext ().getPackageName (), iid , arbiter );
67
73
}
68
74
69
- public void testCreateUUID () {
75
+ public void testCreateUUID () throws Exception {
70
76
final String fid = "test_fid" ;
71
77
final IdManager idManager = createIdManager (fid , MOCK_ARBITER_ENABLED );
72
- final String installId = idManager . getInstallIds ().getCrashlyticsInstallId ();
78
+ final String installId = getInstallIds (idManager ).getCrashlyticsInstallId ();
73
79
assertNotNull (installId );
74
80
75
81
assertEquals (installId , prefs .getString (IdManager .PREFKEY_INSTALLATION_UUID , null ));
76
82
assertNull (prefs .getString (IdManager .PREFKEY_ADVERTISING_ID , null ));
77
83
assertEquals (fid , prefs .getString (IdManager .PREFKEY_FIREBASE_IID , null ));
78
84
79
85
// subsequent calls should return the same id
80
- assertEquals (installId , idManager . getInstallIds ().getCrashlyticsInstallId ());
86
+ assertEquals (installId , getInstallIds (idManager ).getCrashlyticsInstallId ());
81
87
}
82
88
83
- public void testGetIdExceptionalCase_doesNotRotateInstallId () {
89
+ public void testGetIdExceptionalCase_doesNotRotateInstallId () throws Exception {
84
90
FirebaseInstallationsApi fis = mock (FirebaseInstallationsApi .class );
85
91
final String expectedInstallId = "expectedInstallId" ;
86
92
when (fis .getId ())
@@ -93,12 +99,12 @@ public void testGetIdExceptionalCase_doesNotRotateInstallId() {
93
99
94
100
final IdManager idManager =
95
101
new IdManager (getContext (), getContext ().getPackageName (), fis , MOCK_ARBITER_ENABLED );
96
- final String actualInstallId = idManager . getInstallIds ().getCrashlyticsInstallId ();
102
+ final String actualInstallId = getInstallIds (idManager ).getCrashlyticsInstallId ();
97
103
assertNotNull (actualInstallId );
98
104
assertEquals (expectedInstallId , actualInstallId );
99
105
}
100
106
101
- public void testInstanceIdChanges_dataCollectionEnabled () {
107
+ public void testInstanceIdChanges_dataCollectionEnabled () throws Exception {
102
108
// Set up the initial state with a valid iid and uuid.
103
109
final String oldUuid = "old_uuid" ;
104
110
final String newFid = "new_test_fid" ;
@@ -111,18 +117,18 @@ public void testInstanceIdChanges_dataCollectionEnabled() {
111
117
// Initialize the manager with a different FID.
112
118
IdManager idManager = createIdManager (newFid , MOCK_ARBITER_ENABLED );
113
119
114
- String installId = idManager . getInstallIds ().getCrashlyticsInstallId ();
120
+ String installId = getInstallIds (idManager ).getCrashlyticsInstallId ();
115
121
assertNotNull (installId );
116
122
assertFalse (installId .equals (oldUuid ));
117
123
118
124
assertEquals (installId , prefs .getString (IdManager .PREFKEY_INSTALLATION_UUID , null ));
119
125
assertEquals (newFid , prefs .getString (IdManager .PREFKEY_FIREBASE_IID , null ));
120
126
121
127
// subsequent calls should return the same id
122
- assertEquals (installId , idManager . getInstallIds ().getCrashlyticsInstallId ());
128
+ assertEquals (installId , getInstallIds (idManager ).getCrashlyticsInstallId ());
123
129
}
124
130
125
- void validateInstanceIdDoesntChange (boolean dataCollectionEnabled ) {
131
+ void validateInstanceIdDoesntChange (boolean dataCollectionEnabled ) throws Exception {
126
132
final String oldUuid = "test_uuid" ;
127
133
final String fid = dataCollectionEnabled ? "test_fid" : IdManager .createSyntheticFid ();
128
134
// Set up the initial state with a valid iid and uuid.
@@ -136,7 +142,7 @@ void validateInstanceIdDoesntChange(boolean dataCollectionEnabled) {
136
142
IdManager idManager =
137
143
createIdManager (fid , dataCollectionEnabled ? MOCK_ARBITER_ENABLED : MOCK_ARBITER_DISABLED );
138
144
139
- String installId = idManager . getInstallIds ().getCrashlyticsInstallId ();
145
+ String installId = getInstallIds (idManager ).getCrashlyticsInstallId ();
140
146
assertNotNull (installId );
141
147
142
148
// Test that the UUID didn't change.
@@ -146,18 +152,18 @@ void validateInstanceIdDoesntChange(boolean dataCollectionEnabled) {
146
152
assertEquals (fid , prefs .getString (IdManager .PREFKEY_FIREBASE_IID , null ));
147
153
148
154
// subsequent calls should return the same id
149
- assertEquals (oldUuid , idManager . getInstallIds ().getCrashlyticsInstallId ());
155
+ assertEquals (oldUuid , getInstallIds (idManager ).getCrashlyticsInstallId ());
150
156
}
151
157
152
- public void testInstanceIdDoesntChange_dataCollectionEnabled () {
158
+ public void testInstanceIdDoesntChange_dataCollectionEnabled () throws Exception {
153
159
validateInstanceIdDoesntChange (/* dataCollectionEnabled= */ true );
154
160
}
155
161
156
- public void testInstanceIdDoesntChange_dataCollectionDisabled () {
162
+ public void testInstanceIdDoesntChange_dataCollectionDisabled () throws Exception {
157
163
validateInstanceIdDoesntChange (/* dataCollectionEnabled= */ false );
158
164
}
159
165
160
- public void testInstanceIdRotatesWithDataCollectionFlag () {
166
+ public void testInstanceIdRotatesWithDataCollectionFlag () throws Exception {
161
167
final String originalUuid = "test_uuid" ;
162
168
final String originalFid = "test_fid" ;
163
169
// Set up the initial state with a valid iid and uuid.
@@ -169,44 +175,47 @@ public void testInstanceIdRotatesWithDataCollectionFlag() {
169
175
170
176
// Initialize the manager with the same FID.
171
177
IdManager idManager = createIdManager (originalFid , MOCK_ARBITER_ENABLED );
172
- String firstUuid = idManager . getInstallIds ().getCrashlyticsInstallId ();
178
+ String firstUuid = getInstallIds (idManager ).getCrashlyticsInstallId ();
173
179
assertNotNull (firstUuid );
174
180
assertEquals (originalUuid , firstUuid );
175
181
176
182
// subsequent calls should return the same id
177
- assertEquals (firstUuid , idManager . getInstallIds ().getCrashlyticsInstallId ());
183
+ assertEquals (firstUuid , getInstallIds (idManager ).getCrashlyticsInstallId ());
178
184
assertEquals (
179
185
firstUuid ,
180
- createIdManager (originalFid , MOCK_ARBITER_ENABLED )
181
- .getInstallIds ()
186
+ getInstallIds (createIdManager (originalFid , MOCK_ARBITER_ENABLED ))
182
187
.getCrashlyticsInstallId ());
183
188
184
189
// Disable data collection manager and confirm we get a different id
185
190
idManager = createIdManager (originalFid , MOCK_ARBITER_DISABLED );
186
- String secondUuid = idManager . getInstallIds ().getCrashlyticsInstallId ();
191
+ String secondUuid = getInstallIds (idManager ).getCrashlyticsInstallId ();
187
192
assertNotSame (secondUuid , firstUuid );
188
- assertEquals (secondUuid , idManager . getInstallIds ().getCrashlyticsInstallId ());
193
+ assertEquals (secondUuid , getInstallIds (idManager ).getCrashlyticsInstallId ());
189
194
assertEquals (
190
195
secondUuid ,
191
- createIdManager (null , MOCK_ARBITER_DISABLED ). getInstallIds ( ).getCrashlyticsInstallId ());
196
+ getInstallIds ( createIdManager (null , MOCK_ARBITER_DISABLED )).getCrashlyticsInstallId ());
192
197
// Check that we cached an synthetic FID
193
198
final SharedPreferences prefs = CommonUtils .getSharedPrefs (getContext ());
194
199
String cachedFid = prefs .getString (IdManager .PREFKEY_FIREBASE_IID , null );
195
200
assertTrue (IdManager .isSyntheticFid (cachedFid ));
196
201
197
202
// re-enable data collection
198
203
idManager = createIdManager (originalFid , MOCK_ARBITER_ENABLED );
199
- String thirdUuid = idManager . getInstallIds ().getCrashlyticsInstallId ();
204
+ String thirdUuid = getInstallIds (idManager ).getCrashlyticsInstallId ();
200
205
assertNotSame (thirdUuid , firstUuid );
201
206
assertNotSame (thirdUuid , secondUuid );
202
- assertEquals (thirdUuid , idManager . getInstallIds ().getCrashlyticsInstallId ());
207
+ assertEquals (thirdUuid , getInstallIds (idManager ).getCrashlyticsInstallId ());
203
208
assertEquals (
204
209
thirdUuid ,
205
- createIdManager (originalFid , MOCK_ARBITER_ENABLED )
206
- .getInstallIds ()
210
+ getInstallIds (createIdManager (originalFid , MOCK_ARBITER_ENABLED ))
207
211
.getCrashlyticsInstallId ());
208
212
// The cached ID should be back to the original
209
213
cachedFid = prefs .getString (IdManager .PREFKEY_FIREBASE_IID , null );
210
214
assertEquals (cachedFid , originalFid );
211
215
}
216
+
217
+ /** Get the install ids on the common worker. */
218
+ private InstallIds getInstallIds (IdManager idManager ) throws Exception {
219
+ return Tasks .await (crashlyticsWorkers .common .submit (idManager ::getInstallIds ));
220
+ }
212
221
}
0 commit comments