Skip to content

Commit 9d57f91

Browse files
committed
Update tests.
1 parent 2bb9a3f commit 9d57f91

File tree

3 files changed

+179
-9
lines changed

3 files changed

+179
-9
lines changed

appcheck/firebase-appcheck-debug-testing/src/androidTest/java/com/google/firebase/appcheck/debug/testing/FirebaseAppCheckTest.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@
2222
import com.google.android.gms.tasks.Task;
2323
import com.google.android.gms.tasks.Tasks;
2424
import com.google.firebase.FirebaseApp;
25+
import com.google.firebase.appcheck.AppCheckToken;
2526
import com.google.firebase.appcheck.AppCheckTokenResult;
2627
import com.google.firebase.appcheck.FirebaseAppCheck;
28+
import com.google.firebase.appcheck.FirebaseAppCheck.AppCheckListener;
2729
import com.google.firebase.storage.FirebaseStorage;
2830
import com.google.firebase.storage.ListResult;
2931
import java.util.concurrent.ExecutionException;
@@ -52,7 +54,7 @@ public void tearDown() {
5254
}
5355

5456
@Test
55-
public void exchangeDebugSecretForAppCheckToken() throws Exception {
57+
public void exchangeDebugSecretForAppCheckToken_interopApi() throws Exception {
5658
debugAppCheckTestHelper.withDebugProvider(
5759
() -> {
5860
Task<AppCheckTokenResult> tokenResultTask = firebaseAppCheck.getToken(true);
@@ -63,6 +65,17 @@ public void exchangeDebugSecretForAppCheckToken() throws Exception {
6365
});
6466
}
6567

68+
@Test
69+
public void exchangeDebugSecretForAppCheckToken_publicApi() throws Exception {
70+
debugAppCheckTestHelper.withDebugProvider(
71+
() -> {
72+
Task<AppCheckToken> tokenTask = firebaseAppCheck.getAppCheckToken(true);
73+
Tasks.await(tokenTask);
74+
AppCheckToken result = tokenTask.getResult();
75+
assertThat(result.getToken()).isNotEmpty();
76+
});
77+
}
78+
6679
@Test
6780
@Ignore("TODO: Enable once we have a project with enforcement enabled in CI.")
6881
public void firebaseStorageListFiles_withValidAppCheckToken_success() throws Exception {

appcheck/firebase-appcheck/src/test/java/com/google/firebase/appcheck/internal/DefaultFirebaseAppCheckTest.java

Lines changed: 146 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@
2727
import com.google.firebase.FirebaseApp;
2828
import com.google.firebase.appcheck.AppCheckProvider;
2929
import com.google.firebase.appcheck.AppCheckProviderFactory;
30+
import com.google.firebase.appcheck.AppCheckToken;
3031
import com.google.firebase.appcheck.AppCheckTokenResult;
32+
import com.google.firebase.appcheck.FirebaseAppCheck.AppCheckListener;
3133
import com.google.firebase.appcheck.interop.AppCheckTokenListener;
3234
import com.google.firebase.heartbeatinfo.HeartBeatInfo;
3335
import com.google.firebase.platforminfo.UserAgentPublisher;
@@ -55,6 +57,7 @@ public class DefaultFirebaseAppCheckTest {
5557
@Mock private AppCheckProviderFactory mockAppCheckProviderFactory;
5658
@Mock private AppCheckProvider mockAppCheckProvider;
5759
@Mock private AppCheckTokenListener mockAppCheckTokenListener;
60+
@Mock private AppCheckListener mockAppCheckListener;
5861
@Mock private UserAgentPublisher mockUserAgentPublisher;
5962
@Mock private HeartBeatInfo mockHeartBeatInfo;
6063

@@ -131,6 +134,71 @@ public void testRemoveAppCheckTokenListener_nullListener_expectThrows() {
131134
});
132135
}
133136

137+
@Test
138+
public void testAddAppCheckListener_nullListener_expectThrows() {
139+
assertThrows(
140+
NullPointerException.class,
141+
() -> {
142+
defaultFirebaseAppCheck.addAppCheckListener(null);
143+
});
144+
}
145+
146+
@Test
147+
public void testRemoveAppCheckListener_nullListener_expectThrows() {
148+
assertThrows(
149+
NullPointerException.class,
150+
() -> {
151+
defaultFirebaseAppCheck.removeAppCheckListener(null);
152+
});
153+
}
154+
155+
@Test
156+
public void testAddAppCheckTokenListener_existingValidToken_triggersListenerUponAdding() {
157+
defaultFirebaseAppCheck.setCachedToken(validDefaultAppCheckToken);
158+
159+
defaultFirebaseAppCheck.addAppCheckTokenListener(mockAppCheckTokenListener);
160+
161+
ArgumentCaptor<DefaultAppCheckTokenResult> tokenResultCaptor =
162+
ArgumentCaptor.forClass(DefaultAppCheckTokenResult.class);
163+
verify(mockAppCheckTokenListener).onAppCheckTokenChanged(tokenResultCaptor.capture());
164+
assertThat(tokenResultCaptor.getValue().getToken()).isEqualTo(TOKEN_PAYLOAD);
165+
assertThat(tokenResultCaptor.getValue().getError()).isNull();
166+
}
167+
168+
@Test
169+
public void testAddAppCheckTokenListener_existingInvalidToken_doesNotTriggerListenerUponAdding() {
170+
DefaultAppCheckToken invalidDefaultAppCheckToken =
171+
new DefaultAppCheckToken(TOKEN_PAYLOAD, EXPIRES_NOW);
172+
defaultFirebaseAppCheck.setCachedToken(invalidDefaultAppCheckToken);
173+
174+
defaultFirebaseAppCheck.addAppCheckTokenListener(mockAppCheckTokenListener);
175+
176+
verify(mockAppCheckTokenListener, never()).onAppCheckTokenChanged(any());
177+
}
178+
179+
@Test
180+
public void testAddAppCheckListener_existingValidToken_triggersListenerUponAdding() {
181+
defaultFirebaseAppCheck.setCachedToken(validDefaultAppCheckToken);
182+
183+
defaultFirebaseAppCheck.addAppCheckListener(mockAppCheckListener);
184+
185+
ArgumentCaptor<DefaultAppCheckToken> tokenCaptor =
186+
ArgumentCaptor.forClass(DefaultAppCheckToken.class);
187+
verify(mockAppCheckListener).onAppCheckTokenChanged(tokenCaptor.capture());
188+
assertThat(tokenCaptor.getValue().getToken()).isEqualTo(TOKEN_PAYLOAD);
189+
}
190+
191+
@Test
192+
public void testAddAppCheckListener_existingInvalidToken_doesNotTriggerListenerUponAdding() {
193+
DefaultAppCheckToken invalidDefaultAppCheckToken =
194+
new DefaultAppCheckToken(TOKEN_PAYLOAD, EXPIRES_NOW);
195+
defaultFirebaseAppCheck.setCachedToken(invalidDefaultAppCheckToken);
196+
197+
defaultFirebaseAppCheck.addAppCheckListener(mockAppCheckListener);
198+
199+
verify(mockAppCheckListener, never()).onAppCheckTokenChanged(any());
200+
}
201+
134202
@Test
135203
public void testGetToken_noFactoryInstalled_returnResultWithError() throws Exception {
136204
Task<AppCheckTokenResult> tokenTask =
@@ -141,6 +209,14 @@ public void testGetToken_noFactoryInstalled_returnResultWithError() throws Excep
141209
assertThat(tokenTask.getResult().getError()).isNotNull();
142210
}
143211

212+
@Test
213+
public void testGetAppCheckToken_noFactoryInstalled_taskFails() throws Exception {
214+
Task<AppCheckToken> tokenTask =
215+
defaultFirebaseAppCheck.getAppCheckToken(/* forceRefresh= */ false);
216+
assertThat(tokenTask.isComplete()).isTrue();
217+
assertThat(tokenTask.isSuccessful()).isFalse();
218+
}
219+
144220
@Test
145221
public void testGetToken_factoryInstalled_proxiesToAppCheckFactory() {
146222
defaultFirebaseAppCheck.installAppCheckProviderFactory(mockAppCheckProviderFactory);
@@ -150,6 +226,15 @@ public void testGetToken_factoryInstalled_proxiesToAppCheckFactory() {
150226
verify(mockAppCheckProvider).getToken();
151227
}
152228

229+
@Test
230+
public void testGetAppCheckToken_factoryInstalled_proxiesToAppCheckFactory() {
231+
defaultFirebaseAppCheck.installAppCheckProviderFactory(mockAppCheckProviderFactory);
232+
233+
defaultFirebaseAppCheck.getAppCheckToken(/* forceRefresh= */ false);
234+
235+
verify(mockAppCheckProvider).getToken();
236+
}
237+
153238
@Test
154239
public void testGetInstalledAppCheckProviderFactory_noFactoryInstalled_returnsNull() {
155240
assertThat(defaultFirebaseAppCheck.getInstalledAppCheckProviderFactory()).isNull();
@@ -167,6 +252,7 @@ public void testGetInstalledAppCheckProviderFactory_factoryInstalled_returnsFact
167252
public void testGetToken_factoryInstalledAndListenerRegistered_triggersListenerOnSuccess() {
168253
defaultFirebaseAppCheck.installAppCheckProviderFactory(mockAppCheckProviderFactory);
169254
defaultFirebaseAppCheck.addAppCheckTokenListener(mockAppCheckTokenListener);
255+
defaultFirebaseAppCheck.addAppCheckListener(mockAppCheckListener);
170256

171257
defaultFirebaseAppCheck.getToken(/* forceRefresh= */ false);
172258

@@ -176,12 +262,17 @@ public void testGetToken_factoryInstalledAndListenerRegistered_triggersListenerO
176262
verify(mockAppCheckTokenListener).onAppCheckTokenChanged(tokenResultCaptor.capture());
177263
assertThat(tokenResultCaptor.getValue().getToken()).isEqualTo(TOKEN_PAYLOAD);
178264
assertThat(tokenResultCaptor.getValue().getError()).isNull();
265+
ArgumentCaptor<DefaultAppCheckToken> tokenCaptor =
266+
ArgumentCaptor.forClass(DefaultAppCheckToken.class);
267+
verify(mockAppCheckListener).onAppCheckTokenChanged(tokenCaptor.capture());
268+
assertThat(tokenCaptor.getValue()).isEqualTo(validDefaultAppCheckToken);
179269
}
180270

181271
@Test
182272
public void testGetToken_factoryInstalledAndListenerRegistered_doesNotTriggerListenerOnFailure() {
183273
defaultFirebaseAppCheck.installAppCheckProviderFactory(mockAppCheckProviderFactory);
184274
defaultFirebaseAppCheck.addAppCheckTokenListener(mockAppCheckTokenListener);
275+
defaultFirebaseAppCheck.addAppCheckListener(mockAppCheckListener);
185276

186277
when(mockAppCheckProvider.getToken())
187278
.thenReturn(Tasks.forException(new Exception(EXCEPTION_TEXT)));
@@ -190,30 +281,45 @@ public void testGetToken_factoryInstalledAndListenerRegistered_doesNotTriggerLis
190281

191282
verify(mockAppCheckProvider).getToken();
192283
verify(mockAppCheckTokenListener, never()).onAppCheckTokenChanged(any());
284+
verify(mockAppCheckListener, never()).onAppCheckTokenChanged(any());
193285
}
194286

195287
@Test
196-
public void testGetToken_existingValidToken_triggersListenerUponAdding() {
197-
defaultFirebaseAppCheck.setCachedToken(validDefaultAppCheckToken);
198-
288+
public void
289+
testGetAppCheckToken_factoryInstalledAndListenerRegistered_triggersListenerOnSuccess() {
290+
defaultFirebaseAppCheck.installAppCheckProviderFactory(mockAppCheckProviderFactory);
199291
defaultFirebaseAppCheck.addAppCheckTokenListener(mockAppCheckTokenListener);
292+
defaultFirebaseAppCheck.addAppCheckListener(mockAppCheckListener);
200293

294+
defaultFirebaseAppCheck.getAppCheckToken(/* forceRefresh= */ false);
295+
296+
verify(mockAppCheckProvider).getToken();
201297
ArgumentCaptor<DefaultAppCheckTokenResult> tokenResultCaptor =
202298
ArgumentCaptor.forClass(DefaultAppCheckTokenResult.class);
203299
verify(mockAppCheckTokenListener).onAppCheckTokenChanged(tokenResultCaptor.capture());
204300
assertThat(tokenResultCaptor.getValue().getToken()).isEqualTo(TOKEN_PAYLOAD);
205301
assertThat(tokenResultCaptor.getValue().getError()).isNull();
302+
ArgumentCaptor<DefaultAppCheckToken> tokenCaptor =
303+
ArgumentCaptor.forClass(DefaultAppCheckToken.class);
304+
verify(mockAppCheckListener).onAppCheckTokenChanged(tokenCaptor.capture());
305+
assertThat(tokenCaptor.getValue()).isEqualTo(validDefaultAppCheckToken);
206306
}
207307

208308
@Test
209-
public void testGetToken_existingInvalidToken_doesNotTriggerListenerUponAdding() {
210-
DefaultAppCheckToken invalidDefaultAppCheckToken =
211-
new DefaultAppCheckToken(TOKEN_PAYLOAD, EXPIRES_NOW);
212-
defaultFirebaseAppCheck.setCachedToken(invalidDefaultAppCheckToken);
213-
309+
public void
310+
testGetAppCheckToken_factoryInstalledAndListenerRegistered_doesNotTriggerListenerOnFailure() {
311+
defaultFirebaseAppCheck.installAppCheckProviderFactory(mockAppCheckProviderFactory);
214312
defaultFirebaseAppCheck.addAppCheckTokenListener(mockAppCheckTokenListener);
313+
defaultFirebaseAppCheck.addAppCheckListener(mockAppCheckListener);
215314

315+
when(mockAppCheckProvider.getToken())
316+
.thenReturn(Tasks.forException(new Exception(EXCEPTION_TEXT)));
317+
318+
defaultFirebaseAppCheck.getAppCheckToken(/* forceRefresh= */ false);
319+
320+
verify(mockAppCheckProvider).getToken();
216321
verify(mockAppCheckTokenListener, never()).onAppCheckTokenChanged(any());
322+
verify(mockAppCheckListener, never()).onAppCheckTokenChanged(any());
217323
}
218324

219325
@Test
@@ -247,4 +353,36 @@ public void testGetToken_existingInvalidToken_requestsNewToken() {
247353

248354
verify(mockAppCheckProvider).getToken();
249355
}
356+
357+
@Test
358+
public void testGetAppCheckToken_existingValidToken_doesNotRequestNewToken() {
359+
defaultFirebaseAppCheck.setCachedToken(validDefaultAppCheckToken);
360+
defaultFirebaseAppCheck.installAppCheckProviderFactory(mockAppCheckProviderFactory);
361+
362+
defaultFirebaseAppCheck.getAppCheckToken(/* forceRefresh= */ false);
363+
364+
verify(mockAppCheckProvider, never()).getToken();
365+
}
366+
367+
@Test
368+
public void testGetAppCheckToken_existingValidToken_forceRefresh_requestsNewToken() {
369+
defaultFirebaseAppCheck.setCachedToken(validDefaultAppCheckToken);
370+
defaultFirebaseAppCheck.installAppCheckProviderFactory(mockAppCheckProviderFactory);
371+
372+
defaultFirebaseAppCheck.getAppCheckToken(/* forceRefresh= */ true);
373+
374+
verify(mockAppCheckProvider).getToken();
375+
}
376+
377+
@Test
378+
public void testGetAppCheckToken_existingInvalidToken_requestsNewToken() {
379+
DefaultAppCheckToken invalidDefaultAppCheckToken =
380+
new DefaultAppCheckToken(TOKEN_PAYLOAD, EXPIRES_NOW);
381+
defaultFirebaseAppCheck.setCachedToken(invalidDefaultAppCheckToken);
382+
defaultFirebaseAppCheck.installAppCheckProviderFactory(mockAppCheckProviderFactory);
383+
384+
defaultFirebaseAppCheck.getAppCheckToken(/* forceRefresh= */ false);
385+
386+
verify(mockAppCheckProvider).getToken();
387+
}
250388
}

appcheck/firebase-appcheck/test-app/src/main/java/com/googletest/firebase/appcheck/MainActivity.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.google.firebase.FirebaseApp;
2929
import com.google.firebase.appcheck.AppCheckToken;
3030
import com.google.firebase.appcheck.FirebaseAppCheck;
31+
import com.google.firebase.appcheck.FirebaseAppCheck.AppCheckListener;
3132
import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory;
3233
import com.google.firebase.appcheck.safetynet.SafetyNetAppCheckProviderFactory;
3334
import com.google.firebase.storage.FirebaseStorage;
@@ -40,6 +41,7 @@ public class MainActivity extends AppCompatActivity {
4041

4142
private FirebaseAppCheck firebaseAppCheck;
4243
private FirebaseStorage firebaseStorage;
44+
private AppCheckListener appCheckListener;
4345
private Button installSafetyNetButton;
4446
private Button installDebugButton;
4547
private Button getAppCheckTokenButton;
@@ -54,10 +56,27 @@ protected void onCreate(Bundle savedInstanceState) {
5456
initViews();
5557
}
5658

59+
@Override
60+
protected void onDestroy() {
61+
super.onDestroy();
62+
63+
firebaseAppCheck.removeAppCheckListener(appCheckListener);
64+
}
65+
5766
private void initFirebase() {
5867
FirebaseApp.initializeApp(this);
5968
firebaseAppCheck = FirebaseAppCheck.getInstance();
6069
firebaseStorage = FirebaseStorage.getInstance();
70+
71+
appCheckListener =
72+
new AppCheckListener() {
73+
@Override
74+
public void onAppCheckTokenChanged(@NonNull AppCheckToken token) {
75+
Log.d(TAG, "onAppCheckTokenChanged");
76+
}
77+
};
78+
79+
firebaseAppCheck.addAppCheckListener(appCheckListener);
6180
}
6281

6382
private void initViews() {

0 commit comments

Comments
 (0)