FIRAppCheckIntegrationTests.m 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. /*
  2. * Copyright 2020 Google LLC
  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. //
  18. // #import <OCMock/OCMock.h>
  19. //
  20. // #import <TargetConditionals.h>
  21. //
  22. ////#import "FirebaseAppCheck/Sources/Core/TokenRefresh/FIRAppCheckTokenRefresher.h"
  23. // #import "FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FIRAppCheck.h"
  24. // #import "FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FIRAppCheckProviderFactory.h"
  25. // #import "FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FIRAppCheckToken.h"
  26. //
  27. // #import "FirebaseAppCheck/Interop/FIRAppCheckInterop.h"
  28. // #import "FirebaseAppCheck/Interop/FIRAppCheckTokenResultInterop.h"
  29. // #import "FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FIRDeviceCheckProvider.h"
  30. // #import "FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FIRDeviceCheckProviderFactory.h"
  31. //
  32. // #import "FirebaseCore/Extension/FirebaseCoreInternal.h"
  33. //
  34. // NS_ASSUME_NONNULL_BEGIN
  35. //
  36. // #if FIR_DEVICE_CHECK_SUPPORTED_TARGETS
  37. //
  38. //@interface DummyAppCheckProvider : NSObject <FIRAppCheckProvider>
  39. //@end
  40. //
  41. //@implementation DummyAppCheckProvider
  42. //
  43. //- (void)getTokenWithCompletion:(void (^)(FIRAppCheckToken *_Nullable, NSError *_Nullable))handler
  44. //{
  45. // FIRAppCheckToken *token = [[FIRAppCheckToken alloc] initWithToken:@"Token"
  46. // expirationDate:[NSDate distantFuture]];
  47. // handler(token, nil);
  48. // }
  49. //
  50. //@end
  51. //
  52. //@interface AppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
  53. //@end
  54. //
  55. //@implementation AppCheckProviderFactory
  56. //
  57. //- (nullable id<FIRAppCheckProvider>)createProviderWithApp:(nonnull FIRApp *)app {
  58. // return [[DummyAppCheckProvider alloc] init];
  59. // }
  60. //
  61. //@end
  62. //
  63. //@interface FIRAppCheckIntegrationTests : XCTestCase
  64. //
  65. //@property(nonatomic, nullable) id mockProviderFactory;
  66. //@property(nonatomic, nullable) id mockAppCheckProvider;
  67. //@property(nonatomic, nullable) id mockTokenRefresher;
  68. //
  69. //- (void)testDefaultAppCheckProvider FIR_DEVICE_CHECK_PROVIDER_AVAILABILITY;
  70. //
  71. //@end
  72. //
  73. //@implementation FIRAppCheckIntegrationTests
  74. //
  75. //- (void)setUp {
  76. // [super setUp];
  77. //
  78. // // Disable token refresher to avoid any unexpected async tasks being scheduled.
  79. // [self disableTokenRefresher];
  80. //
  81. // self.mockAppCheckProvider = OCMProtocolMock(@protocol(FIRAppCheckProvider));
  82. // self.mockProviderFactory = OCMProtocolMock(@protocol(FIRAppCheckProviderFactory));
  83. // }
  84. //
  85. //- (void)tearDown {
  86. // [FIRApp resetApps];
  87. //
  88. // if (@available(iOS 11.0, macOS 10.15, macCatalyst 13.0, tvOS 11.0, watchOS 9.0, *)) {
  89. // // Recover default provider factory.
  90. // [FIRAppCheck setAppCheckProviderFactory:[[FIRDeviceCheckProviderFactory alloc] init]];
  91. // }
  92. //
  93. // [self.mockTokenRefresher stopMocking];
  94. // self.mockTokenRefresher = nil;
  95. // [self.mockProviderFactory stopMocking];
  96. // self.mockProviderFactory = nil;
  97. // [self.mockAppCheckProvider stopMocking];
  98. // self.mockAppCheckProvider = nil;
  99. //
  100. // [super tearDown];
  101. // }
  102. //
  103. //- (void)testDefaultAppCheckProvider {
  104. // NSString *appName = @"testDefaultAppCheckProvider";
  105. //
  106. // // 1. Expect FIRDeviceCheckProvider to be instantiated.
  107. //
  108. // id deviceCheckProviderMock = OCMClassMock([FIRDeviceCheckProvider class]);
  109. // id appValidationArg = [OCMArg checkWithBlock:^BOOL(FIRApp *app) {
  110. // XCTAssertEqualObjects(app.name, appName);
  111. // return YES;
  112. // }];
  113. //
  114. // OCMStub([deviceCheckProviderMock alloc]).andReturn(deviceCheckProviderMock);
  115. // OCMExpect([deviceCheckProviderMock initWithApp:appValidationArg])
  116. // .andReturn(deviceCheckProviderMock);
  117. //
  118. // // 2. Configure Firebase
  119. // [self configureAppWithName:appName];
  120. //
  121. // FIRApp *app = [FIRApp appNamed:appName];
  122. // XCTAssertNotNil(FIR_COMPONENT(FIRAppCheckInterop, app.container));
  123. //
  124. // // 3. Verify
  125. // OCMVerifyAll(deviceCheckProviderMock);
  126. //
  127. // // 4. Cleanup
  128. // // Recover default provider factory.
  129. // [FIRAppCheck setAppCheckProviderFactory:[[FIRDeviceCheckProviderFactory alloc] init]];
  130. // [deviceCheckProviderMock stopMocking];
  131. // }
  132. //
  133. //// Tests that use the Keychain require a host app and Swift Package Manager
  134. //// does not support adding a host app to test targets.
  135. // #if !SWIFT_PACKAGE
  136. //
  137. //// Skip keychain tests on Catalyst and macOS. Tests are skipped because they
  138. //// involve interactions with the keychain that require a provisioning profile.
  139. //// See go/firebase-macos-keychain-popups for more details.
  140. // #if !TARGET_OS_MACCATALYST && !TARGET_OS_OSX
  141. //
  142. //- (void)testSetAppCheckProviderFactoryWithDefaultApp {
  143. // NSString *appName = kFIRDefaultAppName;
  144. //
  145. // // 1. Set App Check Provider Factory.
  146. // [FIRAppCheck setAppCheckProviderFactory:self.mockProviderFactory];
  147. //
  148. // // 2. Expect factory to be used on [FIRApp configure].
  149. // id appValidationArg = [OCMArg checkWithBlock:^BOOL(FIRApp *app) {
  150. // XCTAssertEqual(app.name, appName);
  151. // return YES;
  152. // }];
  153. // OCMExpect([self.mockProviderFactory createProviderWithApp:appValidationArg])
  154. // .andReturn(self.mockAppCheckProvider);
  155. //
  156. // // 3. Configure FIRApp.
  157. // [self configureAppWithName:appName];
  158. //
  159. // // 4. Expect App Check Provider to be called on getToken.
  160. // FIRAppCheckToken *fakeToken = [[FIRAppCheckToken alloc] initWithToken:@"token"
  161. // expirationDate:[NSDate distantFuture]];
  162. // id completionBlockArg = [OCMArg invokeBlockWithArgs:fakeToken, [NSNull null], nil];
  163. // OCMExpect([self.mockAppCheckProvider getTokenWithCompletion:completionBlockArg]);
  164. //
  165. // // 5. Call getToken and check the result.
  166. // FIRApp *app = [FIRApp appNamed:appName];
  167. // id<FIRAppCheckInterop> appCheck = FIR_COMPONENT(FIRAppCheckInterop, app.container);
  168. //
  169. // XCTestExpectation *completionExpectation =
  170. // [self expectationWithDescription:@"completionExpectation"];
  171. // [appCheck getTokenForcingRefresh:YES
  172. // completion:^(id<FIRAppCheckTokenResultInterop> tokenResult) {
  173. // [completionExpectation fulfill];
  174. // XCTAssertNil(tokenResult.error);
  175. // XCTAssertNotNil(tokenResult);
  176. // XCTAssertEqualObjects(tokenResult.token, fakeToken.token);
  177. // XCTAssertNil(tokenResult.error);
  178. // }];
  179. // [self waitForExpectations:@[ completionExpectation ] timeout:0.5];
  180. //
  181. // // 6. Verify mocks
  182. // OCMVerifyAll(self.mockProviderFactory);
  183. // OCMVerifyAll(self.mockAppCheckProvider);
  184. // }
  185. //
  186. // #endif // !TARGET_OS_MACCATALYST && !TARGET_OS_OSX
  187. //
  188. // #endif // !SWIFT_PACKAGE
  189. //
  190. // #pragma mark - Helpers
  191. //
  192. //- (void)configureAppWithName:(NSString *)appName {
  193. // FIROptions *options =
  194. // [[FIROptions alloc] initWithGoogleAppID:@"1:100000000000:ios:aaaaaaaaaaaaaaaaaaaaaaaa"
  195. // GCMSenderID:@"sender_id"];
  196. // [FIRApp configureWithName:appName options:options];
  197. // }
  198. //
  199. //- (void)usageExample {
  200. // // Set a custom app check provider factory for the default FIRApp.
  201. // [FIRAppCheck setAppCheckProviderFactory:[[AppCheckProviderFactory alloc] init]];
  202. // [FIRApp configure];
  203. //
  204. // FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:@"path"];
  205. // [FIRApp configureWithName:@"AppName" options:options];
  206. //
  207. // FIRApp *defaultApp = [FIRApp defaultApp];
  208. //
  209. // id<FIRAppCheckInterop> defaultAppCheck = FIR_COMPONENT(FIRAppCheckInterop,
  210. // defaultApp.container);
  211. //
  212. // [defaultAppCheck getTokenForcingRefresh:NO
  213. // completion:^(id<FIRAppCheckTokenResultInterop> tokenResult) {
  214. // NSLog(@"Token: %@", tokenResult.token);
  215. // if (tokenResult.error) {
  216. // NSLog(@"Error: %@", tokenResult.error);
  217. // }
  218. // }];
  219. // }
  220. //
  221. //- (void)disableTokenRefresher {
  222. // self.mockTokenRefresher = OCMClassMock([FIRAppCheckTokenRefresher class]);
  223. // OCMStub([self.mockTokenRefresher alloc]).andReturn(self.mockTokenRefresher);
  224. // OCMStub([self.mockTokenRefresher initWithRefreshResult:[OCMArg any] settings:[OCMArg any]])
  225. // .andReturn(self.mockTokenRefresher);
  226. // }
  227. //
  228. //@end
  229. //
  230. // #endif // FIR_DEVICE_CHECK_SUPPORTED_TARGETS
  231. //
  232. // NS_ASSUME_NONNULL_END