@@ -209,6 +209,36 @@ public void testVerifyToken_WithConsumeOption_CallsBackend() throws Exception {
209209 assertTrue (response .isAlreadyConsumed ().get ());
210210 }
211211
212+ @ Test
213+ public void testVerifyToken_WithConsumeOption_EmptyBackendResponse_DoesNotThrow ()
214+ throws Exception {
215+ when (mockJwtProcessor .process (any (SignedJWT .class ), any ())).thenReturn (claims );
216+
217+ MockLowLevelHttpResponse mockResponse = new MockLowLevelHttpResponse ();
218+ mockResponse .setStatusCode (204 );
219+ mockResponse .setContent ("" );
220+
221+ MockHttpTransport transport =
222+ new MockHttpTransport .Builder ().setLowLevelHttpResponse (mockResponse ).build ();
223+
224+ HttpRequestFactory mockRequestFactory = transport .createRequestFactory ();
225+ JsonFactory jsonFactory = ApiClientUtils .getDefaultJsonFactory ();
226+
227+ FirebaseApp app = FirebaseApp .getInstance ();
228+ AppCheckTokenVerifier customVerifier =
229+ new AppCheckTokenVerifier (app , mockRequestFactory , jsonFactory , mockJwtProcessor );
230+
231+ String token = createToken (header , claims );
232+ VerifyAppCheckTokenOptions options =
233+ VerifyAppCheckTokenOptions .builder ().setConsume (true ).build ();
234+ VerifyAppCheckTokenResponse response = customVerifier .verifyToken (token , options );
235+
236+ assertNotNull (response );
237+ assertEquals (APP_ID , response .getAppId ());
238+ assertTrue (response .isAlreadyConsumed ().isPresent ());
239+ assertFalse (response .isAlreadyConsumed ().get ());
240+ }
241+
212242 @ Test
213243 public void testVerifyToken_NullOrEmptyToken_ThrowsException () {
214244 IllegalArgumentException ex1 =
0 commit comments