@@ -329,6 +329,89 @@ public void downloadService_badRequest() {
329
329
eq (HttpURLConnection .HTTP_BAD_REQUEST ));
330
330
}
331
331
332
+ @ Test
333
+ public void downloadService_forbidden () {
334
+ String downloadPath =
335
+ String .format (CustomModelDownloadService .DOWNLOAD_MODEL_REGEX , "" , PROJECT_ID , MODEL_NAME );
336
+ stubFor (
337
+ get (urlEqualTo (downloadPath ))
338
+ .withHeader (
339
+ CustomModelDownloadService .INSTALLATIONS_AUTH_TOKEN_HEADER ,
340
+ equalTo (INSTALLATION_TOKEN ))
341
+ .withHeader (
342
+ CustomModelDownloadService .CONTENT_TYPE ,
343
+ equalTo (CustomModelDownloadService .APPLICATION_JSON ))
344
+ .withHeader (CustomModelDownloadService .IF_NONE_MATCH_HEADER_KEY , equalTo (MODEL_HASH ))
345
+ .willReturn (
346
+ aResponse ()
347
+ .withStatus (HttpURLConnection .HTTP_FORBIDDEN )
348
+ .withBody (
349
+ "{\" status\" :\" PERMISSION_DENIED\" ,\" message\" :\" Request not valid\" }" )));
350
+
351
+ CustomModelDownloadService service =
352
+ new CustomModelDownloadService (
353
+ installationsApiMock , directExecutor , API_KEY , TEST_ENDPOINT , mockEventLogger );
354
+
355
+ Task <CustomModel > modelTask = service .getCustomModelDetails (PROJECT_ID , MODEL_NAME , MODEL_HASH );
356
+
357
+ Assert .assertTrue (modelTask .getException () instanceof FirebaseMlException );
358
+ Assert .assertEquals (
359
+ ((FirebaseMlException ) modelTask .getException ()).getCode (),
360
+ FirebaseMlException .PERMISSION_DENIED );
361
+
362
+ WireMock .verify (
363
+ getRequestedFor (urlEqualTo (downloadPath ))
364
+ .withHeader (
365
+ CustomModelDownloadService .INSTALLATIONS_AUTH_TOKEN_HEADER ,
366
+ equalTo (INSTALLATION_TOKEN )));
367
+ verify (mockEventLogger , times (1 ))
368
+ .logModelInfoRetrieverFailure (
369
+ any (),
370
+ eq (ErrorCode .MODEL_INFO_DOWNLOAD_UNSUCCESSFUL_HTTP_STATUS ),
371
+ eq (HttpURLConnection .HTTP_FORBIDDEN ));
372
+ }
373
+
374
+ @ Test
375
+ public void downloadService_internalError () {
376
+ String downloadPath =
377
+ String .format (CustomModelDownloadService .DOWNLOAD_MODEL_REGEX , "" , PROJECT_ID , MODEL_NAME );
378
+ stubFor (
379
+ get (urlEqualTo (downloadPath ))
380
+ .withHeader (
381
+ CustomModelDownloadService .INSTALLATIONS_AUTH_TOKEN_HEADER ,
382
+ equalTo (INSTALLATION_TOKEN ))
383
+ .withHeader (
384
+ CustomModelDownloadService .CONTENT_TYPE ,
385
+ equalTo (CustomModelDownloadService .APPLICATION_JSON ))
386
+ .withHeader (CustomModelDownloadService .IF_NONE_MATCH_HEADER_KEY , equalTo (MODEL_HASH ))
387
+ .willReturn (
388
+ aResponse ()
389
+ .withStatus (HttpURLConnection .HTTP_INTERNAL_ERROR )
390
+ .withBody (
391
+ "{\" status\" :\" INTERNAL\" ,\" message\" :\" Request cannot reach server\" }" )));
392
+
393
+ CustomModelDownloadService service =
394
+ new CustomModelDownloadService (
395
+ installationsApiMock , directExecutor , API_KEY , TEST_ENDPOINT , mockEventLogger );
396
+
397
+ Task <CustomModel > modelTask = service .getCustomModelDetails (PROJECT_ID , MODEL_NAME , MODEL_HASH );
398
+
399
+ Assert .assertTrue (modelTask .getException () instanceof FirebaseMlException );
400
+ Assert .assertEquals (
401
+ ((FirebaseMlException ) modelTask .getException ()).getCode (), FirebaseMlException .INTERNAL );
402
+
403
+ WireMock .verify (
404
+ getRequestedFor (urlEqualTo (downloadPath ))
405
+ .withHeader (
406
+ CustomModelDownloadService .INSTALLATIONS_AUTH_TOKEN_HEADER ,
407
+ equalTo (INSTALLATION_TOKEN )));
408
+ verify (mockEventLogger , times (1 ))
409
+ .logModelInfoRetrieverFailure (
410
+ any (),
411
+ eq (ErrorCode .MODEL_INFO_DOWNLOAD_UNSUCCESSFUL_HTTP_STATUS ),
412
+ eq (HttpURLConnection .HTTP_INTERNAL_ERROR ));
413
+ }
414
+
332
415
@ Test
333
416
public void downloadService_tooManyRequest () {
334
417
String downloadPath =
@@ -357,7 +440,7 @@ public void downloadService_tooManyRequest() {
357
440
Assert .assertTrue (modelTask .getException () instanceof FirebaseMlException );
358
441
Assert .assertEquals (
359
442
((FirebaseMlException ) modelTask .getException ()).getCode (),
360
- FirebaseMlException .INVALID_ARGUMENT );
443
+ FirebaseMlException .RESOURCE_EXHAUSTED );
361
444
362
445
WireMock .verify (
363
446
getRequestedFor (urlEqualTo (downloadPath ))
@@ -396,7 +479,8 @@ public void downloadService_authenticationIssue() {
396
479
397
480
Assert .assertTrue (modelTask .getException () instanceof FirebaseMlException );
398
481
Assert .assertEquals (
399
- ((FirebaseMlException ) modelTask .getException ()).getCode (), FirebaseMlException .INTERNAL );
482
+ ((FirebaseMlException ) modelTask .getException ()).getCode (),
483
+ FirebaseMlException .PERMISSION_DENIED );
400
484
Assert .assertTrue (
401
485
modelTask
402
486
.getException ()
0 commit comments