A collection of functions and common patterns to test Terraform code using Go, and Terratest.
This library wraps Terratest to provide simplified functions for common testing patterns in Terraform modules. The problem that this library aims to solve is to make it so easy to write (terraform) tests that you don't need to be a profficient Go developer to write them.
Install it using Go get:
go get github.com/Excoriate/tftest
- Go >= 1.18
NOTE: For the tools used in this project, please check the Makefile, and the Taskfile files. You'll also need pre-commit installed.
package simple
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/excoriate/tftest/pkg/scenario"
)
func TestSimpleOptionsPlanScenario(t *testing.T) {
s, err := scenario.New(t, "../../data/tf-random")
assert.NoErrorf(t, err, "Failed to create scenario: %s", err)
s.Stg.PlanStage(t, s.GetTerraformOptions())
}
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/excoriate/tftest/pkg/scenario"
)
func TestSpecificResourcesExpectedChanges(t *testing.T) {
s, err := scenario.New(t, "../../data/tf-random")
assert.NoErrorf(t, err, "Failed to create scenario: %s", err)
s.Stg.PlanWithSpecificResourcesThatWillChange(t, s.GetTerraformOptions(), []string{"random_id.this"})
}
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/excoriate/tftest/pkg/scenario"
)
func TestLifecycle(t *testing.T) {
s, err := scenario.New(t, "../../data/tf-random")
assert.NoErrorf(t, err, "Failed to create scenario: %s", err)
defer s.Stg.DestroyStage(t, s.GetTerraformOptions())
s.Stg.PlanStageWithAnySortOfChanges(t, s.GetTerraformOptions())
s.Stg.ApplyStage(t, s.GetTerraformOptions())
}
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/excoriate/tftest/pkg/scenario"
)
func TestWithVarOptionsValid(t *testing.T) {
workdir := "../../data/tf-random"
s, err := scenario.NewWithOptions(t, workdir,
scenario.WithVarFiles(workdir, "fixtures/override-random-password.tfvars"))
assert.NoErrorf(t, err, "Failed to create scenario: %s", err)
s.Stg.PlanWithSpecificVariableValueToExpect(t, s.GetTerraformOptions(), "random_length_password", "25")
}
More examples will be added in the examples folder.
There are more API(s) available for the following common patterns:
- A strict validation of the terraform directory (it validates whether it's an actual terraform module, directory integrity and others).
- A strict validation of
terraform.tfvars
files. - Cloud Provider API(s). Currently, AWS is supported.
- Add more tests
- Add a set of pre-defined error messages
Note: This is still work in progress, however, I'll be happy to receive any feedback or contribution. Ensure you've read the contributing guide before doing so.
Please read our contributing guide.