@@ -185,7 +185,7 @@ - (void)testThatTokenOperationsAuthHeaderStringMatchesCheckin {
185
185
186
186
[FIRURLSessionOCMockStub
187
187
stubURLSessionDataTaskWithResponse: expectedResponse
188
- body: [self dataForResponseWithValidToken: YES ]
188
+ body: [self dataForResponseWithValidToken: @" " ]
189
189
error: nil
190
190
URLSessionMock: self .URLSessionMock
191
191
requestValidationBlock: ^BOOL (NSURLRequest *_Nonnull sentRequest) {
@@ -315,7 +315,7 @@ - (void)testThatOptionsDictionaryIsIncludedWithFetchRequest {
315
315
316
316
[FIRURLSessionOCMockStub
317
317
stubURLSessionDataTaskWithResponse: expectedResponse
318
- body: [self dataForResponseWithValidToken: YES ]
318
+ body: [self dataForResponseWithValidToken: @" " ]
319
319
error: nil
320
320
URLSessionMock: self .URLSessionMock
321
321
requestValidationBlock: ^BOOL (NSURLRequest *_Nonnull sentRequest) {
@@ -368,7 +368,7 @@ - (void)testServerResetCommand {
368
368
369
369
[FIRURLSessionOCMockStub
370
370
stubURLSessionDataTaskWithResponse: expectedResponse
371
- body: [self dataForResponseWithValidToken: NO ]
371
+ body: [self dataForResponseWithValidToken: @" RST " ]
372
372
error: nil
373
373
URLSessionMock: self .URLSessionMock
374
374
requestValidationBlock: ^BOOL (NSURLRequest *_Nonnull sentRequest) {
@@ -392,6 +392,55 @@ - (void)testServerResetCommand {
392
392
}];
393
393
}
394
394
395
+ - (void )testTooManyRegistrationsError {
396
+ XCTestExpectation *shouldResetIdentityExpectation =
397
+ [self expectationWithDescription: @" When server returns TOO_MANY_REGISTRATIONS, the client "
398
+ @" should report the failure reason." ];
399
+ int64_t tenHoursAgo = FIRMessagingCurrentTimestampInMilliseconds () - 10 * 60 * 60 * 1000 ;
400
+ FIRMessagingCheckinPreferences *checkinPreferences =
401
+ [self setCheckinPreferencesWithLastCheckinTime: tenHoursAgo];
402
+
403
+ FIRMessagingTokenFetchOperation *operation = [[FIRMessagingTokenFetchOperation alloc ]
404
+ initWithAuthorizedEntity: kAuthorizedEntity
405
+ scope: kScope
406
+ options: nil
407
+ checkinPreferences: checkinPreferences
408
+ instanceID: self .instanceID
409
+ heartbeatLogger: [[FIRHeartbeatLoggerFake alloc ] init ]];
410
+ NSURL *expectedRequestURL = [NSURL URLWithString: FIRMessagingTokenRegisterServer ()];
411
+ NSHTTPURLResponse *expectedResponse = [[NSHTTPURLResponse alloc ] initWithURL: expectedRequestURL
412
+ statusCode: 200
413
+ HTTPVersion: @" HTTP/1.1"
414
+ headerFields: nil ];
415
+
416
+ [FIRURLSessionOCMockStub
417
+ stubURLSessionDataTaskWithResponse: expectedResponse
418
+ body: [self dataForResponseWithValidToken:
419
+ @" TOO_MANY_REGISTRATIONS" ]
420
+ error: nil
421
+ URLSessionMock: self .URLSessionMock
422
+ requestValidationBlock: ^BOOL (NSURLRequest *_Nonnull sentRequest) {
423
+ return YES ;
424
+ }];
425
+
426
+ [operation addCompletionHandler: ^(FIRMessagingTokenOperationResult result,
427
+ NSString *_Nullable token, NSError *_Nullable error) {
428
+ XCTAssertEqual (result, FIRMessagingTokenOperationError);
429
+ XCTAssertNotNil (error);
430
+ XCTAssertEqual (error.code , kFIRMessagingErrorCodeUnknown );
431
+ XCTAssertEqualObjects (error.localizedFailureReason , @" TOO_MANY_REGISTRATIONS" );
432
+
433
+ [shouldResetIdentityExpectation fulfill ];
434
+ }];
435
+
436
+ [operation start ];
437
+
438
+ [self waitForExpectationsWithTimeout: 0.25
439
+ handler: ^(NSError *_Nullable error) {
440
+ XCTAssertNil (error.localizedDescription );
441
+ }];
442
+ }
443
+
395
444
- (void )testHTTPAuthHeaderGenerationFromCheckin {
396
445
FIRMessagingCheckinPreferences *checkinPreferences =
397
446
[[FIRMessagingCheckinPreferences alloc ] initWithDeviceID: kDeviceID secretToken: kSecretToken ];
@@ -447,7 +496,7 @@ - (void)assertTokenFetchOperationRequestContainsFirebaseUserAgentAndHeartbeatInf
447
496
448
497
[FIRURLSessionOCMockStub
449
498
stubURLSessionDataTaskWithResponse: expectedResponse
450
- body: [self dataForResponseWithValidToken: NO ]
499
+ body: [self dataForResponseWithValidToken: @" RST " ]
451
500
error: nil
452
501
URLSessionMock: self .URLSessionMock
453
502
requestValidationBlock: ^BOOL (NSURLRequest *_Nonnull sentRequest) {
@@ -471,12 +520,12 @@ - (void)assertTokenFetchOperationRequestContainsFirebaseUserAgentAndHeartbeatInf
471
520
}];
472
521
}
473
522
474
- - (NSData *)dataForResponseWithValidToken : (BOOL ) validToken {
523
+ - (NSData *)dataForResponseWithValidToken : (NSString *) errorCode {
475
524
NSString *response;
476
- if (validToken ) {
525
+ if (errorCode. length == 0 ) {
477
526
response = [NSString stringWithFormat: @" token=%@ " , kRegistrationToken ];
478
527
} else {
479
- response = @" Error=RST " ;
528
+ response = [ NSString stringWithFormat: @" Error=%@ " , errorCode] ;
480
529
}
481
530
return [response dataUsingEncoding: NSUTF8StringEncoding];
482
531
}
0 commit comments