Open tylerFowler opened 1 year ago
Hi @tylerFowler 👋 Thank you for raising this feature request.
It would be super helpful if you could discuss more about what you are looking to check in your testing?
If you haven't seen already, there are already a few built-in TypeSet
specific TestCheckFunc
available in the helper/resource
package already, such as TestCheckTypeSetElemAttr
and TestCheckTypeSetElemNestedAttrs
. For checking a set contains expected values, these should cover most use cases.
Yeah, I was thinking more in the vein of custom test check funcs, where I want to simply range over set items in a custom function, perhaps calling APIs for each one to verify state, etc...
Thank you for that additional context, @tylerFowler.
The baked in terraform.State
for TestCheckFunc
usage is a vestige from Terraform 0.11 and earlier, where the testing code re-implemented logic from the core Terraform logic and the type system was very limited. I would imagine that it is more likely (due to the effort versus gains) that the testing code would provide a different type of abstraction (e.g. one from the state JSON) rather than refactor/enhance the old Terraform state code specifically for terraform-plugin-sdk concepts. We recently introduced the terraform-plugin-testing Go module and a future major version of that will likely remove terraform-plugin-sdk specifics so it is explicitly generic to work with any Go SDK (terraform-plugin-framework, terraform-plugin-go, terraform-plugin-sdk, or other hypothetical Go SDKs).
Is the API lookup available via data source(s) in the provider? In those cases, either using TestCheckTypeSetElemAttrPair
or Terraform configuration postcondition checks may be possible solutions that exist today, but tackle the use case in a different manner.
Currently there seems to be no way to retrieve an attribute (specifically a computed attribute but not limited to that) of type
schema.TypeSet
as aschema.Set
given an object of typeterraform.State
.Use-cases
The
Set
methods would be highly useful for use inresource.TestCheckFunc
s and result in cleaner, slimmer test check functions.