Skip to content

Commit

Permalink
Move reporting Firebase user agent from checkin to register (#2679)
Browse files Browse the repository at this point in the history
  • Loading branch information
maksymmalyhin committed Mar 31, 2019
1 parent 8ef6cf8 commit c416b10
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 39 deletions.
32 changes: 0 additions & 32 deletions Example/InstanceID/Tests/FIRInstanceIDCheckinServiceTest.m
Expand Up @@ -16,7 +16,6 @@

#import <XCTest/XCTest.h>

#import <FirebaseCore/FIRAppInternal.h>
#import <OCMock/OCMock.h>
#import "Firebase/InstanceID/FIRInstanceIDCheckinPreferences+Internal.h"
#import "Firebase/InstanceID/FIRInstanceIDCheckinPreferences.h"
Expand Down Expand Up @@ -103,37 +102,6 @@ - (void)testFailedCheckinService {
}];
}

- (void)testCheckinServiceAddsFirebaseUserAgentToHTTPHeader {
NSString *expectedFirebaseUserAgent = [FIRApp firebaseUserAgent];

FIRInstanceIDURLRequestTestBlock successHandler = [self successfulCheckinCompletionHandler];

[FIRInstanceIDCheckinService
setCheckinTestBlock:^(NSURLRequest *request,
FIRInstanceIDURLRequestTestResponseBlock response) {
NSString *requestFirebaseUserAgentValue =
request.allHTTPHeaderFields[kFIRInstanceIDFirebaseUserAgentKey];
XCTAssertEqualObjects(requestFirebaseUserAgentValue, expectedFirebaseUserAgent);
successHandler(request, response);
}];

XCTestExpectation *checkinCompletionExpectation =
[self expectationWithDescription:@"Checkin Completion"];

[self.checkinService
checkinWithExistingCheckin:nil
completion:^(FIRInstanceIDCheckinPreferences *preferences, NSError *error) {
[checkinCompletionExpectation fulfill];
}];

[self waitForExpectationsWithTimeout:5
handler:^(NSError *error) {
if (error) {
XCTFail(@"Checkin Timeout Error: %@", error);
}
}];
}

- (void)testCheckinServiceFailsWithErrorAfterStopFetching {
[self.checkinService stopFetching];

Expand Down
42 changes: 42 additions & 0 deletions Example/InstanceID/Tests/FIRInstanceIDTokenOperationsTest.m
Expand Up @@ -32,6 +32,8 @@
#import "Firebase/InstanceID/NSError+FIRInstanceID.h"
#import "Firebase/InstanceID/Public/FIRInstanceID.h"

#import <FirebaseCore/FIRAppInternal.h>

static NSString *kDeviceID = @"fakeDeviceID";
static NSString *kSecretToken = @"fakeSecretToken";
static NSString *kDigestString = @"test-digest";
Expand Down Expand Up @@ -317,6 +319,46 @@ - (void)testHTTPAuthHeaderGenerationFromCheckin {
XCTAssertEqualObjects(generatedHeader, expectedHeader);
}

- (void)testTokenFetchOperationFirebaseUserAgentHeader {
XCTestExpectation *completionExpectation =
[self expectationWithDescription:@"completionExpectation"];

FIRInstanceIDCheckinPreferences *checkinPreferences =
[self setCheckinPreferencesWithLastCheckinTime:0];

FIRInstanceIDTokenFetchOperation *operation =
[[FIRInstanceIDTokenFetchOperation alloc] initWithAuthorizedEntity:kAuthorizedEntity
scope:kScope
options:nil
checkinPreferences:checkinPreferences
keyPair:self.keyPair];
operation.testBlock =
^(NSURLRequest *request, FIRInstanceIDURLRequestTestResponseBlock response) {
NSString *userAgentValue = request.allHTTPHeaderFields[kFIRInstanceIDFirebaseUserAgentKey];
XCTAssertEqualObjects(userAgentValue, [FIRApp firebaseUserAgent]);

// Return a response with Error=RST
NSData *responseBody = [self dataForFetchRequest:request returnValidToken:NO];
NSHTTPURLResponse *responseObject = [[NSHTTPURLResponse alloc] initWithURL:request.URL
statusCode:200
HTTPVersion:@"HTTP/1.1"
headerFields:nil];
response(responseBody, responseObject, nil);
};

[operation addCompletionHandler:^(FIRInstanceIDTokenOperationResult result,
NSString *_Nullable token, NSError *_Nullable error) {
[completionExpectation fulfill];
}];

[operation start];

[self waitForExpectationsWithTimeout:0.25
handler:^(NSError *_Nullable error) {
XCTAssertNil(error.localizedDescription);
}];
}

#pragma mark - Internal Helpers
- (NSData *)dataForFetchRequest:(NSURLRequest *)request returnValidToken:(BOOL)returnValidToken {
NSString *response;
Expand Down
1 change: 0 additions & 1 deletion Firebase/InstanceID/FIRInstanceIDCheckinService.h
Expand Up @@ -28,7 +28,6 @@ FOUNDATION_EXPORT NSString *const kFIRInstanceIDLastCheckinTimeKey;
FOUNDATION_EXPORT NSString *const kFIRInstanceIDVersionInfoStringKey;
FOUNDATION_EXPORT NSString *const kFIRInstanceIDGServicesDictionaryKey;
FOUNDATION_EXPORT NSString *const kFIRInstanceIDDeviceDataVersionKey;
FOUNDATION_EXPORT NSString *const kFIRInstanceIDFirebaseUserAgentKey;

@class FIRInstanceIDCheckinPreferences;

Expand Down
6 changes: 0 additions & 6 deletions Firebase/InstanceID/FIRInstanceIDCheckinService.m
Expand Up @@ -16,7 +16,6 @@

#import "FIRInstanceIDCheckinService.h"

#import <FirebaseCore/FIRAppInternal.h>
#import "FIRInstanceIDCheckinPreferences+Internal.h"
#import "FIRInstanceIDCheckinPreferences_Private.h"
#import "FIRInstanceIDDefines.h"
Expand All @@ -35,7 +34,6 @@
NSString *const kFIRInstanceIDVersionInfoStringKey = @"GMSInstanceIDVersionInfo";
NSString *const kFIRInstanceIDGServicesDictionaryKey = @"GMSInstanceIDGServicesData";
NSString *const kFIRInstanceIDDeviceDataVersionKey = @"GMSInstanceIDDeviceDataVersion";
NSString *const kFIRInstanceIDFirebaseUserAgentKey = @"X-firebase-client";

static NSUInteger const kCheckinType = 2; // DeviceType IOS in l/w/a/_checkin.proto
static NSUInteger const kCheckinVersion = 2;
Expand Down Expand Up @@ -85,11 +83,7 @@ - (void)checkinWithExistingCheckin:(FIRInstanceIDCheckinPreferences *)existingCh

NSURL *url = [NSURL URLWithString:kDeviceCheckinURL];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

[request setValue:@"application/json" forHTTPHeaderField:@"content-type"];
[request setValue:[FIRApp firebaseUserAgent]
forHTTPHeaderField:kFIRInstanceIDFirebaseUserAgentKey];

NSDictionary *checkinParameters = [self checkinParametersWithExistingCheckin:existingCheckin];
NSData *checkinData = [NSJSONSerialization dataWithJSONObject:checkinParameters
options:0
Expand Down
3 changes: 3 additions & 0 deletions Firebase/InstanceID/FIRInstanceIDTokenFetchOperation.h
Expand Up @@ -17,6 +17,9 @@
#import "FIRInstanceIDTokenOperation.h"

NS_ASSUME_NONNULL_BEGIN

FOUNDATION_EXPORT NSString *const kFIRInstanceIDFirebaseUserAgentKey;

@interface FIRInstanceIDTokenFetchOperation : FIRInstanceIDTokenOperation

- (instancetype)initWithAuthorizedEntity:(NSString *)authorizedEntity
Expand Down
5 changes: 5 additions & 0 deletions Firebase/InstanceID/FIRInstanceIDTokenFetchOperation.m
Expand Up @@ -25,11 +25,14 @@
#import "FIRInstanceIDUtilities.h"
#import "NSError+FIRInstanceID.h"

#import <FirebaseCore/FIRAppInternal.h>

// We can have a static int since this error should theoretically only
// happen once (for the first time). If it repeats there is something
// else that is wrong.
static int phoneRegistrationErrorRetryCount = 0;
static const int kMaxPhoneRegistrationErrorRetryCount = 10;
NSString *const kFIRInstanceIDFirebaseUserAgentKey = @"X-firebase-client";

@implementation FIRInstanceIDTokenFetchOperation

Expand All @@ -55,6 +58,8 @@ - (void)performTokenOperation {
NSMutableURLRequest *request = [[self class] requestWithAuthHeader:authHeader];
NSString *checkinVersionInfo = self.checkinPreferences.versionInfo;
[request setValue:checkinVersionInfo forHTTPHeaderField:@"info"];
[request setValue:[FIRApp firebaseUserAgent]
forHTTPHeaderField:kFIRInstanceIDFirebaseUserAgentKey];

// Build form-encoded body
NSString *deviceAuthID = self.checkinPreferences.deviceID;
Expand Down

0 comments on commit c416b10

Please sign in to comment.