Skip to content

Commit

Permalink
Factor out testutil package (#1280)
Browse files Browse the repository at this point in the history
* Add new testutil package
* Includes new functions for handling test specific environment use cases.
  • Loading branch information
benashz authored Jan 5, 2022
1 parent 443069c commit 5660a05
Show file tree
Hide file tree
Showing 124 changed files with 790 additions and 704 deletions.
11 changes: 6 additions & 5 deletions GNUmakefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,13 @@ build: fmtcheck
go install

test: fmtcheck
go test $(TEST) || exit 1
echo $(TEST) | \
xargs -t -n4 go test $(TESTARGS) -timeout=5m -parallel=4
TF_ACC= go test $(TESTARGS) -timeout 10m -parallel=4 ./...

testacc: fmtcheck
TF_ACC=1 go test $(TEST) -v $(TESTARGS) -timeout 20m
TF_ACC=1 go test -v $(TESTARGS) -timeout 20m ./...

testacc-ent:
make testacc TF_ACC_ENTERPRISE=1

dev: fmtcheck
go build -o terraform-provider-vault
Expand Down Expand Up @@ -65,4 +66,4 @@ ifeq (,$(wildcard $(GOPATH)/src/$(WEBSITE_REPO)))
endif
@$(MAKE) -C $(GOPATH)/src/$(WEBSITE_REPO) website-provider-test PROVIDER_PATH=$(shell pwd) PROVIDER_NAME=$(PKG_NAME)

.PHONY: build test testacc vet fmt fmtcheck errcheck test-compile website website-test
.PHONY: build test testacc testacc-ent vet fmt fmtcheck errcheck test-compile website website-test
6 changes: 3 additions & 3 deletions generated/datasources/transform/decode/role_name_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (
"github.com/hashicorp/terraform-provider-vault/generated/resources/transform/role"
"github.com/hashicorp/terraform-provider-vault/generated/resources/transform/transformation"
"github.com/hashicorp/terraform-provider-vault/schema"
"github.com/hashicorp/terraform-provider-vault/util"
"github.com/hashicorp/terraform-provider-vault/testutil"
"github.com/hashicorp/terraform-provider-vault/vault"
)

Expand All @@ -27,7 +27,7 @@ var roleNameTestProvider = func() *schema.Provider {
func TestDecodeBasic(t *testing.T) {
path := acctest.RandomWithPrefix("transform")
resource.Test(t, resource.TestCase{
PreCheck: func() { util.TestEntPreCheck(t) },
PreCheck: func() { testutil.TestEntPreCheck(t) },
Providers: map[string]*sdk_schema.Provider{
"vault": roleNameTestProvider.SchemaProvider(),
},
Expand Down Expand Up @@ -72,7 +72,7 @@ data "vault_transform_decode_role_name" "test" {
func TestDecodeBatch(t *testing.T) {
path := acctest.RandomWithPrefix("transform")
resource.Test(t, resource.TestCase{
PreCheck: func() { util.TestEntPreCheck(t) },
PreCheck: func() { testutil.TestEntPreCheck(t) },
Providers: map[string]*sdk_schema.Provider{
"vault": roleNameTestProvider.SchemaProvider(),
},
Expand Down
6 changes: 3 additions & 3 deletions generated/datasources/transform/encode/role_name_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (
"github.com/hashicorp/terraform-provider-vault/generated/resources/transform/role"
"github.com/hashicorp/terraform-provider-vault/generated/resources/transform/transformation"
"github.com/hashicorp/terraform-provider-vault/schema"
"github.com/hashicorp/terraform-provider-vault/util"
"github.com/hashicorp/terraform-provider-vault/testutil"
"github.com/hashicorp/terraform-provider-vault/vault"
)

Expand All @@ -27,7 +27,7 @@ var roleNameTestProvider = func() *schema.Provider {
func TestEncodeBasic(t *testing.T) {
path := acctest.RandomWithPrefix("transform")
resource.Test(t, resource.TestCase{
PreCheck: func() { util.TestEntPreCheck(t) },
PreCheck: func() { testutil.TestEntPreCheck(t) },
Providers: map[string]*sdk_schema.Provider{
"vault": roleNameTestProvider.SchemaProvider(),
},
Expand Down Expand Up @@ -72,7 +72,7 @@ data "vault_transform_encode_role_name" "test" {
func TestEncodeBatch(t *testing.T) {
path := acctest.RandomWithPrefix("transform")
resource.Test(t, resource.TestCase{
PreCheck: func() { util.TestEntPreCheck(t) },
PreCheck: func() { testutil.TestEntPreCheck(t) },
Providers: map[string]*sdk_schema.Provider{
"vault": roleNameTestProvider.SchemaProvider(),
},
Expand Down
4 changes: 2 additions & 2 deletions generated/resources/transform/alphabet/name_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (
"github.com/hashicorp/vault/api"

"github.com/hashicorp/terraform-provider-vault/schema"
"github.com/hashicorp/terraform-provider-vault/util"
"github.com/hashicorp/terraform-provider-vault/testutil"
"github.com/hashicorp/terraform-provider-vault/vault"
)

Expand All @@ -26,7 +26,7 @@ func TestAlphabetName(t *testing.T) {
path := acctest.RandomWithPrefix("transform")

resource.Test(t, resource.TestCase{
PreCheck: func() { util.TestEntPreCheck(t) },
PreCheck: func() { testutil.TestEntPreCheck(t) },
Providers: map[string]*sdk_schema.Provider{
"vault": nameTestProvider.SchemaProvider(),
},
Expand Down
4 changes: 2 additions & 2 deletions generated/resources/transform/role/name_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (
"github.com/hashicorp/vault/api"

"github.com/hashicorp/terraform-provider-vault/schema"
"github.com/hashicorp/terraform-provider-vault/util"
"github.com/hashicorp/terraform-provider-vault/testutil"
"github.com/hashicorp/terraform-provider-vault/vault"
)

Expand All @@ -27,7 +27,7 @@ func TestRoleName(t *testing.T) {
role := acctest.RandomWithPrefix("test-role")

resource.Test(t, resource.TestCase{
PreCheck: func() { util.TestEntPreCheck(t) },
PreCheck: func() { testutil.TestEntPreCheck(t) },
Providers: map[string]*sdk_schema.Provider{
"vault": nameTestProvider.SchemaProvider(),
},
Expand Down
4 changes: 2 additions & 2 deletions generated/resources/transform/template/name_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (

"github.com/hashicorp/terraform-provider-vault/generated/resources/transform/alphabet"
"github.com/hashicorp/terraform-provider-vault/schema"
"github.com/hashicorp/terraform-provider-vault/util"
"github.com/hashicorp/terraform-provider-vault/testutil"
"github.com/hashicorp/terraform-provider-vault/vault"
)

Expand All @@ -28,7 +28,7 @@ func TestTemplateName(t *testing.T) {
path := acctest.RandomWithPrefix("transform")

resource.Test(t, resource.TestCase{
PreCheck: func() { util.TestEntPreCheck(t) },
PreCheck: func() { testutil.TestEntPreCheck(t) },
Providers: map[string]*sdk_schema.Provider{
"vault": nameTestProvider.SchemaProvider(),
},
Expand Down
4 changes: 2 additions & 2 deletions generated/resources/transform/transformation/name_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (
"github.com/hashicorp/vault/api"

"github.com/hashicorp/terraform-provider-vault/schema"
"github.com/hashicorp/terraform-provider-vault/util"
"github.com/hashicorp/terraform-provider-vault/testutil"
"github.com/hashicorp/terraform-provider-vault/vault"
)

Expand All @@ -26,7 +26,7 @@ func TestTransformationName(t *testing.T) {
path := acctest.RandomWithPrefix("transform")

resource.Test(t, resource.TestCase{
PreCheck: func() { util.TestEntPreCheck(t) },
PreCheck: func() { testutil.TestEntPreCheck(t) },
Providers: map[string]*sdk_schema.Provider{
"vault": nameTestProvider.SchemaProvider(),
},
Expand Down
144 changes: 144 additions & 0 deletions testutil/testutil.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
package testutil

import (
"io/ioutil"
"os"
"testing"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/mitchellh/go-homedir"
)

func TestAccPreCheck(t *testing.T) {
FatalTestEnvUnset(t, "VAULT_ADDR", "VAULT_TOKEN")
}

func TestEntPreCheck(t *testing.T) {
SkipTestAccEnt(t)
TestAccPreCheck(t)
}

func SkipTestAcc(t *testing.T) {
SkipTestEnvUnset(t, resource.TestEnvVar)
}

func SkipTestAccEnt(t *testing.T) {
SkipTestEnvUnset(t, "TF_ACC_ENTERPRISE")
}

// SkipTestEnvSet skips the test if any of the provided environment variables
// have a non-empty value.
func SkipTestEnvSet(t *testing.T, envVars ...string) []string {
t.Helper()
return handleTestEnvSetF(t.Skipf, envVars...)
}

// SkipTestEnvUnset skips the test if any of the provided environment variables
// are empty/unset.
func SkipTestEnvUnset(t *testing.T, envVars ...string) []string {
t.Helper()
return handleTestEnvUnsetF(t.Skipf, envVars...)
}

// FatalTestEnvUnset fails the test if any of the provided environment variables
// have non-empty values.
func FatalTestEnvUnset(t *testing.T, envVars ...string) []string {
t.Helper()
return handleTestEnvUnsetF(t.Fatalf, envVars...)
}

func handleTestEnvUnsetF(f func(f string, args ...interface{}), envVars ...string) []string {
return handleTestEnv(func(k, v string) {
if v == "" {
f("%q must be set", k)
}
}, envVars...)
}

func handleTestEnvSetF(f func(f string, args ...interface{}), envVars ...string) []string {
return handleTestEnv(func(k, v string) {
if v != "" {
f("%q is set", k)
}
}, envVars...)
}

func handleTestEnv(f func(k, v string), envVars ...string) []string {
var result []string
for _, k := range envVars {
v := os.Getenv(k)
f(k, v)
result = append(result, v)
}
return result
}

func GetTestAWSCreds(t *testing.T) (string, string) {
v := SkipTestEnvUnset(t, "AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY")
return v[0], v[1]
}

func GetTestAWSRegion(t *testing.T) string {
v := SkipTestEnvUnset(t, "AWS_DEFAULT_REGION")
return v[0]
}

type AzureTestConf struct {
SubscriptionID, TenantID, ClientID, ClientSecret, Scope string
}

func GetTestAzureConf(t *testing.T) *AzureTestConf {
v := SkipTestEnvUnset(t,
"AZURE_SUBSCRIPTION_ID",
"AZURE_TENANT_ID",
"AZURE_CLIENT_ID",
"AZURE_CLIENT_SECRET",
"AZURE_ROLE_SCOPE")

return &AzureTestConf{
SubscriptionID: v[0],
TenantID: v[1],
ClientID: v[2],
ClientSecret: v[3],
Scope: v[4],
}
}

func GetTestGCPCreds(t *testing.T) (string, string) {
v := SkipTestEnvUnset(t, "GOOGLE_CREDENTIALS", "GOOGLE_PROJECT")

maybeCreds, project := v[0], v[1]
maybeFilename := maybeCreds
if maybeCreds[0] == '~' {
var err error
maybeFilename, err = homedir.Expand(maybeCreds)
if err != nil {
t.Fatal("Error reading GOOGLE_CREDENTIALS: " + err.Error())
}
}

if _, err := os.Stat(maybeFilename); err == nil {
contents, err := ioutil.ReadFile(maybeFilename)
if err != nil {
t.Fatal("Error reading GOOGLE_CREDENTIALS: " + err.Error())
}
maybeCreds = string(contents)
}

return maybeCreds, project
}

func GetTestRMQCreds(t *testing.T) (string, string, string) {
v := SkipTestEnvUnset(t, "RMQ_CONNECTION_URI", "RMQ_USERNAME", "RMQ_PASSWORD")
return v[0], v[1], v[2]
}

func GetTestADCreds(t *testing.T) (string, string, string) {
v := SkipTestEnvUnset(t, "AD_BINDDN", "AD_BINDPASS", "AD_URL")
return v[0], v[1], v[2]
}

func GetTestNomadCreds(t *testing.T) (string, string) {
v := SkipTestEnvUnset(t, "NOMAD_ADDR", "NOMAD_TOKEN")
return v[0], v[1]
}
55 changes: 0 additions & 55 deletions util/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,9 @@ import (
"fmt"
"log"
"net/http"
"os"
"reflect"
"regexp"
"strings"
"testing"
"time"

"github.com/hashicorp/go-retryablehttp"
Expand Down Expand Up @@ -101,59 +99,6 @@ func IsExpiredTokenErr(err error) bool {
return false
}

func TestAccPreCheck(t *testing.T) {
if v := os.Getenv("VAULT_ADDR"); v == "" {
t.Fatal("VAULT_ADDR must be set for acceptance tests")
}
if v := os.Getenv("VAULT_TOKEN"); v == "" {
t.Fatal("VAULT_TOKEN must be set for acceptance tests")
}
}

func TestEntPreCheck(t *testing.T) {
isEnterprise := os.Getenv("TF_ACC_ENTERPRISE")
if isEnterprise == "" {
t.Skip("TF_ACC_ENTERPRISE is not set, test is applicable only for Enterprise version of Vault")
}
if v := os.Getenv("VAULT_ADDR"); v == "" {
t.Fatal("VAULT_ADDR must be set for acceptance tests")
}
if v := os.Getenv("VAULT_TOKEN"); v == "" {
t.Fatal("VAULT_TOKEN must be set for acceptance tests")
}
}

func GetTestADCreds(t *testing.T) (string, string, string) {
adBindDN := os.Getenv("AD_BINDDN")
adBindPass := os.Getenv("AD_BINDPASS")
adURL := os.Getenv("AD_URL")

if adBindDN == "" {
t.Skip("AD_BINDDN not set")
}
if adBindPass == "" {
t.Skip("AD_BINDPASS not set")
}
if adURL == "" {
t.Skip("AD_URL not set")
}
return adBindDN, adBindPass, adURL
}

func GetTestNomadCreds(t *testing.T) (string, string) {
address := os.Getenv("NOMAD_ADDR")
token := os.Getenv("NOMAD_TOKEN")

if address == "" {
t.Skip("NOMAD_ADDR not set")
}
if token == "" {
t.Skip("NOMAD_TOKEN not set")
}

return address, token
}

func TestCheckResourceAttrJSON(name, key, expectedValue string) resource.TestCheckFunc {
return func(s *terraform.State) error {
resourceState, ok := s.RootModule().Resources[name]
Expand Down
6 changes: 4 additions & 2 deletions vault/data_identity_entity_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,16 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
"github.com/hashicorp/vault/api"

"github.com/hashicorp/terraform-provider-vault/testutil"
)

func TestDataSourceIdentityEntityName(t *testing.T) {
entity := acctest.RandomWithPrefix("test-entity")

resource.Test(t, resource.TestCase{
Providers: testProviders,
PreCheck: func() { testAccPreCheck(t) },
PreCheck: func() { testutil.TestAccPreCheck(t) },
Steps: []resource.TestStep{
{
Config: testDataSourceIdentityEntity_configName(entity),
Expand All @@ -38,7 +40,7 @@ func TestDataSourceIdentityEntityAlias(t *testing.T) {

resource.Test(t, resource.TestCase{
Providers: testProviders,
PreCheck: func() { testAccPreCheck(t) },
PreCheck: func() { testutil.TestAccPreCheck(t) },
Steps: []resource.TestStep{
{
Config: testDataSourceIdentityEntity_configAlias(entity),
Expand Down
Loading

0 comments on commit 5660a05

Please sign in to comment.