19
19
using System . Net . Http . Headers ;
20
20
using System . Threading . Tasks ;
21
21
using FirebaseAdmin . Tests ;
22
+ using FirebaseAdmin . Util ;
22
23
using Google . Apis . Auth . OAuth2 ;
23
24
using Google . Apis . Http ;
24
25
using Newtonsoft . Json ;
@@ -40,27 +41,42 @@ public class FirebaseMessagingClientTest
40
41
[ Fact ]
41
42
public void NoProjectId ( )
42
43
{
43
- var clientFactory = new HttpClientFactory ( ) ;
44
- Assert . Throws < ArgumentException > (
45
- ( ) => new FirebaseMessagingClient ( clientFactory , MockCredential , null ) ) ;
46
- Assert . Throws < ArgumentException > (
47
- ( ) => new FirebaseMessagingClient ( clientFactory , MockCredential , string . Empty ) ) ;
44
+ var args = new FirebaseMessagingClient . Args ( )
45
+ {
46
+ ClientFactory = new HttpClientFactory ( ) ,
47
+ Credential = null ,
48
+ } ;
49
+
50
+ args . ProjectId = null ;
51
+ Assert . Throws < ArgumentException > ( ( ) => new FirebaseMessagingClient ( args ) ) ;
52
+
53
+ args . ProjectId = string . Empty ;
54
+ Assert . Throws < ArgumentException > ( ( ) => new FirebaseMessagingClient ( args ) ) ;
48
55
}
49
56
50
57
[ Fact ]
51
58
public void NoCredential ( )
52
59
{
53
- var clientFactory = new HttpClientFactory ( ) ;
54
- Assert . Throws < ArgumentNullException > (
55
- ( ) => new FirebaseMessagingClient ( clientFactory , null , "test-project" ) ) ;
60
+ var args = new FirebaseMessagingClient . Args ( )
61
+ {
62
+ ClientFactory = new HttpClientFactory ( ) ,
63
+ Credential = null ,
64
+ ProjectId = "test-project" ,
65
+ } ;
66
+ Assert . Throws < ArgumentNullException > ( ( ) => new FirebaseMessagingClient ( args ) ) ;
56
67
}
57
68
58
69
[ Fact ]
59
70
public void NoClientFactory ( )
60
71
{
61
72
var clientFactory = new HttpClientFactory ( ) ;
62
- Assert . Throws < ArgumentNullException > (
63
- ( ) => new FirebaseMessagingClient ( null , MockCredential , "test-project" ) ) ;
73
+ var args = new FirebaseMessagingClient . Args ( )
74
+ {
75
+ ClientFactory = null ,
76
+ Credential = MockCredential ,
77
+ ProjectId = "test-project" ,
78
+ } ;
79
+ Assert . Throws < ArgumentNullException > ( ( ) => new FirebaseMessagingClient ( args ) ) ;
64
80
}
65
81
66
82
[ Fact ]
@@ -74,7 +90,7 @@ public async Task SendAsync()
74
90
} ,
75
91
} ;
76
92
var factory = new MockHttpClientFactory ( handler ) ;
77
- var client = new FirebaseMessagingClient ( factory , MockCredential , "test-project" ) ;
93
+ var client = this . CreateMessagingClient ( factory ) ;
78
94
var message = new Message ( )
79
95
{
80
96
Topic = "test-topic" ,
@@ -101,7 +117,7 @@ public async Task SendDryRunAsync()
101
117
} ,
102
118
} ;
103
119
var factory = new MockHttpClientFactory ( handler ) ;
104
- var client = new FirebaseMessagingClient ( factory , MockCredential , "test-project" ) ;
120
+ var client = this . CreateMessagingClient ( factory ) ;
105
121
var message = new Message ( )
106
122
{
107
123
Topic = "test-topic" ,
@@ -161,7 +177,7 @@ public async Task SendAllAsync()
161
177
} ,
162
178
} ;
163
179
var factory = new MockHttpClientFactory ( handler ) ;
164
- var client = new FirebaseMessagingClient ( factory , MockCredential , "test-project" ) ;
180
+ var client = this . CreateMessagingClient ( factory ) ;
165
181
var message1 = new Message ( )
166
182
{
167
183
Token = "test-token1" ,
@@ -236,7 +252,7 @@ public async Task SendAllAsyncWithError()
236
252
} ,
237
253
} ;
238
254
var factory = new MockHttpClientFactory ( handler ) ;
239
- var client = new FirebaseMessagingClient ( factory , MockCredential , "test-project" ) ;
255
+ var client = this . CreateMessagingClient ( factory ) ;
240
256
var message1 = new Message ( )
241
257
{
242
258
Token = "test-token1" ,
@@ -309,7 +325,12 @@ public async Task SendAllAsyncWithErrorNoDetail()
309
325
} ,
310
326
} ;
311
327
var factory = new MockHttpClientFactory ( handler ) ;
312
- var client = new FirebaseMessagingClient ( factory , MockCredential , "test-project" ) ;
328
+ var client = new FirebaseMessagingClient ( new FirebaseMessagingClient . Args ( )
329
+ {
330
+ ClientFactory = factory ,
331
+ Credential = MockCredential ,
332
+ ProjectId = "test-project" ,
333
+ } ) ;
313
334
var message1 = new Message ( )
314
335
{
315
336
Token = "test-token1" ,
@@ -341,7 +362,7 @@ public async Task SendAllAsyncWithErrorNoDetail()
341
362
public async Task SendAllAsyncNullList ( )
342
363
{
343
364
var factory = new MockHttpClientFactory ( new MockMessageHandler ( ) ) ;
344
- var client = new FirebaseMessagingClient ( factory , MockCredential , "test-project" ) ;
365
+ var client = this . CreateMessagingClient ( factory ) ;
345
366
346
367
await Assert . ThrowsAsync < ArgumentNullException > ( ( ) => client . SendAllAsync ( null ) ) ;
347
368
}
@@ -350,15 +371,15 @@ public async Task SendAllAsyncNullList()
350
371
public async Task SendAllAsyncWithNoMessages ( )
351
372
{
352
373
var factory = new MockHttpClientFactory ( new MockMessageHandler ( ) ) ;
353
- var client = new FirebaseMessagingClient ( factory , MockCredential , "test-project" ) ;
374
+ var client = this . CreateMessagingClient ( factory ) ;
354
375
await Assert . ThrowsAsync < ArgumentException > ( ( ) => client . SendAllAsync ( Enumerable . Empty < Message > ( ) ) ) ;
355
376
}
356
377
357
378
[ Fact ]
358
379
public async Task SendAllAsyncWithTooManyMessages ( )
359
380
{
360
381
var factory = new MockHttpClientFactory ( new MockMessageHandler ( ) ) ;
361
- var client = new FirebaseMessagingClient ( factory , MockCredential , "test-project" ) ;
382
+ var client = this . CreateMessagingClient ( factory ) ;
362
383
var messages = Enumerable . Range ( 0 , 101 ) . Select ( _ => new Message { Topic = "test-topic" } ) ;
363
384
await Assert . ThrowsAsync < ArgumentException > ( ( ) => client . SendAllAsync ( messages ) ) ;
364
385
}
@@ -383,7 +404,7 @@ public async Task HttpErrorAsync()
383
404
}" ,
384
405
} ;
385
406
var factory = new MockHttpClientFactory ( handler ) ;
386
- var client = new FirebaseMessagingClient ( factory , MockCredential , "test-project" ) ;
407
+ var client = this . CreateMessagingClient ( factory ) ;
387
408
var message = new Message ( )
388
409
{
389
410
Topic = "test-topic" ,
@@ -418,7 +439,7 @@ public async Task HttpErrorNoDetailAsync()
418
439
}" ,
419
440
} ;
420
441
var factory = new MockHttpClientFactory ( handler ) ;
421
- var client = new FirebaseMessagingClient ( factory , MockCredential , "test-project" ) ;
442
+ var client = this . CreateMessagingClient ( factory ) ;
422
443
var message = new Message ( )
423
444
{
424
445
Topic = "test-topic" ,
@@ -448,7 +469,7 @@ public async Task HttpErrorNonJsonAsync()
448
469
Response = "not json" ,
449
470
} ;
450
471
var factory = new MockHttpClientFactory ( handler ) ;
451
- var client = new FirebaseMessagingClient ( factory , MockCredential , "test-project" ) ;
472
+ var client = this . CreateMessagingClient ( factory ) ;
452
473
var message = new Message ( )
453
474
{
454
475
Topic = "test-topic" ,
@@ -471,6 +492,32 @@ public async Task HttpErrorNonJsonAsync()
471
492
Assert . Equal ( 1 , handler . Calls ) ;
472
493
}
473
494
495
+ [ Fact ]
496
+ public async Task Unavailable ( )
497
+ {
498
+ var handler = new MockMessageHandler ( )
499
+ {
500
+ StatusCode = HttpStatusCode . ServiceUnavailable ,
501
+ Response = "ServiceUnavailable" ,
502
+ } ;
503
+ var factory = new MockHttpClientFactory ( handler ) ;
504
+ var client = this . CreateMessagingClient ( factory ) ;
505
+ var message = new Message ( )
506
+ {
507
+ Topic = "test-topic" ,
508
+ } ;
509
+
510
+ var ex = await Assert . ThrowsAsync < FirebaseMessagingException > (
511
+ async ( ) => await client . SendAsync ( message ) ) ;
512
+
513
+ Assert . Equal ( ErrorCode . Unavailable , ex . ErrorCode ) ;
514
+ Assert . Equal ( "Unexpected HTTP response with status: 503 (ServiceUnavailable)\n ServiceUnavailable" , ex . Message ) ;
515
+ Assert . Null ( ex . MessagingErrorCode ) ;
516
+ Assert . NotNull ( ex . HttpResponse ) ;
517
+ Assert . Null ( ex . InnerException ) ;
518
+ Assert . Equal ( 5 , handler . Calls ) ;
519
+ }
520
+
474
521
[ Fact ]
475
522
public async Task TransportError ( )
476
523
{
@@ -479,7 +526,7 @@ public async Task TransportError()
479
526
Exception = new HttpRequestException ( "Transport error" ) ,
480
527
} ;
481
528
var factory = new MockHttpClientFactory ( handler ) ;
482
- var client = new FirebaseMessagingClient ( factory , MockCredential , "test-project" ) ;
529
+ var client = this . CreateMessagingClient ( factory ) ;
483
530
var message = new Message ( )
484
531
{
485
532
Topic = "test-topic" ,
@@ -500,7 +547,18 @@ public async Task TransportError()
500
547
handler . LastRequestBody ) ;
501
548
Assert . Equal ( "test-topic" , req . Message . Topic ) ;
502
549
Assert . False ( req . ValidateOnly ) ;
503
- Assert . Equal ( 1 , handler . Calls ) ;
550
+ Assert . Equal ( 5 , handler . Calls ) ;
551
+ }
552
+
553
+ private FirebaseMessagingClient CreateMessagingClient ( HttpClientFactory factory )
554
+ {
555
+ return new FirebaseMessagingClient ( new FirebaseMessagingClient . Args ( )
556
+ {
557
+ ClientFactory = factory ,
558
+ Credential = MockCredential ,
559
+ ProjectId = "test-project" ,
560
+ RetryOptions = RetryOptions . NoBackOff ,
561
+ } ) ;
504
562
}
505
563
506
564
private void CheckHeaders ( HttpRequestHeaders header )
0 commit comments