testing: Allow acceptance test to run as unit test

This commit adds a flag to acceptance tests in order to make
appropriately named tests work during `make test` irrespective of the
TF_ACC environment variable. This should only be used on tests which are
known to be fast.
This commit is contained in:
James Nugent 2016-06-11 12:55:14 +01:00
parent 5bf9a95f8c
commit 9c7cf639b3
1 changed files with 11 additions and 3 deletions

View File

@ -40,6 +40,13 @@ type ImportStateCheckFunc func([]*terraform.InstanceState) error
// When the destroy plan is executed, the config from the last TestStep // When the destroy plan is executed, the config from the last TestStep
// is used to plan it. // is used to plan it.
type TestCase struct { type TestCase struct {
// OverrideEnvVar allows a test to run regardless of the TF_ACC
// environment variable. This should be used with care - only for
// fast tests on local resources (e.g. remote state with a local
// backend) but can be used to increase confidence in correct
// operation of Terraform without waiting for a full acctest run.
OverrideEnvVar bool
// PreCheck, if non-nil, will be called before any test steps are // PreCheck, if non-nil, will be called before any test steps are
// executed. It will only be executed in the case that the steps // executed. It will only be executed in the case that the steps
// would run, so it can be used for some validation before running // would run, so it can be used for some validation before running
@ -181,8 +188,9 @@ type TestStep struct {
// output. // output.
func Test(t TestT, c TestCase) { func Test(t TestT, c TestCase) {
// We only run acceptance tests if an env var is set because they're // We only run acceptance tests if an env var is set because they're
// slow and generally require some outside configuration. // slow and generally require some outside configuration. You can opt out
if os.Getenv(TestEnvVar) == "" { // of this with OverrideEnvVar on individual TestCases.
if os.Getenv(TestEnvVar) == "" && !c.OverrideEnvVar {
t.Skip(fmt.Sprintf( t.Skip(fmt.Sprintf(
"Acceptance tests skipped unless env '%s' set", "Acceptance tests skipped unless env '%s' set",
TestEnvVar)) TestEnvVar))
@ -198,7 +206,7 @@ func Test(t TestT, c TestCase) {
log.SetOutput(logWriter) log.SetOutput(logWriter)
// We require verbose mode so that the user knows what is going on. // We require verbose mode so that the user knows what is going on.
if !testTesting && !testing.Verbose() && !isUnitTest { if !testTesting && !testing.Verbose() && !isUnitTest && !c.OverrideEnvVar {
t.Fatal("Acceptance tests must be run with the -v flag on tests") t.Fatal("Acceptance tests must be run with the -v flag on tests")
return return
} }