-
Notifications
You must be signed in to change notification settings - Fork 13
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
Tests are executed 5 times each time #194
Comments
Btw applicable only to datasource tests |
Hi @gerbil 👋 Thank you for submitting this issue. This testing logic behavior is certainly confusing as the testing logic currently abstracts a few different Terraform commands per test step. It is not that the test itself is running multiple times, but the data source read is being invoked multiple times. This design choice was mainly to cover provider developer gotchas that were present in older versions of Terraform itself and due to unfortunate behaviors caused simply by using the prior provider development SDK, terraform-plugin-sdk. Essentially a One thing we could potentially do right now is remove the explicit Thanks again for the report. |
…e state shimming when possible (#223) Reference: hashicorp/terraform-plugin-sdk#515 Reference: #194 Reference: #222 Reference: https://developer.hashicorp.com/terraform/cli/commands/refresh This change replaces the usage of explicit refresh commands by instead calling the next command with the relevant refresh flags. Separating the refresh from plan was previously done with the idea that the testing logic may introduce further assertion hooks based on that explicit refresh. Over time though, the Terraform recommendations for refreshing and planning have solidified around always recommending to use a plan with behavior changing flags as necessary. Even the Terraform CLI implementation of the refresh command itself has been shifted to call a plan with special flags. This should reduce testing times decently as it means that the testing logic will skip spinning up and tearing down any relevant providers two times per `TestStep` and whatever time would be associated with Terraform CLI loading for those commands. Comparing the testing performed across this Go module: Prior: `TF_ACC=1 go test -count=1 ./... 111.07s user 59.37s system 233% cpu 1:12.99 total` Now: `TF_ACC=1 go test -count=1 ./... 90.81s user 48.25s system 229% cpu 1:00.54 total` The separated refresh also prevented `PreApply` plan checks from catching certain situations because the refreshed state could cause the plan to be missing changes.
Hi again @gerbil 👋 terraform-plugin-testing v1.6.0 removed separate Beyond this, any more changes within the testing logic to help with this would likely be fairly complex to implement since it means parsing Terraform configurations, such as detecting data source only configurations. Are you okay with the current situation and explanations to close this? |
Sure, thank you! |
I'm going to lock this issue because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues. |
terraform-plugin-testing version
Relevant provider source code
Terraform Configuration Files
Expected Behavior
Test should be executed only once
Actual Behavior
Test was executed 5 times (based on fmt.Println in GetGlobalSync() func)
$ TF_ACC=1 go test ./internal/test/ -v
=== RUN TestAccFileSyncDataSource
request URL: https://xxx/admin/config/file/sync
request URL: https://xxx/admin/config/file/sync
request URL: https://xxx/admin/config/file/sync
request URL: https://xxx/admin/config/file/sync
request URL: https://xxx/admin/config/file/sync
--- PASS: TestAccFileSyncDataSource (21.23s)
PASS
ok terraform-provider-opswat/internal/test 23.468s
Steps to Reproduce
git clone https://github.com/gerbil/terraform-provider-opswat
$ TF_ACC=1 go test ./internal/test/ -v
The text was updated successfully, but these errors were encountered: