RCNUserDefaultsManagerTests.m 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. /*
  2. * Copyright 2019 Google
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #import <XCTest/XCTest.h>
  17. #import "FirebaseRemoteConfig/Sources/RCNUserDefaultsManager.h"
  18. static NSTimeInterval RCNUserDefaultsSampleTimeStamp = 0;
  19. static NSString* const AppName = @"testApp";
  20. static NSString* const FQNamespace1 = @"testNamespace1:testApp";
  21. static NSString* const FQNamespace2 = @"testNamespace2:testApp";
  22. @interface RCNUserDefaultsManagerTests : XCTestCase
  23. @end
  24. @implementation RCNUserDefaultsManagerTests
  25. - (void)setUp {
  26. [super setUp];
  27. [[NSUserDefaults standardUserDefaults]
  28. removePersistentDomainForName:[NSBundle mainBundle].bundleIdentifier];
  29. RCNUserDefaultsSampleTimeStamp = [[NSDate date] timeIntervalSince1970];
  30. }
  31. - (void)testUserDefaultsEtagWriteAndRead {
  32. RCNUserDefaultsManager* manager =
  33. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  34. bundleID:[NSBundle mainBundle].bundleIdentifier
  35. namespace:FQNamespace1];
  36. [manager setLastETag:@"eTag1"];
  37. XCTAssertEqualObjects([manager lastETag], @"eTag1");
  38. [manager setLastETag:@"eTag2"];
  39. XCTAssertEqualObjects([manager lastETag], @"eTag2");
  40. }
  41. - (void)testUserDefaultsLastFetchTimeWriteAndRead {
  42. RCNUserDefaultsManager* manager =
  43. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  44. bundleID:[NSBundle mainBundle].bundleIdentifier
  45. namespace:FQNamespace1];
  46. [manager setLastFetchTime:RCNUserDefaultsSampleTimeStamp];
  47. XCTAssertEqual([manager lastFetchTime], RCNUserDefaultsSampleTimeStamp);
  48. [manager setLastFetchTime:RCNUserDefaultsSampleTimeStamp - 1000];
  49. XCTAssertEqual([manager lastFetchTime], RCNUserDefaultsSampleTimeStamp - 1000);
  50. }
  51. - (void)testUserDefaultsLastETagUpdateTimeWriteAndRead {
  52. RCNUserDefaultsManager* manager =
  53. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  54. bundleID:[NSBundle mainBundle].bundleIdentifier
  55. namespace:FQNamespace1];
  56. [manager setLastETagUpdateTime:RCNUserDefaultsSampleTimeStamp];
  57. XCTAssertEqual([manager lastETagUpdateTime], RCNUserDefaultsSampleTimeStamp);
  58. [manager setLastETagUpdateTime:RCNUserDefaultsSampleTimeStamp - 1000];
  59. XCTAssertEqual([manager lastETagUpdateTime], RCNUserDefaultsSampleTimeStamp - 1000);
  60. }
  61. - (void)testUserDefaultsLastFetchStatusWriteAndRead {
  62. RCNUserDefaultsManager* manager =
  63. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  64. bundleID:[NSBundle mainBundle].bundleIdentifier
  65. namespace:FQNamespace1];
  66. [manager setLastFetchStatus:@"Success"];
  67. XCTAssertEqualObjects([manager lastFetchStatus], @"Success");
  68. [manager setLastFetchStatus:@"Error"];
  69. XCTAssertEqualObjects([manager lastFetchStatus], @"Error");
  70. }
  71. - (void)testUserDefaultsisClientThrottledWriteAndRead {
  72. RCNUserDefaultsManager* manager =
  73. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  74. bundleID:[NSBundle mainBundle].bundleIdentifier
  75. namespace:FQNamespace1];
  76. [manager setIsClientThrottledWithExponentialBackoff:YES];
  77. XCTAssertEqual([manager isClientThrottledWithExponentialBackoff], YES);
  78. [manager setIsClientThrottledWithExponentialBackoff:NO];
  79. XCTAssertEqual([manager isClientThrottledWithExponentialBackoff], NO);
  80. }
  81. - (void)testUserDefaultsThrottleEndTimeWriteAndRead {
  82. RCNUserDefaultsManager* manager =
  83. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  84. bundleID:[NSBundle mainBundle].bundleIdentifier
  85. namespace:FQNamespace1];
  86. [manager setThrottleEndTime:RCNUserDefaultsSampleTimeStamp - 7.0];
  87. XCTAssertEqual([manager throttleEndTime], RCNUserDefaultsSampleTimeStamp - 7.0);
  88. [manager setThrottleEndTime:RCNUserDefaultsSampleTimeStamp - 8.0];
  89. XCTAssertEqual([manager throttleEndTime], RCNUserDefaultsSampleTimeStamp - 8.0);
  90. }
  91. - (void)testUserDefaultsCurrentThrottlingRetryIntervalWriteAndRead {
  92. RCNUserDefaultsManager* manager =
  93. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  94. bundleID:[NSBundle mainBundle].bundleIdentifier
  95. namespace:FQNamespace1];
  96. [manager setCurrentThrottlingRetryIntervalSeconds:RCNUserDefaultsSampleTimeStamp - 1.0];
  97. XCTAssertEqual([manager currentThrottlingRetryIntervalSeconds],
  98. RCNUserDefaultsSampleTimeStamp - 1.0);
  99. [manager setCurrentThrottlingRetryIntervalSeconds:RCNUserDefaultsSampleTimeStamp - 2.0];
  100. XCTAssertEqual([manager currentThrottlingRetryIntervalSeconds],
  101. RCNUserDefaultsSampleTimeStamp - 2.0);
  102. }
  103. - (void)testUserDefaultsTemplateVersionWriteAndRead {
  104. RCNUserDefaultsManager* manager =
  105. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  106. bundleID:[NSBundle mainBundle].bundleIdentifier
  107. namespace:FQNamespace1];
  108. [manager setLastFetchedTemplateVersion:@"1"];
  109. XCTAssertEqual([manager lastFetchedTemplateVersion], @"1");
  110. }
  111. - (void)testUserDefaultsActiveTemplateVersionWriteAndRead {
  112. RCNUserDefaultsManager* manager =
  113. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  114. bundleID:[NSBundle mainBundle].bundleIdentifier
  115. namespace:FQNamespace1];
  116. [manager setLastActiveTemplateVersion:@"1"];
  117. XCTAssertEqual([manager lastActiveTemplateVersion], @"1");
  118. }
  119. - (void)testUserDefaultsRealtimeThrottleEndTimeWriteAndRead {
  120. RCNUserDefaultsManager* manager =
  121. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  122. bundleID:[NSBundle mainBundle].bundleIdentifier
  123. namespace:FQNamespace1];
  124. [manager setRealtimeThrottleEndTime:RCNUserDefaultsSampleTimeStamp - 7.0];
  125. XCTAssertEqual([manager realtimeThrottleEndTime], RCNUserDefaultsSampleTimeStamp - 7.0);
  126. [manager setRealtimeThrottleEndTime:RCNUserDefaultsSampleTimeStamp - 8.0];
  127. XCTAssertEqual([manager realtimeThrottleEndTime], RCNUserDefaultsSampleTimeStamp - 8.0);
  128. }
  129. - (void)testUserDefaultsCurrentRealtimeThrottlingRetryIntervalWriteAndRead {
  130. RCNUserDefaultsManager* manager =
  131. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  132. bundleID:[NSBundle mainBundle].bundleIdentifier
  133. namespace:FQNamespace1];
  134. [manager setCurrentRealtimeThrottlingRetryIntervalSeconds:RCNUserDefaultsSampleTimeStamp - 1.0];
  135. XCTAssertEqual([manager currentRealtimeThrottlingRetryIntervalSeconds],
  136. RCNUserDefaultsSampleTimeStamp - 1.0);
  137. [manager setCurrentRealtimeThrottlingRetryIntervalSeconds:RCNUserDefaultsSampleTimeStamp - 2.0];
  138. XCTAssertEqual([manager currentRealtimeThrottlingRetryIntervalSeconds],
  139. RCNUserDefaultsSampleTimeStamp - 2.0);
  140. }
  141. - (void)testUserDefaultsForMultipleNamespaces {
  142. RCNUserDefaultsManager* manager1 =
  143. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  144. bundleID:[NSBundle mainBundle].bundleIdentifier
  145. namespace:FQNamespace1];
  146. RCNUserDefaultsManager* manager2 =
  147. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  148. bundleID:[NSBundle mainBundle].bundleIdentifier
  149. namespace:FQNamespace2];
  150. /// Last ETag.
  151. [manager1 setLastETag:@"eTag1ForNamespace1"];
  152. [manager2 setLastETag:@"eTag1ForNamespace2"];
  153. XCTAssertEqualObjects([manager1 lastETag], @"eTag1ForNamespace1");
  154. XCTAssertEqualObjects([manager2 lastETag], @"eTag1ForNamespace2");
  155. /// Last fetch time.
  156. [manager1 setLastFetchTime:RCNUserDefaultsSampleTimeStamp - 1000.0];
  157. [manager2 setLastFetchTime:RCNUserDefaultsSampleTimeStamp - 7000.0];
  158. XCTAssertEqual([manager1 lastFetchTime], RCNUserDefaultsSampleTimeStamp - 1000);
  159. XCTAssertEqual([manager2 lastFetchTime], RCNUserDefaultsSampleTimeStamp - 7000);
  160. /// Last fetch status.
  161. [manager1 setLastFetchStatus:@"Success"];
  162. [manager2 setLastFetchStatus:@"Error"];
  163. XCTAssertEqualObjects([manager1 lastFetchStatus], @"Success");
  164. XCTAssertEqualObjects([manager2 lastFetchStatus], @"Error");
  165. /// Is client throttled.
  166. [manager1 setIsClientThrottledWithExponentialBackoff:YES];
  167. [manager2 setIsClientThrottledWithExponentialBackoff:NO];
  168. XCTAssertEqual([manager1 isClientThrottledWithExponentialBackoff], YES);
  169. XCTAssertEqual([manager2 isClientThrottledWithExponentialBackoff], NO);
  170. /// Throttle end time.
  171. [manager1 setThrottleEndTime:RCNUserDefaultsSampleTimeStamp - 7.0];
  172. [manager2 setThrottleEndTime:RCNUserDefaultsSampleTimeStamp - 8.0];
  173. XCTAssertEqual([manager1 throttleEndTime], RCNUserDefaultsSampleTimeStamp - 7.0);
  174. XCTAssertEqual([manager2 throttleEndTime], RCNUserDefaultsSampleTimeStamp - 8.0);
  175. /// Throttling retry interval.
  176. [manager1 setCurrentThrottlingRetryIntervalSeconds:RCNUserDefaultsSampleTimeStamp - 1.0];
  177. [manager2 setCurrentThrottlingRetryIntervalSeconds:RCNUserDefaultsSampleTimeStamp - 2.0];
  178. XCTAssertEqual([manager1 currentThrottlingRetryIntervalSeconds],
  179. RCNUserDefaultsSampleTimeStamp - 1.0);
  180. XCTAssertEqual([manager2 currentThrottlingRetryIntervalSeconds],
  181. RCNUserDefaultsSampleTimeStamp - 2.0);
  182. /// Realtime throttle end time.
  183. [manager1 setRealtimeThrottleEndTime:RCNUserDefaultsSampleTimeStamp - 7.0];
  184. [manager2 setRealtimeThrottleEndTime:RCNUserDefaultsSampleTimeStamp - 8.0];
  185. XCTAssertEqual([manager1 realtimeThrottleEndTime], RCNUserDefaultsSampleTimeStamp - 7.0);
  186. XCTAssertEqual([manager2 realtimeThrottleEndTime], RCNUserDefaultsSampleTimeStamp - 8.0);
  187. /// Realtime throttling retry interval.
  188. [manager1 setCurrentRealtimeThrottlingRetryIntervalSeconds:RCNUserDefaultsSampleTimeStamp - 1.0];
  189. [manager2 setCurrentRealtimeThrottlingRetryIntervalSeconds:RCNUserDefaultsSampleTimeStamp - 2.0];
  190. XCTAssertEqual([manager1 currentRealtimeThrottlingRetryIntervalSeconds],
  191. RCNUserDefaultsSampleTimeStamp - 1.0);
  192. XCTAssertEqual([manager2 currentRealtimeThrottlingRetryIntervalSeconds],
  193. RCNUserDefaultsSampleTimeStamp - 2.0);
  194. /// Realtime retry count;
  195. [manager1 setRealtimeRetryCount:1];
  196. [manager2 setRealtimeRetryCount:2];
  197. XCTAssertEqual([manager1 realtimeRetryCount], 1);
  198. XCTAssertEqual([manager2 realtimeRetryCount], 2);
  199. /// Fetch template version.
  200. [manager1 setLastFetchedTemplateVersion:@"1"];
  201. [manager2 setLastFetchedTemplateVersion:@"2"];
  202. XCTAssertEqualObjects([manager1 lastFetchedTemplateVersion], @"1");
  203. XCTAssertEqualObjects([manager2 lastFetchedTemplateVersion], @"2");
  204. /// Active template version.
  205. [manager1 setLastActiveTemplateVersion:@"1"];
  206. [manager2 setLastActiveTemplateVersion:@"2"];
  207. XCTAssertEqualObjects([manager1 lastActiveTemplateVersion], @"1");
  208. XCTAssertEqualObjects([manager2 lastActiveTemplateVersion], @"2");
  209. }
  210. - (void)testUserDefaultsReset {
  211. RCNUserDefaultsManager* manager =
  212. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  213. bundleID:[NSBundle mainBundle].bundleIdentifier
  214. namespace:FQNamespace1];
  215. [manager setLastETag:@"testETag"];
  216. [manager resetUserDefaults];
  217. XCTAssertNil([manager lastETag]);
  218. }
  219. @end