RCNUserDefaultsManagerTests.m 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  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. static NSMutableDictionary<NSString*, NSString*>* customSignals1 = nil;
  23. static NSMutableDictionary<NSString*, NSString*>* customSignals2 = nil;
  24. @interface RCNUserDefaultsManagerTests : XCTestCase
  25. @end
  26. @implementation RCNUserDefaultsManagerTests
  27. - (void)setUp {
  28. [super setUp];
  29. [[NSUserDefaults standardUserDefaults]
  30. removePersistentDomainForName:[NSBundle mainBundle].bundleIdentifier];
  31. RCNUserDefaultsSampleTimeStamp = [[NSDate date] timeIntervalSince1970];
  32. customSignals1 = [[NSMutableDictionary alloc] initWithDictionary:@{
  33. @"signal1" : @"stringValue",
  34. }];
  35. customSignals2 = [[NSMutableDictionary alloc] initWithDictionary:@{
  36. @"signal2" : @"stringValue2",
  37. }];
  38. }
  39. - (void)testUserDefaultsEtagWriteAndRead {
  40. RCNUserDefaultsManager* manager =
  41. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  42. bundleID:[NSBundle mainBundle].bundleIdentifier
  43. namespace:FQNamespace1];
  44. [manager setLastETag:@"eTag1"];
  45. XCTAssertEqualObjects([manager lastETag], @"eTag1");
  46. [manager setLastETag:@"eTag2"];
  47. XCTAssertEqualObjects([manager lastETag], @"eTag2");
  48. }
  49. - (void)testUserDefaultsLastFetchTimeWriteAndRead {
  50. RCNUserDefaultsManager* manager =
  51. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  52. bundleID:[NSBundle mainBundle].bundleIdentifier
  53. namespace:FQNamespace1];
  54. [manager setLastFetchTime:RCNUserDefaultsSampleTimeStamp];
  55. XCTAssertEqual([manager lastFetchTime], RCNUserDefaultsSampleTimeStamp);
  56. [manager setLastFetchTime:RCNUserDefaultsSampleTimeStamp - 1000];
  57. XCTAssertEqual([manager lastFetchTime], RCNUserDefaultsSampleTimeStamp - 1000);
  58. }
  59. - (void)testUserDefaultsLastETagUpdateTimeWriteAndRead {
  60. RCNUserDefaultsManager* manager =
  61. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  62. bundleID:[NSBundle mainBundle].bundleIdentifier
  63. namespace:FQNamespace1];
  64. [manager setLastETagUpdateTime:RCNUserDefaultsSampleTimeStamp];
  65. XCTAssertEqual([manager lastETagUpdateTime], RCNUserDefaultsSampleTimeStamp);
  66. [manager setLastETagUpdateTime:RCNUserDefaultsSampleTimeStamp - 1000];
  67. XCTAssertEqual([manager lastETagUpdateTime], RCNUserDefaultsSampleTimeStamp - 1000);
  68. }
  69. - (void)testUserDefaultsLastFetchStatusWriteAndRead {
  70. RCNUserDefaultsManager* manager =
  71. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  72. bundleID:[NSBundle mainBundle].bundleIdentifier
  73. namespace:FQNamespace1];
  74. [manager setLastFetchStatus:@"Success"];
  75. XCTAssertEqualObjects([manager lastFetchStatus], @"Success");
  76. [manager setLastFetchStatus:@"Error"];
  77. XCTAssertEqualObjects([manager lastFetchStatus], @"Error");
  78. }
  79. - (void)testUserDefaultsisClientThrottledWriteAndRead {
  80. RCNUserDefaultsManager* manager =
  81. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  82. bundleID:[NSBundle mainBundle].bundleIdentifier
  83. namespace:FQNamespace1];
  84. [manager setIsClientThrottledWithExponentialBackoff:YES];
  85. XCTAssertEqual([manager isClientThrottledWithExponentialBackoff], YES);
  86. [manager setIsClientThrottledWithExponentialBackoff:NO];
  87. XCTAssertEqual([manager isClientThrottledWithExponentialBackoff], NO);
  88. }
  89. - (void)testUserDefaultsThrottleEndTimeWriteAndRead {
  90. RCNUserDefaultsManager* manager =
  91. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  92. bundleID:[NSBundle mainBundle].bundleIdentifier
  93. namespace:FQNamespace1];
  94. [manager setThrottleEndTime:RCNUserDefaultsSampleTimeStamp - 7.0];
  95. XCTAssertEqual([manager throttleEndTime], RCNUserDefaultsSampleTimeStamp - 7.0);
  96. [manager setThrottleEndTime:RCNUserDefaultsSampleTimeStamp - 8.0];
  97. XCTAssertEqual([manager throttleEndTime], RCNUserDefaultsSampleTimeStamp - 8.0);
  98. }
  99. - (void)testUserDefaultsCurrentThrottlingRetryIntervalWriteAndRead {
  100. RCNUserDefaultsManager* manager =
  101. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  102. bundleID:[NSBundle mainBundle].bundleIdentifier
  103. namespace:FQNamespace1];
  104. [manager setCurrentThrottlingRetryIntervalSeconds:RCNUserDefaultsSampleTimeStamp - 1.0];
  105. XCTAssertEqual([manager currentThrottlingRetryIntervalSeconds],
  106. RCNUserDefaultsSampleTimeStamp - 1.0);
  107. [manager setCurrentThrottlingRetryIntervalSeconds:RCNUserDefaultsSampleTimeStamp - 2.0];
  108. XCTAssertEqual([manager currentThrottlingRetryIntervalSeconds],
  109. RCNUserDefaultsSampleTimeStamp - 2.0);
  110. }
  111. - (void)testUserDefaultsTemplateVersionWriteAndRead {
  112. RCNUserDefaultsManager* manager =
  113. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  114. bundleID:[NSBundle mainBundle].bundleIdentifier
  115. namespace:FQNamespace1];
  116. [manager setLastFetchedTemplateVersion:@"1"];
  117. XCTAssertEqual([manager lastFetchedTemplateVersion], @"1");
  118. }
  119. - (void)testUserDefaultsActiveTemplateVersionWriteAndRead {
  120. RCNUserDefaultsManager* manager =
  121. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  122. bundleID:[NSBundle mainBundle].bundleIdentifier
  123. namespace:FQNamespace1];
  124. [manager setLastActiveTemplateVersion:@"1"];
  125. XCTAssertEqual([manager lastActiveTemplateVersion], @"1");
  126. }
  127. - (void)testUserDefaultsRealtimeThrottleEndTimeWriteAndRead {
  128. RCNUserDefaultsManager* manager =
  129. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  130. bundleID:[NSBundle mainBundle].bundleIdentifier
  131. namespace:FQNamespace1];
  132. [manager setRealtimeThrottleEndTime:RCNUserDefaultsSampleTimeStamp - 7.0];
  133. XCTAssertEqual([manager realtimeThrottleEndTime], RCNUserDefaultsSampleTimeStamp - 7.0);
  134. [manager setRealtimeThrottleEndTime:RCNUserDefaultsSampleTimeStamp - 8.0];
  135. XCTAssertEqual([manager realtimeThrottleEndTime], RCNUserDefaultsSampleTimeStamp - 8.0);
  136. }
  137. - (void)testUserDefaultsCurrentRealtimeThrottlingRetryIntervalWriteAndRead {
  138. RCNUserDefaultsManager* manager =
  139. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  140. bundleID:[NSBundle mainBundle].bundleIdentifier
  141. namespace:FQNamespace1];
  142. [manager setCurrentRealtimeThrottlingRetryIntervalSeconds:RCNUserDefaultsSampleTimeStamp - 1.0];
  143. XCTAssertEqual([manager currentRealtimeThrottlingRetryIntervalSeconds],
  144. RCNUserDefaultsSampleTimeStamp - 1.0);
  145. [manager setCurrentRealtimeThrottlingRetryIntervalSeconds:RCNUserDefaultsSampleTimeStamp - 2.0];
  146. XCTAssertEqual([manager currentRealtimeThrottlingRetryIntervalSeconds],
  147. RCNUserDefaultsSampleTimeStamp - 2.0);
  148. }
  149. - (void)testUserDefaultsCustomSignalsWriteAndRead {
  150. RCNUserDefaultsManager* manager =
  151. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  152. bundleID:[NSBundle mainBundle].bundleIdentifier
  153. namespace:FQNamespace1];
  154. [manager setCustomSignals:customSignals1];
  155. XCTAssertEqualObjects([manager customSignals], customSignals1);
  156. [manager setCustomSignals:customSignals2];
  157. XCTAssertEqualObjects([manager customSignals], customSignals2);
  158. }
  159. - (void)testUserDefaultsForMultipleNamespaces {
  160. RCNUserDefaultsManager* manager1 =
  161. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  162. bundleID:[NSBundle mainBundle].bundleIdentifier
  163. namespace:FQNamespace1];
  164. RCNUserDefaultsManager* manager2 =
  165. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  166. bundleID:[NSBundle mainBundle].bundleIdentifier
  167. namespace:FQNamespace2];
  168. /// Last ETag.
  169. [manager1 setLastETag:@"eTag1ForNamespace1"];
  170. [manager2 setLastETag:@"eTag1ForNamespace2"];
  171. XCTAssertEqualObjects([manager1 lastETag], @"eTag1ForNamespace1");
  172. XCTAssertEqualObjects([manager2 lastETag], @"eTag1ForNamespace2");
  173. /// Last fetch time.
  174. [manager1 setLastFetchTime:RCNUserDefaultsSampleTimeStamp - 1000.0];
  175. [manager2 setLastFetchTime:RCNUserDefaultsSampleTimeStamp - 7000.0];
  176. XCTAssertEqual([manager1 lastFetchTime], RCNUserDefaultsSampleTimeStamp - 1000);
  177. XCTAssertEqual([manager2 lastFetchTime], RCNUserDefaultsSampleTimeStamp - 7000);
  178. /// Last fetch status.
  179. [manager1 setLastFetchStatus:@"Success"];
  180. [manager2 setLastFetchStatus:@"Error"];
  181. XCTAssertEqualObjects([manager1 lastFetchStatus], @"Success");
  182. XCTAssertEqualObjects([manager2 lastFetchStatus], @"Error");
  183. /// Is client throttled.
  184. [manager1 setIsClientThrottledWithExponentialBackoff:YES];
  185. [manager2 setIsClientThrottledWithExponentialBackoff:NO];
  186. XCTAssertEqual([manager1 isClientThrottledWithExponentialBackoff], YES);
  187. XCTAssertEqual([manager2 isClientThrottledWithExponentialBackoff], NO);
  188. /// Throttle end time.
  189. [manager1 setThrottleEndTime:RCNUserDefaultsSampleTimeStamp - 7.0];
  190. [manager2 setThrottleEndTime:RCNUserDefaultsSampleTimeStamp - 8.0];
  191. XCTAssertEqual([manager1 throttleEndTime], RCNUserDefaultsSampleTimeStamp - 7.0);
  192. XCTAssertEqual([manager2 throttleEndTime], RCNUserDefaultsSampleTimeStamp - 8.0);
  193. /// Throttling retry interval.
  194. [manager1 setCurrentThrottlingRetryIntervalSeconds:RCNUserDefaultsSampleTimeStamp - 1.0];
  195. [manager2 setCurrentThrottlingRetryIntervalSeconds:RCNUserDefaultsSampleTimeStamp - 2.0];
  196. XCTAssertEqual([manager1 currentThrottlingRetryIntervalSeconds],
  197. RCNUserDefaultsSampleTimeStamp - 1.0);
  198. XCTAssertEqual([manager2 currentThrottlingRetryIntervalSeconds],
  199. RCNUserDefaultsSampleTimeStamp - 2.0);
  200. /// Realtime throttle end time.
  201. [manager1 setRealtimeThrottleEndTime:RCNUserDefaultsSampleTimeStamp - 7.0];
  202. [manager2 setRealtimeThrottleEndTime:RCNUserDefaultsSampleTimeStamp - 8.0];
  203. XCTAssertEqual([manager1 realtimeThrottleEndTime], RCNUserDefaultsSampleTimeStamp - 7.0);
  204. XCTAssertEqual([manager2 realtimeThrottleEndTime], RCNUserDefaultsSampleTimeStamp - 8.0);
  205. /// Realtime throttling retry interval.
  206. [manager1 setCurrentRealtimeThrottlingRetryIntervalSeconds:RCNUserDefaultsSampleTimeStamp - 1.0];
  207. [manager2 setCurrentRealtimeThrottlingRetryIntervalSeconds:RCNUserDefaultsSampleTimeStamp - 2.0];
  208. XCTAssertEqual([manager1 currentRealtimeThrottlingRetryIntervalSeconds],
  209. RCNUserDefaultsSampleTimeStamp - 1.0);
  210. XCTAssertEqual([manager2 currentRealtimeThrottlingRetryIntervalSeconds],
  211. RCNUserDefaultsSampleTimeStamp - 2.0);
  212. /// Realtime retry count;
  213. [manager1 setRealtimeRetryCount:1];
  214. [manager2 setRealtimeRetryCount:2];
  215. XCTAssertEqual([manager1 realtimeRetryCount], 1);
  216. XCTAssertEqual([manager2 realtimeRetryCount], 2);
  217. /// Fetch template version.
  218. [manager1 setLastFetchedTemplateVersion:@"1"];
  219. [manager2 setLastFetchedTemplateVersion:@"2"];
  220. XCTAssertEqualObjects([manager1 lastFetchedTemplateVersion], @"1");
  221. XCTAssertEqualObjects([manager2 lastFetchedTemplateVersion], @"2");
  222. /// Active template version.
  223. [manager1 setLastActiveTemplateVersion:@"1"];
  224. [manager2 setLastActiveTemplateVersion:@"2"];
  225. XCTAssertEqualObjects([manager1 lastActiveTemplateVersion], @"1");
  226. XCTAssertEqualObjects([manager2 lastActiveTemplateVersion], @"2");
  227. /// Custom Signals
  228. [manager1 setCustomSignals:customSignals1];
  229. [manager2 setCustomSignals:customSignals2];
  230. XCTAssertEqualObjects([manager1 customSignals], customSignals1);
  231. XCTAssertEqualObjects([manager2 customSignals], customSignals2);
  232. }
  233. - (void)testUserDefaultsReset {
  234. RCNUserDefaultsManager* manager =
  235. [[RCNUserDefaultsManager alloc] initWithAppName:AppName
  236. bundleID:[NSBundle mainBundle].bundleIdentifier
  237. namespace:FQNamespace1];
  238. [manager setLastETag:@"testETag"];
  239. [manager resetUserDefaults];
  240. XCTAssertNil([manager lastETag]);
  241. }
  242. @end