FPRSessionManagerTest.m 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. // Copyright 2020 Google LLC
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #import <XCTest/XCTest.h>
  15. #import "FirebasePerformance/Sources/AppActivity/FPRSessionManager+Private.h"
  16. #import "FirebasePerformance/Sources/AppActivity/FPRSessionManager.h"
  17. #import "FirebasePerformance/Sources/Configurations/FPRConfigurations+Private.h"
  18. #import <OCMock/OCMock.h>
  19. @interface FPRSessionManagerTest : XCTestCase
  20. @end
  21. @implementation FPRSessionManagerTest
  22. /** Validate the instance gets created and it is a singleton. */
  23. - (void)testInstanceCreation {
  24. FPRSessionManager *instance = [FPRSessionManager sharedInstance];
  25. XCTAssertNotNil(instance);
  26. XCTAssertEqual(instance, [FPRSessionManager sharedInstance]);
  27. }
  28. /** Validate that valid sessionId always exists. */
  29. - (void)testSessionIdExistance {
  30. FPRSessionManager *instance = [FPRSessionManager sharedInstance];
  31. [instance startTrackingAppStateChanges];
  32. NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
  33. [notificationCenter postNotificationName:UIApplicationWillEnterForegroundNotification
  34. object:[UIApplication sharedApplication]];
  35. XCTAssertNotNil(instance.sessionDetails.sessionId);
  36. NSString *lowercaseSessionId = [instance.sessionDetails.sessionId lowercaseString];
  37. XCTAssertEqualObjects(lowercaseSessionId, instance.sessionDetails.sessionId);
  38. }
  39. /** Validate that sessionId does not change when calling renew method immediately. */
  40. - (void)testSessionIdNotGettingRenewed {
  41. FPRSessionManager *instance = [FPRSessionManager sharedInstance];
  42. [instance startTrackingAppStateChanges];
  43. NSString *sessionId = instance.sessionDetails.sessionId;
  44. [instance renewSessionIdIfRunningTooLong];
  45. XCTAssertEqualObjects(sessionId, instance.sessionDetails.sessionId);
  46. }
  47. /** Validate that sessionId changes on application state changes. */
  48. - (void)testSessionIdUpdation {
  49. FPRSessionManager *instance = [FPRSessionManager sharedInstance];
  50. [instance startTrackingAppStateChanges];
  51. NSString *sessionId = instance.sessionDetails.sessionId;
  52. NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
  53. [notificationCenter postNotificationName:UIApplicationWillEnterForegroundNotification
  54. object:[UIApplication sharedApplication]];
  55. XCTAssertNotEqual(sessionId, instance.sessionDetails.sessionId);
  56. }
  57. /** Validate that sessionId changes sends notifications. */
  58. - (void)testSessionIdUpdationThrowsNotification {
  59. FPRSessionManager *instance = [FPRSessionManager sharedInstance];
  60. [instance startTrackingAppStateChanges];
  61. NSString *sessionId = instance.sessionDetails.sessionId;
  62. __block BOOL receivedNotification = NO;
  63. [instance.sessionNotificationCenter addObserverForName:kFPRSessionIdUpdatedNotification
  64. object:instance
  65. queue:[NSOperationQueue mainQueue]
  66. usingBlock:^(NSNotification *note) {
  67. receivedNotification = YES;
  68. }];
  69. NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
  70. [notificationCenter postNotificationName:UIApplicationWillEnterForegroundNotification
  71. object:[UIApplication sharedApplication]];
  72. XCTAssertTrue(receivedNotification);
  73. XCTAssertNotEqual(sessionId, instance.sessionDetails.sessionId);
  74. }
  75. @end