UserDefaultsManagerOrigTests.swift 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. // Copyright 2025 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. @testable import FirebaseRemoteConfig
  15. import XCTest
  16. private let appName = "testApp"
  17. private let fqNamespace1 = "testNamespace1:testApp"
  18. private let fqNamespace2 = "testNamespace2:testApp"
  19. private var userDefaultsSampleTimestamp: TimeInterval = 0
  20. class UserDefaultsManagerOrigTests: XCTestCase {
  21. private var bundleID: String!
  22. override func setUp() async throws {
  23. try await super.setUp()
  24. // Clear UserDefaults before each test.
  25. bundleID = try XCTUnwrap(Bundle.main.bundleIdentifier)
  26. userDefaultsSampleTimestamp = Date().timeIntervalSince1970
  27. UserDefaults.standard.removePersistentDomain(forName: bundleID)
  28. }
  29. func testUserDefaultsEtagWriteAndRead() {
  30. let manager = UserDefaultsManager(appName: appName,
  31. bundleID: bundleID,
  32. namespace: fqNamespace1)
  33. manager.lastETag = "eTag1"
  34. XCTAssertEqual(manager.lastETag, "eTag1")
  35. manager.lastETag = "eTag2"
  36. XCTAssertEqual(manager.lastETag, "eTag2")
  37. }
  38. func testUserDefaultsLastFetchTimeWriteAndRead() {
  39. let manager = UserDefaultsManager(appName: appName,
  40. bundleID: bundleID,
  41. namespace: fqNamespace1)
  42. manager.lastFetchTime = userDefaultsSampleTimestamp
  43. XCTAssertEqual(manager.lastFetchTime, userDefaultsSampleTimestamp)
  44. manager.lastFetchTime = userDefaultsSampleTimestamp - 1000
  45. XCTAssertEqual(manager.lastFetchTime, userDefaultsSampleTimestamp - 1000)
  46. }
  47. func testUserDefaultsLastETagUpdateTimeWriteAndRead() {
  48. let manager = UserDefaultsManager(appName: appName,
  49. bundleID: bundleID,
  50. namespace: fqNamespace1)
  51. manager.lastETagUpdateTime = userDefaultsSampleTimestamp
  52. XCTAssertEqual(manager.lastETagUpdateTime, userDefaultsSampleTimestamp)
  53. manager.lastETagUpdateTime = userDefaultsSampleTimestamp - 1000
  54. XCTAssertEqual(manager.lastETagUpdateTime, userDefaultsSampleTimestamp - 1000)
  55. }
  56. func testUserDefaultsLastFetchStatusWriteAndRead() {
  57. let manager = UserDefaultsManager(appName: appName,
  58. bundleID: bundleID,
  59. namespace: fqNamespace1)
  60. manager.lastFetchStatus = "Success"
  61. XCTAssertEqual(manager.lastFetchStatus, "Success")
  62. manager.lastFetchStatus = "Error"
  63. XCTAssertEqual(manager.lastFetchStatus, "Error")
  64. }
  65. func testUserDefaultsIsClientThrottledWriteAndRead() {
  66. let manager = UserDefaultsManager(appName: appName,
  67. bundleID: bundleID,
  68. namespace: fqNamespace1)
  69. manager.isClientThrottledWithExponentialBackoff = true
  70. XCTAssertEqual(manager.isClientThrottledWithExponentialBackoff, true)
  71. manager.isClientThrottledWithExponentialBackoff = false
  72. XCTAssertEqual(manager.isClientThrottledWithExponentialBackoff, false)
  73. }
  74. func testUserDefaultsThrottleEndTimeWriteAndRead() {
  75. let manager = UserDefaultsManager(appName: appName,
  76. bundleID: bundleID,
  77. namespace: fqNamespace1)
  78. manager.throttleEndTime = userDefaultsSampleTimestamp - 7.0
  79. XCTAssertEqual(manager.throttleEndTime, userDefaultsSampleTimestamp - 7.0)
  80. manager.throttleEndTime = userDefaultsSampleTimestamp - 8.0
  81. XCTAssertEqual(manager.throttleEndTime, userDefaultsSampleTimestamp - 8.0)
  82. }
  83. func testUserDefaultsCurrentThrottlingRetryIntervalWriteAndRead() {
  84. let manager = UserDefaultsManager(appName: appName,
  85. bundleID: bundleID,
  86. namespace: fqNamespace1)
  87. manager.currentThrottlingRetryIntervalSeconds = userDefaultsSampleTimestamp - 1.0
  88. XCTAssertEqual(
  89. manager.currentThrottlingRetryIntervalSeconds,
  90. userDefaultsSampleTimestamp - 1.0
  91. )
  92. manager.currentThrottlingRetryIntervalSeconds = userDefaultsSampleTimestamp - 2.0
  93. XCTAssertEqual(
  94. manager.currentThrottlingRetryIntervalSeconds,
  95. userDefaultsSampleTimestamp - 2.0
  96. )
  97. }
  98. func testUserDefaultsTemplateVersionWriteAndRead() {
  99. let manager = UserDefaultsManager(appName: appName,
  100. bundleID: bundleID,
  101. namespace: fqNamespace1)
  102. manager.lastFetchedTemplateVersion = "1"
  103. XCTAssertEqual(manager.lastFetchedTemplateVersion, "1")
  104. }
  105. func testUserDefaultsActiveTemplateVersionWriteAndRead() {
  106. let manager = UserDefaultsManager(appName: appName,
  107. bundleID: bundleID,
  108. namespace: fqNamespace1)
  109. manager.lastActiveTemplateVersion = "1"
  110. XCTAssertEqual(manager.lastActiveTemplateVersion, "1")
  111. }
  112. func testUserDefaultsRealtimeThrottleEndTimeWriteAndRead() {
  113. let manager = UserDefaultsManager(
  114. appName: appName,
  115. bundleID: bundleID,
  116. namespace: fqNamespace1
  117. )
  118. manager.realtimeThrottleEndTime = userDefaultsSampleTimestamp - 7.0
  119. XCTAssertEqual(manager.realtimeThrottleEndTime, userDefaultsSampleTimestamp - 7.0)
  120. manager.realtimeThrottleEndTime = userDefaultsSampleTimestamp - 8.0
  121. XCTAssertEqual(manager.realtimeThrottleEndTime, userDefaultsSampleTimestamp - 8.0)
  122. }
  123. func testUserDefaultsCurrentRealtimeThrottlingRetryIntervalWriteAndRead() {
  124. let manager = UserDefaultsManager(appName: appName,
  125. bundleID: bundleID,
  126. namespace: fqNamespace1)
  127. manager.currentRealtimeThrottlingRetryIntervalSeconds = userDefaultsSampleTimestamp - 1.0
  128. XCTAssertEqual(manager.currentRealtimeThrottlingRetryIntervalSeconds,
  129. userDefaultsSampleTimestamp - 1.0)
  130. manager.currentRealtimeThrottlingRetryIntervalSeconds = userDefaultsSampleTimestamp - 2.0
  131. XCTAssertEqual(manager.currentRealtimeThrottlingRetryIntervalSeconds,
  132. userDefaultsSampleTimestamp - 2.0)
  133. }
  134. func testUserDefaultsForMultipleNamespaces() {
  135. let manager1 = UserDefaultsManager(appName: appName,
  136. bundleID: bundleID,
  137. namespace: fqNamespace1)
  138. let manager2 = UserDefaultsManager(appName: appName,
  139. bundleID: bundleID,
  140. namespace: fqNamespace2)
  141. manager1.lastETag = "eTag1ForNamespace1"
  142. manager2.lastETag = "eTag1ForNamespace2"
  143. XCTAssertEqual(manager1.lastETag, "eTag1ForNamespace1")
  144. XCTAssertEqual(manager2.lastETag, "eTag1ForNamespace2")
  145. manager1.lastFetchTime = userDefaultsSampleTimestamp - 1000
  146. manager2.lastFetchTime = userDefaultsSampleTimestamp - 7000
  147. XCTAssertEqual(manager1.lastFetchTime, userDefaultsSampleTimestamp - 1000)
  148. XCTAssertEqual(manager2.lastFetchTime, userDefaultsSampleTimestamp - 7000)
  149. manager1.lastFetchStatus = "Success"
  150. manager2.lastFetchStatus = "Error"
  151. XCTAssertEqual(manager1.lastFetchStatus, "Success")
  152. XCTAssertEqual(manager2.lastFetchStatus, "Error")
  153. manager1.isClientThrottledWithExponentialBackoff = true
  154. manager2.isClientThrottledWithExponentialBackoff = false
  155. XCTAssertEqual(manager1.isClientThrottledWithExponentialBackoff, true)
  156. XCTAssertEqual(manager2.isClientThrottledWithExponentialBackoff, false)
  157. manager1.throttleEndTime = userDefaultsSampleTimestamp - 7.0
  158. manager2.throttleEndTime = userDefaultsSampleTimestamp - 8.0
  159. XCTAssertEqual(manager1.throttleEndTime, userDefaultsSampleTimestamp - 7.0)
  160. XCTAssertEqual(manager2.throttleEndTime, userDefaultsSampleTimestamp - 8.0)
  161. manager1.currentThrottlingRetryIntervalSeconds = userDefaultsSampleTimestamp - 1.0
  162. manager2.currentThrottlingRetryIntervalSeconds = userDefaultsSampleTimestamp - 2.0
  163. XCTAssertEqual(
  164. manager1.currentThrottlingRetryIntervalSeconds,
  165. userDefaultsSampleTimestamp - 1.0
  166. )
  167. XCTAssertEqual(
  168. manager2.currentThrottlingRetryIntervalSeconds,
  169. userDefaultsSampleTimestamp - 2.0
  170. )
  171. manager1.realtimeThrottleEndTime = userDefaultsSampleTimestamp - 7.0
  172. manager2.realtimeThrottleEndTime = userDefaultsSampleTimestamp - 8.0
  173. XCTAssertEqual(manager1.realtimeThrottleEndTime, userDefaultsSampleTimestamp - 7.0)
  174. XCTAssertEqual(manager2.realtimeThrottleEndTime, userDefaultsSampleTimestamp - 8.0)
  175. manager1.currentRealtimeThrottlingRetryIntervalSeconds = userDefaultsSampleTimestamp - 1.0
  176. manager2.currentRealtimeThrottlingRetryIntervalSeconds = userDefaultsSampleTimestamp - 2.0
  177. XCTAssertEqual(
  178. manager1.currentRealtimeThrottlingRetryIntervalSeconds,
  179. userDefaultsSampleTimestamp - 1.0
  180. )
  181. XCTAssertEqual(
  182. manager2.currentRealtimeThrottlingRetryIntervalSeconds,
  183. userDefaultsSampleTimestamp - 2.0
  184. )
  185. manager1.realtimeRetryCount = 1
  186. manager2.realtimeRetryCount = 2
  187. XCTAssertEqual(manager1.realtimeRetryCount, 1)
  188. XCTAssertEqual(manager2.realtimeRetryCount, 2)
  189. manager1.lastFetchedTemplateVersion = "1"
  190. manager2.lastFetchedTemplateVersion = "2"
  191. XCTAssertEqual(manager1.lastFetchedTemplateVersion, "1")
  192. XCTAssertEqual(manager2.lastFetchedTemplateVersion, "2")
  193. manager1.lastActiveTemplateVersion = "1"
  194. manager2.lastActiveTemplateVersion = "2"
  195. XCTAssertEqual(manager1.lastActiveTemplateVersion, "1")
  196. XCTAssertEqual(manager2.lastActiveTemplateVersion, "2")
  197. }
  198. func testUserDefaultsReset() {
  199. let manager = UserDefaultsManager(appName: appName,
  200. bundleID: bundleID,
  201. namespace: fqNamespace1)
  202. manager.lastETag = "testETag"
  203. manager.resetUserDefaults()
  204. XCTAssertNil(manager.lastETag)
  205. }
  206. }