mirror of
https://github.com/firebase/firebase-ios-sdk
synced 2026-11-09 22:36:01 +05:45
* `FIRInstallationsIIDTokenStore` introduced. `FIRInstallationsIIDCheckinStore` removed. * FIRInstallationsIIDTokenStoreTests * Run ./scripts/style.sh * FIRInstallationsIIDTokenStore implementation. * ./scripts/style.sh * Fix tvOS and macOS availability. * Rename IIDAuthToken -> IIDDefaultToken * FIRInstallationsIIDTokenStoreTests: fix flaky IID token removal * ./scripts/style.sh
149 lines
5.3 KiB
Objective-C
149 lines
5.3 KiB
Objective-C
/*
|
|
* Copyright 2019 Google
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#import <XCTest/XCTest.h>
|
|
|
|
#import "FBLPromise+Testing.h"
|
|
|
|
#import "FIRInstanceIDAuthKeychain.h"
|
|
#import "FIRInstanceIDBackupExcludedPlist.h"
|
|
#import "FIRInstanceIDCheckinPreferences+Internal.h"
|
|
#import "FIRInstanceIDStore.h"
|
|
#import "FIRInstanceIDTokenInfo.h"
|
|
#import "FIRInstanceIDTokenStore.h"
|
|
|
|
#import "FIRInstallationsIIDTokenStore.h"
|
|
|
|
static NSString *const kFakeCheckinPlistName = @"com.google.test.IIDStoreTestCheckin";
|
|
static NSString *const kSubDirectoryName = @"FIRInstallationsIIDCheckinStoreTests";
|
|
static NSString *const kIDTokenKeychainId = @"com.google.iid-tokens";
|
|
|
|
@interface FIRInstallationsIIDTokenStoreTests : XCTestCase
|
|
@property(nonatomic) FIRInstallationsIIDTokenStore *installationsIIDCheckinStore;
|
|
|
|
@property(nonatomic) FIRInstanceIDTokenStore *IIDTokenStore;
|
|
@property(nonatomic) FIRInstanceIDAuthKeychain *IIDKeychain;
|
|
|
|
@property(nonatomic) NSString *GCMSenderID;
|
|
@end
|
|
|
|
@implementation FIRInstallationsIIDTokenStoreTests
|
|
|
|
- (void)setUp {
|
|
self.GCMSenderID = @"GCMSenderID";
|
|
self.installationsIIDCheckinStore =
|
|
[[FIRInstallationsIIDTokenStore alloc] initWithGCMSenderID:self.GCMSenderID];
|
|
|
|
self.IIDKeychain = [[FIRInstanceIDAuthKeychain alloc] initWithIdentifier:kIDTokenKeychainId];
|
|
self.IIDTokenStore = [[FIRInstanceIDTokenStore alloc] initWithKeychain:self.IIDKeychain];
|
|
}
|
|
|
|
- (void)tearDown {
|
|
self.IIDKeychain = nil;
|
|
self.IIDTokenStore = nil;
|
|
|
|
self.installationsIIDCheckinStore = nil;
|
|
}
|
|
|
|
- (void)testExistingAuthToken_WhenNoToken_ThenFails {
|
|
[self removeIIDTokenWithScope:@"*"];
|
|
|
|
__auto_type checkinPromise = [self.installationsIIDCheckinStore existingIIDDefaultToken];
|
|
XCTAssert(FBLWaitForPromisesWithTimeout(1));
|
|
|
|
XCTAssertTrue(checkinPromise.isRejected);
|
|
XCTAssertNil(checkinPromise.value);
|
|
XCTAssertNotNil(checkinPromise.error);
|
|
}
|
|
|
|
- (void)testExistingAuthToken_WhenThereAreTokensButNoDefaultToken_ThenFails {
|
|
[self removeIIDTokenWithScope:@"*"];
|
|
[self saveIIDDefaultTokenForScope:@"FIAM" token:@"iid-auth-token"];
|
|
|
|
__auto_type checkinPromise = [self.installationsIIDCheckinStore existingIIDDefaultToken];
|
|
XCTAssert(FBLWaitForPromisesWithTimeout(1));
|
|
|
|
XCTAssertTrue(checkinPromise.isRejected);
|
|
XCTAssertNil(checkinPromise.value);
|
|
XCTAssertNotNil(checkinPromise.error);
|
|
}
|
|
|
|
- (void)testExistingAuthToken_WhenDataCorrupted_ThenFails {
|
|
[self removeIIDTokenWithScope:@"*"];
|
|
[self saveIIDDefaultTokenForScope:@"FIAM" token:@""];
|
|
|
|
__auto_type checkinPromise = [self.installationsIIDCheckinStore existingIIDDefaultToken];
|
|
XCTAssert(FBLWaitForPromisesWithTimeout(1));
|
|
|
|
XCTAssertTrue(checkinPromise.isRejected);
|
|
XCTAssertNil(checkinPromise.value);
|
|
XCTAssertNotNil(checkinPromise.error);
|
|
}
|
|
|
|
- (void)testExistingAuthTokenSuccess {
|
|
NSString *savedToken = [self saveIIDDefaultTokenForScope:@"*" token:@"iid-auth-token"];
|
|
|
|
__auto_type checkinPromise = [self.installationsIIDCheckinStore existingIIDDefaultToken];
|
|
XCTAssert(FBLWaitForPromisesWithTimeout(1));
|
|
|
|
XCTAssertTrue(checkinPromise.isFulfilled);
|
|
XCTAssertNil(checkinPromise.error);
|
|
XCTAssertNotNil(checkinPromise.value);
|
|
XCTAssert([checkinPromise.value isKindOfClass:[NSString class]]);
|
|
|
|
XCTAssertEqualObjects(checkinPromise.value, savedToken);
|
|
}
|
|
|
|
#pragma mark - Helpers
|
|
|
|
- (NSString *)saveIIDDefaultTokenForScope:(NSString *)scope token:(NSString *)token {
|
|
FIRInstanceIDTokenInfo *tokenInfoToSave =
|
|
[[FIRInstanceIDTokenInfo alloc] initWithAuthorizedEntity:self.GCMSenderID
|
|
scope:scope
|
|
token:token
|
|
appVersion:nil
|
|
firebaseAppID:nil];
|
|
|
|
XCTestExpectation *saveExpectation =
|
|
[self expectationWithDescription:@"saveIIDCheckingPreferences"];
|
|
[self.IIDTokenStore saveTokenInfo:tokenInfoToSave
|
|
handler:^(NSError *error) {
|
|
XCTAssertNil(error);
|
|
[saveExpectation fulfill];
|
|
}];
|
|
|
|
[self waitForExpectations:@[ saveExpectation ] timeout:1];
|
|
|
|
FIRInstanceIDTokenInfo *savedTokenInfo =
|
|
[self.IIDTokenStore tokenInfoWithAuthorizedEntity:self.GCMSenderID scope:scope];
|
|
|
|
XCTAssertEqualObjects(tokenInfoToSave.token, savedTokenInfo.token);
|
|
|
|
return savedTokenInfo.token;
|
|
}
|
|
|
|
- (void)removeIIDTokenWithScope:(NSString *)scope {
|
|
XCTestExpectation *expectation = [self expectationWithDescription:@"removeIIDTokens"];
|
|
[self.IIDTokenStore removeTokenWithAuthorizedEntity:self.GCMSenderID scope:scope];
|
|
[self.IIDTokenStore removeAllTokensWithHandler:^(NSError *_Nonnull error) {
|
|
XCTAssertNil(error);
|
|
[expectation fulfill];
|
|
}];
|
|
[self waitForExpectations:@[ expectation ] timeout:1];
|
|
}
|
|
|
|
@end
|