-
Notifications
You must be signed in to change notification settings - Fork 1.8k
feat(appcheck): implement RecaptchaEnterpriseProvider and tests #16155
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
ncooke3
wants to merge
32
commits into
main
Choose a base branch
from
nc/recaptcha-1
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+1,207
−44
Draft
Changes from 19 commits
Commits
Show all changes
32 commits
Select commit
Hold shift + click to select a range
33905d4
feat(appcheck): implement RecaptchaEnterpriseProvider and tests (#16150)
ncooke3 250212e
package.swift newline
ncooke3 5f894cb
fix(AppCheck): log error when siteKey is empty in provider init
ncooke3 0cee53b
tests: add manual e2e tests
ncooke3 8eecc10
feedback
ncooke3 b0e2039
review
ncooke3 0cbf732
update versions
ncooke3 bb35028
fixes and review
ncooke3 3c84e4a
Merge branch 'main' into nc/recaptcha-1
ncooke3 10ff653
fixes
ncooke3 c5d6cd4
app dele
ncooke3 4d84847
e2e
ncooke3 180b29f
podfile
ncooke3 cee38df
review:
ncooke3 098066d
Review
ncooke3 db54acf
fix podfile
ncooke3 4a67322
add fixes to e2e file
ncooke3 678bf77
e2e updates
ncooke3 197949c
delegate fixes
ncooke3 2c564e7
rewrite in swift
ncooke3 0abebb5
doc comments:
ncooke3 a977ee3
Refactor and modernize Recaptcha Enterprise provider testing
ncooke3 984b525
rename
ncooke3 39b2adb
public getter and setter for site key
ncooke3 94a1f8d
recaptcha factory rename and options handling
ncooke3 ce8264f
Merge remote-tracking branch 'origin/main' into nc/recaptcha-1
ncooke3 10c3814
recaptchanenterprise -> recaptcha renames
ncooke3 2fb8aed
renames cont
ncooke3 74817fd
logging improvements
ncooke3 fae69fa
Apply suggestion from @paulb777
ncooke3 7fd95eb
Update FirebaseAppCheck/Apps/FIRAppCheckTestApp/E2E_TESTING.md
ncooke3 e092cf9
Update FirebaseAppCheck/Apps/FIRAppCheckTestApp/E2E_TESTING.md
ncooke3 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
182 changes: 182 additions & 0 deletions
182
FirebaseAppCheck/Apps/FIRAppCheckTestApp/E2E_TESTING.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,182 @@ | ||
| # E2E Testing with FIRAppCheckTestApp | ||
|
|
||
| This document provides information on how to configure and run End-to-End (E2E) | ||
| tests for App Check providers using this sample app. | ||
|
|
||
| ## Configurability | ||
|
|
||
| The app's behavior can be configured using environment variables passed during | ||
| test execution. | ||
|
|
||
| ### Environment Variables | ||
|
|
||
| Starting with Xcode 13, you can pass environment variables directly to the | ||
| test runner by prefixing them with `TEST_RUNNER_`. The prefix is stripped when | ||
| it reaches the test process. | ||
|
|
||
| - **`TEST_RUNNER_RECAPTCHA_SITE_KEY`**: The reCAPTCHA Enterprise site key used | ||
|
ncooke3 marked this conversation as resolved.
Outdated
|
||
| by the `RecaptchaEnterpriseProvider`. | ||
| - **Access in Code**: Read via | ||
| `ProcessInfo.processInfo.environment["RECAPTCHA_SITE_KEY"]`. | ||
| - **`TEST_RUNNER_APP_CHECK_PROVIDER`**: Specifies which App Check provider | ||
| factory to use. | ||
| - **Supported Values**: `recaptcha` (default), `debug`. | ||
| - **Access in Code**: Read via | ||
| `ProcessInfo.processInfo.environment["APP_CHECK_PROVIDER"]`. | ||
|
|
||
| ### Manual Override | ||
|
|
||
| For local debugging and manual testing, you can override the environment | ||
| variables by setting `manualProviderOverride` in `AppDelegate.swift`: | ||
|
|
||
| ```swift | ||
| let manualProviderOverride: String? = "debug" | ||
| ``` | ||
|
|
||
| ## Running Tests | ||
|
|
||
| The commands below should be run from the **repository root**. | ||
|
|
||
| ### Prerequisites | ||
| - Ensure you have a local checkout of the `app-check` repository if you are | ||
| developing it locally. Set `FIREBASE_APP_CHECK_LOCAL_PATH` to point to it. | ||
|
|
||
| ### Sample Commands | ||
|
|
||
| #### Run tests with reCAPTCHA Enterprise provider | ||
|
ncooke3 marked this conversation as resolved.
Outdated
|
||
|
|
||
| ```bash | ||
| export TEST_RUNNER_RECAPTCHA_SITE_KEY="your_site_key_here" | ||
| export TEST_RUNNER_APP_CHECK_PROVIDER="recaptcha" | ||
| export FIREBASE_APP_CHECK_LOCAL_PATH="/path/to/your/local/app-check" | ||
| SIM_ID=$(xcrun simctl list devices available | grep "iPhone" | grep -E -o '[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}' | head -n 1) | ||
|
|
||
| xcodebuild test \ | ||
| -workspace FirebaseAppCheck/Apps/FIRAppCheckTestApp/FIRAppCheckTestApp.xcworkspace \ | ||
| -scheme FIRAppCheckTestApp \ | ||
| -destination "platform=iOS Simulator,id=$SIM_ID" | ||
| ``` | ||
|
|
||
| #### Run tests with Debug provider | ||
|
|
||
| ```bash | ||
| export TEST_RUNNER_APP_CHECK_PROVIDER="debug" | ||
| export FIREBASE_APP_CHECK_LOCAL_PATH="/path/to/your/local/app-check" | ||
| SIM_ID=$(xcrun simctl list devices available | grep "iPhone" | grep -E -o '[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}' | head -n 1) | ||
|
|
||
| xcodebuild test \ | ||
| -workspace FirebaseAppCheck/Apps/FIRAppCheckTestApp/FIRAppCheckTestApp.xcworkspace \ | ||
| -scheme FIRAppCheckTestApp \ | ||
| -destination "platform=iOS Simulator,id=$SIM_ID" | ||
| ``` | ||
| *Note: The Debug provider might require you to register the generated debug token in the Firebase Console for the tests to pass if they interact with live services.* | ||
|
|
||
| ### Running and Testing in Xcode | ||
|
|
||
| If you prefer to use the Xcode UI instead of `xcodebuild`, follow these steps | ||
| to configure the environment: | ||
|
|
||
| #### 1. Resolve Local Dependency | ||
| If you are using a local checkout of the `app-check` repository, Xcode must be | ||
| launched from the terminal with the `FIREBASE_APP_CHECK_LOCAL_PATH` environment | ||
| variable set so that Swift Package Manager can resolve it correctly. | ||
|
|
||
| Run the following command from the repository root: | ||
| ```bash | ||
| open --env FIREBASE_APP_CHECK_LOCAL_PATH=/path/to/your/local/app-check FirebaseAppCheck/Apps/FIRAppCheckTestApp/FIRAppCheckTestApp.xcworkspace | ||
| ``` | ||
|
|
||
| #### 2. Configure Provider and Site Key | ||
| You have two options to configure the provider when running or testing in Xcode: | ||
|
|
||
| **Option A: Via Manual Override in Code (Easiest for Running the App)** | ||
| If you just want to quickly run the app with a specific provider without | ||
| changing scheme settings: | ||
| 1. Open `AppDelegate.swift`. | ||
| 2. Locate `manualProviderOverride` in `application(_:didFinishLaunchingWithOptions:)`. | ||
| 3. Set it to your desired provider: | ||
| ```swift | ||
| let manualProviderOverride: String? = "recaptcha" | ||
| ``` | ||
| *Note: Remember to revert this change before committing.* | ||
|
|
||
| **Option B: Via Xcode Scheme (Recommended for Tests)** | ||
| This avoids modifying code and works for both running and testing. | ||
| 1. In Xcode, go to **Product > Scheme > Edit Scheme...** (or press `⌘<`). | ||
| 2. Select the **Run** or **Test** action in the left sidebar, depending on | ||
| what you are doing. | ||
| 3. Go to the **Arguments** tab. | ||
| 4. In the **Environment Variables** section, add: | ||
| * `APP_CHECK_PROVIDER`: Set to `recaptcha` or `debug`. | ||
| * `RECAPTCHA_SITE_KEY`: Set to your reCAPTCHA site key (required for | ||
| `recaptcha`). | ||
|
|
||
| ### Running and Testing with CocoaPods | ||
|
|
||
| If you prefer to use the CocoaPods workflow instead of SPM: | ||
|
|
||
| #### 0. Clean Up State (Optional but Recommended) | ||
| If you are switching from the SPM workflow or encounter issues, it is | ||
| recommended to clean up the CocoaPods state first: | ||
| ```bash | ||
| pod deintegrate FirebaseAppCheck/Apps/FIRAppCheckTestApp/FIRAppCheckTestApp.xcodeproj | ||
| rm -rf FirebaseAppCheck/Apps/FIRAppCheckTestApp/FIRAppCheckTestApp.xcworkspace | ||
| rm -f FirebaseAppCheck/Apps/FIRAppCheckTestApp/Podfile.lock | ||
| ``` | ||
|
|
||
| #### 1. Install Dependencies | ||
| To ensure a clean update and avoid conflicts with local development paths or | ||
| stale state, it is recommended to remove the existing `Pods` directory and | ||
| `Podfile.lock` before updating. | ||
|
|
||
| Run the following command from the repository root: | ||
| ```bash | ||
| rm -rf FirebaseAppCheck/Apps/FIRAppCheckTestApp/Pods | ||
| rm -f FirebaseAppCheck/Apps/FIRAppCheckTestApp/Podfile.lock | ||
| FIREBASE_APP_CHECK_LOCAL_PATH="/path/to/your/local/app-check" pod update --repo-update --project-directory=FirebaseAppCheck/Apps/FIRAppCheckTestApp/ | ||
| ``` | ||
|
|
||
| #### 2. Open Workspace | ||
| Open the generated CocoaPods workspace instead of the project file: | ||
| ```bash | ||
| open FirebaseAppCheck/Apps/FIRAppCheckTestApp/FIRAppCheckTestApp.xcworkspace | ||
| ``` | ||
|
|
||
| #### 3. Remove SPM Dependencies (If needed) | ||
| By default, the project file is configured for SPM. To avoid duplicate symbol | ||
| issues or conflicting resolutions when using CocoaPods: | ||
| 1. In Xcode, select the project in the file navigator. | ||
| 2. Select the project file at the top (not a target). | ||
| 3. Go to the **Package Dependencies** tab. | ||
| 4. Remove the `firebase-ios-sdk` or `app-check` package references if they | ||
| appear there. | ||
| 5. Also, select the `FIRAppCheckTestApp` target, go to the **General** tab, | ||
| and scroll down to **Frameworks, Libraries, and Embedded Content**. | ||
| 6. Remove any SPM-resolved frameworks from this list. | ||
|
|
||
| #### 4. Configure and Run | ||
| You can configure the provider and site key either via the Xcode Scheme or by | ||
| passing environment variables to `xcodebuild`. | ||
|
|
||
| **Via Xcode Scheme:** | ||
| Follow the instructions in **[Running and Testing in Xcode](#running-and-testing-in-xcode)**. | ||
|
|
||
| **Via `xcodebuild` (Command Line):** | ||
| Run the following command from the repository root, replacing the site key with | ||
| your own: | ||
| ```bash | ||
| export TEST_RUNNER_RECAPTCHA_SITE_KEY="your_site_key_here" | ||
| export TEST_RUNNER_APP_CHECK_PROVIDER="recaptcha" | ||
| SIM_ID=$(xcrun simctl list devices available | grep "iPhone" | grep -E -o '[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}' | head -n 1) | ||
|
|
||
| xcodebuild test \ | ||
| -workspace FirebaseAppCheck/Apps/FIRAppCheckTestApp/FIRAppCheckTestApp.xcworkspace \ | ||
| -scheme FIRAppCheckTestApp \ | ||
| -destination "platform=iOS Simulator,id=$SIM_ID" | ||
| ``` | ||
| *(Note: See [Running Tests](#running-tests) for how to dynamically find a valid | ||
| simulator destination).* | ||
|
|
||
| ## Project Structure | ||
|
|
||
| - **`FIRAppCheckTestAppTests`**: A hosted unit test target containing the test cases. It runs inside the app process to have access to the full app context. | ||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
todo: Address feedback in PR separately.