Skip to content

Latest commit

 

History

History
78 lines (58 loc) · 4.41 KB

File metadata and controls

78 lines (58 loc) · 4.41 KB
page_title description
Plugin Development - Framework: Acceptance Tests
How to write acceptance tests for providers built on the framework. Acceptance tests imitate applying configuration files.

Acceptance Tests

-> Note: The Plugin Framework is in beta.

You can implement testing with the acceptance test framework shipped with SDKv2.

Writing and running tests is similar to SDKv2 providers, with the following exceptions:

Specify Providers

Use one of the resource.TestCase type ProtoV6ProviderFactories field for protocol version 6 or ProtoV5ProviderFactories field for protocol version 5. It is only necessary to test with the single protocol version matching the intended provider server.

Protocol Version 6

Use the providerserver.NewProtocol6WithError helper function to implement the provider server in the ProtoV6ProviderFactories field.

resource.Test(t, resource.TestCase{
	ProtoV6ProviderFactories: map[string]func() (tfprotov6.ProviderServer, error) {
		// newProvider is an example function that returns a provider.Provider
		"examplecloud": providerserver.NewProtocol6WithError(newProvider()),
	},
	Steps: []resource.TestStep{/* ... */},
})

Protocol Version 5

Use the providerserver.NewProtocol5WithError helper function to implement the provider server in the ProtoV5ProviderFactories field.

resource.Test(t, resource.TestCase{
	ProtoV5ProviderFactories: map[string]func() (tfprotov5.ProviderServer, error) {
		// newProvider is an example function that returns a provider.Provider
		"examplecloud": providerserver.NewProtocol5WithError(newProvider()),
	},
	Steps: []resource.TestStep{/* ... */},
})

Implement id Attribute

In SDKv2, resources and data sources automatically included an implicit, root level id attribute. In the framework, the id attribute is not implicitly added.

When testing resources and data sources without the id attribute, the acceptance testing framework will return errors such as:

testing_new_config.go:111: no "id" found in attributes
testing_new.go:53: no "id" found in attributes

To avoid this, add a root level id attribute to resource and data source schemas. Ensure the attribute value is appropriately written to state. Conventionally, id is a computed attribute that contains the identifier for the resource.

For example, in the Schema method implementation of a datasource.DataSource or resource.Resource:

func (r *ThingResource) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) {
	resp.Schema = schema.Schema{
		// ... potentially other schema configuration ...
		Attributes: map[string]schema.Attribute{
			// ... potentially other schema attributes ...
			"id": schema.StringAttribute{
				Computed: true,
			},
		},
	}
}