Skip to content

Commit 5fc39cd

Browse files
committed
Fix PlayIntegrityAppCheckProviderTests.
1 parent 4847c42 commit 5fc39cd

File tree

2 files changed

+71
-16
lines changed

2 files changed

+71
-16
lines changed

appcheck/firebase-appcheck-playintegrity/src/main/java/com/google/firebase/appcheck/playintegrity/internal/PlayIntegrityAppCheckProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public Task<AppCheckToken> then(@NonNull Task<AppCheckTokenResponse> task) {
103103
}
104104

105105
@NonNull
106-
Task<IntegrityTokenResponse> getPlayIntegrityAttestation() {
106+
private Task<IntegrityTokenResponse> getPlayIntegrityAttestation() {
107107
GeneratePlayIntegrityChallengeRequest generateChallengeRequest =
108108
new GeneratePlayIntegrityChallengeRequest();
109109
Task<GeneratePlayIntegrityChallengeResponse> generateChallengeTask =

appcheck/firebase-appcheck-playintegrity/src/test/java/com/google/firebase/appcheck/playintegrity/internal/PlayIntegrityAppCheckProviderTest.java

Lines changed: 70 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@
2222
import static org.mockito.Mockito.when;
2323

2424
import com.google.android.gms.tasks.Task;
25+
import com.google.android.gms.tasks.Tasks;
26+
import com.google.android.play.core.integrity.IntegrityManager;
27+
import com.google.android.play.core.integrity.IntegrityTokenRequest;
28+
import com.google.android.play.core.integrity.IntegrityTokenResponse;
2529
import com.google.common.util.concurrent.MoreExecutors;
2630
import com.google.firebase.appcheck.AppCheckToken;
2731
import com.google.firebase.appcheck.internal.AppCheckTokenResponse;
@@ -33,6 +37,8 @@
3337
import org.junit.Before;
3438
import org.junit.Test;
3539
import org.junit.runner.RunWith;
40+
import org.mockito.ArgumentCaptor;
41+
import org.mockito.Captor;
3642
import org.mockito.Mock;
3743
import org.mockito.MockitoAnnotations;
3844
import org.robolectric.RobolectricTestRunner;
@@ -43,17 +49,31 @@
4349
@Config(manifest = Config.NONE)
4450
public class PlayIntegrityAppCheckProviderTest {
4551

52+
private static final String PROJECT_NUMBER = "123456";
4653
private static final String ATTESTATION_TOKEN = "token";
4754
private static final String TIME_TO_LIVE = "3600s";
55+
private static final String CHALLENGE = "testChallenge";
56+
private static final String CHALLENGE_JSON_RESPONSE =
57+
"{\"challenge\":\"" + CHALLENGE + "\",\"ttl\":\"3600s\"}";
58+
private static final String INTEGRITY_TOKEN = "integrityToken";
4859

49-
private ExecutorService backgroundExecutor = MoreExecutors.newDirectExecutorService();
60+
@Mock private IntegrityManager mockIntegrityManager;
5061
@Mock private NetworkClient mockNetworkClient;
5162
@Mock private RetryManager mockRetryManager;
63+
@Mock private IntegrityTokenResponse mockIntegrityTokenResponse;
5264
@Mock private AppCheckTokenResponse mockAppCheckTokenResponse;
5365

66+
@Captor private ArgumentCaptor<IntegrityTokenRequest> integrityTokenRequestCaptor;
67+
@Captor private ArgumentCaptor<byte[]> exchangePlayIntegrityTokenRequestCaptor;
68+
69+
private ExecutorService backgroundExecutor = MoreExecutors.newDirectExecutorService();
70+
5471
@Before
5572
public void setup() {
5673
MockitoAnnotations.initMocks(this);
74+
when(mockIntegrityTokenResponse.token()).thenReturn(INTEGRITY_TOKEN);
75+
when(mockAppCheckTokenResponse.getAttestationToken()).thenReturn(ATTESTATION_TOKEN);
76+
when(mockAppCheckTokenResponse.getTimeToLive()).thenReturn(TIME_TO_LIVE);
5777
}
5878

5979
@Test
@@ -67,41 +87,76 @@ public void testPublicConstructor_nullFirebaseApp_expectThrows() {
6787

6888
@Test
6989
public void getToken_onSuccess_setsTaskResult() throws Exception {
90+
when(mockNetworkClient.generatePlayIntegrityChallenge(any(), eq(mockRetryManager)))
91+
.thenReturn(CHALLENGE_JSON_RESPONSE);
92+
when(mockIntegrityManager.requestIntegrityToken(any()))
93+
.thenReturn(Tasks.forResult(mockIntegrityTokenResponse));
7094
when(mockNetworkClient.exchangeAttestationForAppCheckToken(
7195
any(), eq(NetworkClient.PLAY_INTEGRITY), eq(mockRetryManager)))
7296
.thenReturn(mockAppCheckTokenResponse);
73-
when(mockAppCheckTokenResponse.getAttestationToken()).thenReturn(ATTESTATION_TOKEN);
74-
when(mockAppCheckTokenResponse.getTimeToLive()).thenReturn(TIME_TO_LIVE);
7597

7698
PlayIntegrityAppCheckProvider provider =
77-
new PlayIntegrityAppCheckProvider(mockNetworkClient, backgroundExecutor, mockRetryManager);
99+
new PlayIntegrityAppCheckProvider(
100+
PROJECT_NUMBER,
101+
mockIntegrityManager,
102+
mockNetworkClient,
103+
backgroundExecutor,
104+
mockRetryManager);
78105
Task<AppCheckToken> task = provider.getToken();
79106

80-
verify(mockNetworkClient)
81-
.exchangeAttestationForAppCheckToken(
82-
any(), eq(NetworkClient.PLAY_INTEGRITY), eq(mockRetryManager));
83-
84107
AppCheckToken token = task.getResult();
85108
assertThat(token).isInstanceOf(DefaultAppCheckToken.class);
86109
assertThat(token.getToken()).isEqualTo(ATTESTATION_TOKEN);
110+
111+
verify(mockIntegrityManager).requestIntegrityToken(integrityTokenRequestCaptor.capture());
112+
assertThat(integrityTokenRequestCaptor.getValue().cloudProjectNumber())
113+
.isEqualTo(Long.parseLong(PROJECT_NUMBER));
114+
assertThat(integrityTokenRequestCaptor.getValue().nonce()).isEqualTo(CHALLENGE);
115+
116+
verify(mockNetworkClient)
117+
.exchangeAttestationForAppCheckToken(
118+
exchangePlayIntegrityTokenRequestCaptor.capture(),
119+
eq(NetworkClient.PLAY_INTEGRITY),
120+
eq(mockRetryManager));
121+
String exchangePlayIntegrityTokenRequestJsonString =
122+
new String(exchangePlayIntegrityTokenRequestCaptor.getValue());
123+
assertThat(exchangePlayIntegrityTokenRequestJsonString).contains(INTEGRITY_TOKEN);
87124
}
88125

89126
@Test
90-
public void getToken_onFailure_setsTaskException() throws Exception {
127+
public void getToken_tokenExchangeFailure_setsTaskException() throws Exception {
128+
when(mockNetworkClient.generatePlayIntegrityChallenge(any(), eq(mockRetryManager)))
129+
.thenReturn(CHALLENGE_JSON_RESPONSE);
130+
when(mockIntegrityManager.requestIntegrityToken(any()))
131+
.thenReturn(Tasks.forResult(mockIntegrityTokenResponse));
91132
when(mockNetworkClient.exchangeAttestationForAppCheckToken(
92133
any(), eq(NetworkClient.PLAY_INTEGRITY), eq(mockRetryManager)))
93134
.thenThrow(new IOException());
94135

95136
PlayIntegrityAppCheckProvider provider =
96-
new PlayIntegrityAppCheckProvider(mockNetworkClient, backgroundExecutor, mockRetryManager);
137+
new PlayIntegrityAppCheckProvider(
138+
PROJECT_NUMBER,
139+
mockIntegrityManager,
140+
mockNetworkClient,
141+
backgroundExecutor,
142+
mockRetryManager);
97143
Task<AppCheckToken> task = provider.getToken();
98144

145+
assertThat(task.isSuccessful()).isFalse();
146+
assertThat(task.getException()).isInstanceOf(IOException.class);
147+
148+
verify(mockIntegrityManager).requestIntegrityToken(integrityTokenRequestCaptor.capture());
149+
assertThat(integrityTokenRequestCaptor.getValue().cloudProjectNumber())
150+
.isEqualTo(Long.parseLong(PROJECT_NUMBER));
151+
assertThat(integrityTokenRequestCaptor.getValue().nonce()).isEqualTo(CHALLENGE);
152+
99153
verify(mockNetworkClient)
100154
.exchangeAttestationForAppCheckToken(
101-
any(), eq(NetworkClient.PLAY_INTEGRITY), eq(mockRetryManager));
102-
103-
assertThat(task.isSuccessful()).isFalse();
104-
Exception exception = task.getException();
105-
assertThat(exception).isInstanceOf(IOException.class);
155+
exchangePlayIntegrityTokenRequestCaptor.capture(),
156+
eq(NetworkClient.PLAY_INTEGRITY),
157+
eq(mockRetryManager));
158+
String exchangePlayIntegrityTokenRequestJsonString =
159+
new String(exchangePlayIntegrityTokenRequestCaptor.getValue());
160+
assertThat(exchangePlayIntegrityTokenRequestJsonString).contains(INTEGRITY_TOKEN);
106161
}
107162
}

0 commit comments

Comments
 (0)