14
14
15
15
package com .google .firebase .appdistribution ;
16
16
17
+ import static com .google .firebase .appdistribution .BinaryType .APK ;
17
18
import static org .junit .Assert .assertEquals ;
18
19
import static org .junit .Assert .assertFalse ;
19
20
import static org .junit .Assert .assertNotNull ;
@@ -64,27 +65,12 @@ public class CheckForNewReleaseClientTest {
64
65
private static final String TEST_AUTH_TOKEN = "fad.auth.token" ;
65
66
private static final String TEST_IAS_ARTIFACT_ID = "ias-artifact-id" ;
66
67
private static final String IAS_ARTIFACT_ID_KEY = "com.android.vending.internal.apk.id" ;
67
- private static final String TEST_CODEHASH_1 = "abcdef" ;
68
- private static final String TEST_CODEHASH_2 = "ghiklm" ;
69
- private static final long INSTALLED_VERSION_CODE = 2 ;
70
-
71
- private static final AppDistributionReleaseInternal TEST_RELEASE_NEWER_APK =
72
- AppDistributionReleaseInternal .builder ()
73
- .setBuildVersion ("3" )
74
- .setDisplayVersion ("3.0" )
75
- .setReleaseNotes ("Newer version." )
76
- .setBinaryType (BinaryType .APK )
77
- .setCodeHash (TEST_CODEHASH_1 )
78
- .build ();
79
-
80
- private static final AppDistributionReleaseInternal TEST_RELEASE_CURRENT =
81
- AppDistributionReleaseInternal .builder ()
82
- .setBinaryType (BinaryType .APK )
83
- .setBuildVersion (Long .toString (INSTALLED_VERSION_CODE ))
84
- .setDisplayVersion ("2.0" )
85
- .setReleaseNotes ("Current version." )
86
- .setCodeHash (TEST_CODEHASH_2 )
87
- .build ();
68
+ private static final String NEW_CODEHASH = "abcdef" ;
69
+ private static final String CURRENT_CODEHASH = "ghiklm" ;
70
+ private static final String NEW_APK_HASH = "newApkHash" ;
71
+ private static final String CURRENT_APK_HASH = "currentApkHash" ;
72
+ private static final long INSTALLED_VERSION_CODE = 1 ;
73
+ private static final long NEW_VERSION_CODE = 2 ;
88
74
89
75
private CheckForNewReleaseClient checkForNewReleaseClient ;
90
76
private ShadowPackageManager shadowPackageManager ;
@@ -93,6 +79,7 @@ public class CheckForNewReleaseClientTest {
93
79
@ Mock private FirebaseInstallationsApi mockFirebaseInstallations ;
94
80
@ Mock private FirebaseAppDistributionTesterApiClient mockFirebaseAppDistributionTesterApiClient ;
95
81
@ Mock private InstallationTokenResult mockInstallationTokenResult ;
82
+ @ Mock private ReleaseIdentifierStorage mockReleaseIdentifierStorage ;
96
83
97
84
Executor testExecutor = Executors .newSingleThreadExecutor ();
98
85
@@ -142,6 +129,7 @@ public void setup() {
142
129
firebaseApp ,
143
130
mockFirebaseAppDistributionTesterApiClient ,
144
131
mockFirebaseInstallations ,
132
+ mockReleaseIdentifierStorage ,
145
133
testExecutor ));
146
134
}
147
135
@@ -166,7 +154,7 @@ public void checkForNewReleaseTask_whenCalledMultipleTimes_returnsTheSameTask()
166
154
public void checkForNewRelease_succeeds () throws Exception {
167
155
when (mockFirebaseAppDistributionTesterApiClient .fetchNewRelease (
168
156
any (), any (), any (), any (), any ()))
169
- .thenReturn (TEST_RELEASE_NEWER_APK );
157
+ .thenReturn (getTestNewRelease (). build () );
170
158
when (mockFirebaseInstallations .getId ()).thenReturn (Tasks .forResult (TEST_FID_1 ));
171
159
when (mockFirebaseInstallations .getToken (false ))
172
160
.thenReturn (Tasks .forResult (mockInstallationTokenResult ));
@@ -177,7 +165,7 @@ public void checkForNewRelease_succeeds() throws Exception {
177
165
task .addOnCompleteListener (testExecutor , onCompleteListener );
178
166
179
167
AppDistributionReleaseInternal appDistributionReleaseInternal = onCompleteListener .await ();
180
- assertEquals (TEST_RELEASE_NEWER_APK , appDistributionReleaseInternal );
168
+ assertEquals (getTestNewRelease (). build () , appDistributionReleaseInternal );
181
169
verify (mockFirebaseInstallations , times (1 )).getId ();
182
170
verify (mockFirebaseInstallations , times (1 )).getToken (false );
183
171
}
@@ -186,7 +174,7 @@ public void checkForNewRelease_succeeds() throws Exception {
186
174
public void checkForNewRelease_nonAppDistroFailure () throws Exception {
187
175
when (mockFirebaseAppDistributionTesterApiClient .fetchNewRelease (
188
176
any (), any (), any (), any (), any ()))
189
- .thenReturn (TEST_RELEASE_CURRENT );
177
+ .thenReturn (getTestInstalledRelease (). build () );
190
178
Exception expectedException = new Exception ("test ex" );
191
179
when (mockFirebaseInstallations .getId ()).thenReturn (Tasks .forException (expectedException ));
192
180
when (mockFirebaseInstallations .getToken (false ))
@@ -235,23 +223,23 @@ public void getNewReleaseFromClient_whenNewReleaseIsNewerBuildThanInstalled_retu
235
223
throws Exception {
236
224
when (mockFirebaseAppDistributionTesterApiClient .fetchNewRelease (
237
225
TEST_FID_1 , TEST_APP_ID_1 , TEST_API_KEY , TEST_AUTH_TOKEN , applicationContext ))
238
- .thenReturn (TEST_RELEASE_NEWER_APK );
226
+ .thenReturn (getTestNewRelease (). build () );
239
227
240
228
AppDistributionReleaseInternal release =
241
229
checkForNewReleaseClient .getNewReleaseFromClient (
242
230
TEST_FID_1 , TEST_APP_ID_1 , TEST_API_KEY , TEST_AUTH_TOKEN );
243
231
244
232
assertNotNull (release );
245
- assertEquals (TEST_RELEASE_NEWER_APK . getBuildVersion ( ), release .getBuildVersion ());
233
+ assertEquals (Long . toString ( NEW_VERSION_CODE ), release .getBuildVersion ());
246
234
}
247
235
248
236
@ Test
249
237
public void getNewReleaseFromClient_whenNewReleaseIsSameRelease_returnsNull () throws Exception {
250
238
when (mockFirebaseAppDistributionTesterApiClient .fetchNewRelease (
251
239
TEST_FID_1 , TEST_APP_ID_1 , TEST_API_KEY , TEST_AUTH_TOKEN , applicationContext ))
252
- .thenReturn (TEST_RELEASE_CURRENT );
240
+ .thenReturn (getTestInstalledRelease (). build () );
253
241
254
- doReturn (TEST_CODEHASH_2 ).when (checkForNewReleaseClient ).extractApkCodeHash (any ());
242
+ doReturn (CURRENT_APK_HASH ).when (checkForNewReleaseClient ).extractApkHash (any ());
255
243
256
244
AppDistributionReleaseInternal release =
257
245
checkForNewReleaseClient .getNewReleaseFromClient (
@@ -265,10 +253,7 @@ public void handleNewReleaseFromClient_whenNewAabIsAvailable_returnsRelease() th
265
253
when (mockFirebaseAppDistributionTesterApiClient .fetchNewRelease (
266
254
any (), any (), any (), any (), any ()))
267
255
.thenReturn (
268
- AppDistributionReleaseInternal .builder ()
269
- .setBuildVersion (TEST_RELEASE_CURRENT .getBuildVersion ())
270
- .setDisplayVersion (TEST_RELEASE_CURRENT .getDisplayVersion ())
271
- .setCodeHash ("codehash" )
256
+ getTestNewRelease ()
272
257
.setDownloadUrl ("http://fake-download-url" )
273
258
.setIasArtifactId ("test-ias-artifact-id-2" )
274
259
.setBinaryType (BinaryType .AAB )
@@ -278,10 +263,7 @@ public void handleNewReleaseFromClient_whenNewAabIsAvailable_returnsRelease() th
278
263
checkForNewReleaseClient .getNewReleaseFromClient (
279
264
TEST_FID_1 , TEST_APP_ID_1 , TEST_API_KEY , TEST_AUTH_TOKEN );
280
265
assertEquals (
281
- AppDistributionReleaseInternal .builder ()
282
- .setBuildVersion (TEST_RELEASE_CURRENT .getBuildVersion ())
283
- .setDisplayVersion (TEST_RELEASE_CURRENT .getDisplayVersion ())
284
- .setCodeHash ("codehash" )
266
+ getTestNewRelease ()
285
267
.setDownloadUrl ("http://fake-download-url" )
286
268
.setIasArtifactId ("test-ias-artifact-id-2" )
287
269
.setBinaryType (BinaryType .AAB )
@@ -295,10 +277,7 @@ public void handleNewReleaseFromClient_whenNewReleaseIsSameAsInstalledAab_return
295
277
when (mockFirebaseAppDistributionTesterApiClient .fetchNewRelease (
296
278
any (), any (), any (), any (), any ()))
297
279
.thenReturn (
298
- AppDistributionReleaseInternal .builder ()
299
- .setBuildVersion (TEST_RELEASE_CURRENT .getBuildVersion ())
300
- .setDisplayVersion (TEST_RELEASE_CURRENT .getDisplayVersion ())
301
- .setCodeHash ("codehash" )
280
+ getTestInstalledRelease ()
302
281
.setDownloadUrl ("http://fake-download-url" )
303
282
.setIasArtifactId (TEST_IAS_ARTIFACT_ID )
304
283
.setBinaryType (BinaryType .AAB )
@@ -311,15 +290,25 @@ public void handleNewReleaseFromClient_whenNewReleaseIsSameAsInstalledAab_return
311
290
}
312
291
313
292
@ Test
314
- public void isInstalledRelease_whenCodeHashesEqual_returnsTrue () {
315
- doReturn (TEST_CODEHASH_1 ).when (checkForNewReleaseClient ).extractApkCodeHash (any ());
316
- assertTrue (checkForNewReleaseClient .isInstalledRelease (TEST_RELEASE_NEWER_APK ));
293
+ public void isInstalledRelease_whenApkHashesEqual_returnsTrue () {
294
+ doReturn (CURRENT_APK_HASH ).when (checkForNewReleaseClient ).extractApkHash (any ());
295
+ assertTrue (checkForNewReleaseClient .isInstalledRelease (getTestInstalledRelease (). build () ));
317
296
}
318
297
319
298
@ Test
320
- public void isInstalledRelease_whenCodeHashesNotEqual_returnsFalse () {
321
- doReturn (TEST_CODEHASH_2 ).when (checkForNewReleaseClient ).extractApkCodeHash (any ());
322
- assertFalse (checkForNewReleaseClient .isInstalledRelease (TEST_RELEASE_NEWER_APK ));
299
+ public void isInstalledRelease_whenApkHashesNotEqual_returnsFalse () {
300
+ doReturn (CURRENT_APK_HASH ).when (checkForNewReleaseClient ).extractApkHash (any ());
301
+ assertFalse (checkForNewReleaseClient .isInstalledRelease (getTestNewRelease ().build ()));
302
+ }
303
+
304
+ @ Test
305
+ public void isInstalledRelease_ifApkHashNotPresent_fallsBackToExternalCodeHash () {
306
+ doReturn (CURRENT_APK_HASH ).when (checkForNewReleaseClient ).extractApkHash (any ());
307
+ when (mockReleaseIdentifierStorage .getExternalCodeHash (any ())).thenReturn (CURRENT_CODEHASH );
308
+
309
+ assertFalse (
310
+ checkForNewReleaseClient .isInstalledRelease (getTestNewRelease ().setApkHash ("" ).build ()));
311
+ verify (mockReleaseIdentifierStorage ).getExternalCodeHash (CURRENT_APK_HASH );
323
312
}
324
313
325
314
@ Test
@@ -332,13 +321,33 @@ public void extractApkCodeHash_ifKeyInCachedCodeHashes_doesNotRecalculateZipHash
332
321
ApplicationProvider .getApplicationContext ().getPackageName ());
333
322
mockedReleaseIdentificationUtils
334
323
.when (() -> ReleaseIdentificationUtils .calculateApkInternalCodeHash (any ()))
335
- .thenReturn (TEST_CODEHASH_1 );
324
+ .thenReturn (NEW_CODEHASH );
336
325
337
- checkForNewReleaseClient .extractApkCodeHash (packageInfo );
338
- checkForNewReleaseClient .extractApkCodeHash (packageInfo );
326
+ checkForNewReleaseClient .extractApkHash (packageInfo );
327
+ checkForNewReleaseClient .extractApkHash (packageInfo );
339
328
// check that calculateApkInternalCodeHash is only called once
340
329
mockedReleaseIdentificationUtils .verify (
341
330
() -> ReleaseIdentificationUtils .calculateApkInternalCodeHash (any ()));
342
331
}
343
332
}
333
+
334
+ private AppDistributionReleaseInternal .Builder getTestNewRelease () {
335
+ return AppDistributionReleaseInternal .builder ()
336
+ .setBuildVersion (Long .toString (NEW_VERSION_CODE ))
337
+ .setDisplayVersion ("2.0" )
338
+ .setReleaseNotes ("Newer version." )
339
+ .setCodeHash (NEW_CODEHASH )
340
+ .setBinaryType (APK )
341
+ .setApkHash (NEW_APK_HASH );
342
+ }
343
+
344
+ private AppDistributionReleaseInternal .Builder getTestInstalledRelease () {
345
+ return AppDistributionReleaseInternal .builder ()
346
+ .setBuildVersion (Long .toString (INSTALLED_VERSION_CODE ))
347
+ .setDisplayVersion ("1.0" )
348
+ .setReleaseNotes ("Current version." )
349
+ .setCodeHash (CURRENT_CODEHASH )
350
+ .setBinaryType (APK )
351
+ .setApkHash (CURRENT_APK_HASH );
352
+ }
344
353
}
0 commit comments