chore: refactor tests
Some checks failed
CI Workflow / Check GoReleaser config (pull_request) Successful in 14s
CI Workflow / CI (pull_request) Failing after 12m47s
CI Workflow / Code coverage report (pull_request) Has been skipped
CI Workflow / Test readiness for publishing provider (pull_request) Successful in 30m54s
Some checks failed
CI Workflow / Check GoReleaser config (pull_request) Successful in 14s
CI Workflow / CI (pull_request) Failing after 12m47s
CI Workflow / Code coverage report (pull_request) Has been skipped
CI Workflow / Test readiness for publishing provider (pull_request) Successful in 30m54s
This commit is contained in:
parent
d6627617af
commit
ca2a261514
15 changed files with 1088 additions and 294 deletions
|
|
@ -1,5 +1,3 @@
|
|||
// Copyright (c) STACKIT
|
||||
|
||||
package stackit_test
|
||||
|
||||
import (
|
||||
|
|
@ -7,17 +5,15 @@ import (
|
|||
"fmt"
|
||||
"log/slog"
|
||||
"os"
|
||||
"path"
|
||||
"regexp"
|
||||
"runtime"
|
||||
"testing"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-testing/helper/acctest"
|
||||
"github.com/joho/godotenv"
|
||||
"tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/internal/testutils"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-testing/config"
|
||||
"github.com/hashicorp/terraform-plugin-testing/helper/acctest"
|
||||
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
|
||||
"tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/testutil"
|
||||
)
|
||||
|
||||
//go:embed testdata/provider-credentials.tf
|
||||
|
|
@ -29,15 +25,7 @@ var providerInvalidAttribute string
|
|||
//go:embed testdata/provider-all-attributes.tf
|
||||
var providerValidAttributes string
|
||||
|
||||
var testConfigProviderCredentials = config.Variables{
|
||||
"project_id": config.StringVariable(testutil.ProjectId),
|
||||
"name": config.StringVariable(
|
||||
fmt.Sprintf(
|
||||
"tf-acc-prov%s",
|
||||
acctest.RandStringFromCharSet(3, acctest.CharSetAlphaNum),
|
||||
),
|
||||
),
|
||||
}
|
||||
var testConfigProviderCredentials config.Variables
|
||||
|
||||
func setup() {
|
||||
err := godotenv.Load()
|
||||
|
|
@ -46,6 +34,18 @@ func setup() {
|
|||
return
|
||||
}
|
||||
slog.Info("loaded .env file")
|
||||
|
||||
testConfigProviderCredentials = config.Variables{
|
||||
"project_id": config.StringVariable(os.Getenv("TF_ACC_PROJECT_ID")),
|
||||
"region": config.StringVariable(os.Getenv("TF_ACC_REGION")),
|
||||
"service_account_key_path": config.StringVariable(os.Getenv("TF_ACC_SERVICE_ACCOUNT_FILE")),
|
||||
"name": config.StringVariable(
|
||||
fmt.Sprintf(
|
||||
"tf-acc-prov%s",
|
||||
acctest.RandStringFromCharSet(3, acctest.CharSetAlphaNum),
|
||||
),
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
|
|
@ -55,86 +55,7 @@ func TestMain(m *testing.M) {
|
|||
os.Exit(code)
|
||||
}
|
||||
|
||||
// Helper function to obtain the home directory on different systems.
|
||||
// Based on os.UserHomeDir().
|
||||
func getHomeEnvVariableName() string {
|
||||
env := "HOME"
|
||||
switch runtime.GOOS {
|
||||
case "windows":
|
||||
env = "USERPROFILE"
|
||||
case "plan9":
|
||||
env = "home"
|
||||
}
|
||||
return env
|
||||
}
|
||||
|
||||
// create temporary home and initialize the credentials file as well
|
||||
func createTemporaryHome(createValidCredentialsFile bool, t *testing.T) string {
|
||||
// create a temporary file
|
||||
tempHome, err := os.MkdirTemp("", "tempHome")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create temporary home directory: %v", err)
|
||||
}
|
||||
|
||||
// create credentials file in temp directory
|
||||
stackitFolder := path.Join(tempHome, ".stackit")
|
||||
if err := os.Mkdir(stackitFolder, 0o750); err != nil {
|
||||
t.Fatalf("Failed to create stackit folder: %v", err)
|
||||
}
|
||||
|
||||
filePath := path.Join(stackitFolder, "credentials.json")
|
||||
file, err := os.Create(filePath)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create credentials file: %v", err)
|
||||
}
|
||||
defer func() {
|
||||
if err := file.Close(); err != nil {
|
||||
t.Fatalf("Error while closing the file: %v", err)
|
||||
}
|
||||
}()
|
||||
|
||||
// Define content, default = invalid token
|
||||
token := "foo_token"
|
||||
if createValidCredentialsFile {
|
||||
token = testutil.GetTestProjectServiceAccountJson("")
|
||||
}
|
||||
content := fmt.Sprintf(`
|
||||
{
|
||||
"STACKIT_SERVICE_ACCOUNT_TOKEN": "%s"
|
||||
}`, token)
|
||||
|
||||
if _, err = file.WriteString(content); err != nil {
|
||||
t.Fatalf("Error writing to file: %v", err)
|
||||
}
|
||||
|
||||
return tempHome
|
||||
}
|
||||
|
||||
// Function to overwrite the home folder
|
||||
func setTemporaryHome(tempHomePath string) {
|
||||
env := getHomeEnvVariableName()
|
||||
if err := os.Setenv(env, tempHomePath); err != nil {
|
||||
fmt.Printf("Error setting temporary home directory %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// cleanup the temporary home and reset the environment variable
|
||||
func cleanupTemporaryHome(tempHomePath string, t *testing.T) {
|
||||
if err := os.RemoveAll(tempHomePath); err != nil {
|
||||
t.Fatalf("Error cleaning up temporary folder: %v", err)
|
||||
}
|
||||
originalHomeDir, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to restore home directory back to normal: %v", err)
|
||||
}
|
||||
// revert back to original home folder
|
||||
env := getHomeEnvVariableName()
|
||||
if err := os.Setenv(env, originalHomeDir); err != nil {
|
||||
fmt.Printf("Error resetting temporary home directory %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccEnvVarTokenValid(t *testing.T) {
|
||||
func TestAccEnvVarServiceAccountPathValid(t *testing.T) {
|
||||
// Check if acceptance tests should be run
|
||||
if v := os.Getenv(resource.EnvTfAcc); v == "" {
|
||||
t.Skipf(
|
||||
|
|
@ -143,14 +64,14 @@ func TestAccEnvVarTokenValid(t *testing.T) {
|
|||
return
|
||||
}
|
||||
|
||||
t.Setenv("STACKIT_CREDENTIALS_PATH", "")
|
||||
tempHomeFolder := createTemporaryHome(false, t)
|
||||
defer cleanupTemporaryHome(tempHomeFolder, t)
|
||||
// t.Setenv("STACKIT_CREDENTIALS_PATH", "")
|
||||
tempHomeFolder := testutils.CreateTemporaryHome(true, t)
|
||||
defer testutils.CleanupTemporaryHome(tempHomeFolder, t)
|
||||
resource.Test(t, resource.TestCase{
|
||||
ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories,
|
||||
ProtoV6ProviderFactories: testutils.TestAccProtoV6ProviderFactories,
|
||||
Steps: []resource.TestStep{
|
||||
{
|
||||
PreConfig: func() { setTemporaryHome(tempHomeFolder) },
|
||||
PreConfig: func() { testutils.SetTemporaryHome(tempHomeFolder) },
|
||||
ConfigVariables: testConfigProviderCredentials,
|
||||
Config: providerCredentialConfig,
|
||||
},
|
||||
|
|
@ -158,16 +79,16 @@ func TestAccEnvVarTokenValid(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestAccEnvVarTokenInvalid(t *testing.T) {
|
||||
func TestAccEnvVarServiceAccountPathInvalid(t *testing.T) {
|
||||
t.Skip("needs refactoring")
|
||||
t.Setenv("STACKIT_CREDENTIALS_PATH", "")
|
||||
t.Setenv("STACKIT_SERVICE_ACCOUNT_TOKEN", "foo")
|
||||
tempHomeFolder := createTemporaryHome(false, t)
|
||||
defer cleanupTemporaryHome(tempHomeFolder, t)
|
||||
tempHomeFolder := testutils.CreateTemporaryHome(false, t)
|
||||
defer testutils.CleanupTemporaryHome(tempHomeFolder, t)
|
||||
resource.Test(t, resource.TestCase{
|
||||
ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories,
|
||||
ProtoV6ProviderFactories: testutils.TestAccProtoV6ProviderFactories,
|
||||
Steps: []resource.TestStep{
|
||||
{
|
||||
PreConfig: func() { setTemporaryHome(tempHomeFolder) },
|
||||
PreConfig: func() { testutils.SetTemporaryHome(tempHomeFolder) },
|
||||
ConfigVariables: testConfigProviderCredentials,
|
||||
Config: providerCredentialConfig,
|
||||
ExpectError: regexp.MustCompile(`undefined response type, status code 401`),
|
||||
|
|
@ -177,15 +98,15 @@ func TestAccEnvVarTokenInvalid(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestAccCredentialsFileValid(t *testing.T) {
|
||||
t.Skip("needs refactoring")
|
||||
t.Setenv("STACKIT_CREDENTIALS_PATH", "")
|
||||
t.Setenv("STACKIT_SERVICE_ACCOUNT_TOKEN", "")
|
||||
tempHomeFolder := createTemporaryHome(true, t)
|
||||
defer cleanupTemporaryHome(tempHomeFolder, t)
|
||||
tempHomeFolder := testutils.CreateTemporaryHome(true, t)
|
||||
defer testutils.CleanupTemporaryHome(tempHomeFolder, t)
|
||||
resource.Test(t, resource.TestCase{
|
||||
ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories,
|
||||
ProtoV6ProviderFactories: testutils.TestAccProtoV6ProviderFactories,
|
||||
Steps: []resource.TestStep{
|
||||
{
|
||||
PreConfig: func() { setTemporaryHome(tempHomeFolder) },
|
||||
PreConfig: func() { testutils.SetTemporaryHome(tempHomeFolder) },
|
||||
ConfigVariables: testConfigProviderCredentials,
|
||||
Config: providerCredentialConfig,
|
||||
},
|
||||
|
|
@ -194,15 +115,15 @@ func TestAccCredentialsFileValid(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestAccCredentialsFileInvalid(t *testing.T) {
|
||||
t.Skip("needs refactoring")
|
||||
t.Setenv("STACKIT_CREDENTIALS_PATH", "")
|
||||
t.Setenv("STACKIT_SERVICE_ACCOUNT_TOKEN", "")
|
||||
tempHomeFolder := createTemporaryHome(false, t)
|
||||
defer cleanupTemporaryHome(tempHomeFolder, t)
|
||||
tempHomeFolder := testutils.CreateTemporaryHome(false, t)
|
||||
defer testutils.CleanupTemporaryHome(tempHomeFolder, t)
|
||||
resource.Test(t, resource.TestCase{
|
||||
ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories,
|
||||
ProtoV6ProviderFactories: testutils.TestAccProtoV6ProviderFactories,
|
||||
Steps: []resource.TestStep{
|
||||
{
|
||||
PreConfig: func() { setTemporaryHome(tempHomeFolder) },
|
||||
PreConfig: func() { testutils.SetTemporaryHome(tempHomeFolder) },
|
||||
ConfigVariables: testConfigProviderCredentials,
|
||||
Config: providerCredentialConfig,
|
||||
ExpectError: regexp.MustCompile(`Jwt is not in(\r\n|\r|\n)the form of Header.Payload.Signature`),
|
||||
|
|
@ -212,6 +133,7 @@ func TestAccCredentialsFileInvalid(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestAccProviderConfigureValidValues(t *testing.T) {
|
||||
t.Skip("needs refactoring")
|
||||
// Check if acceptance tests should be run
|
||||
if v := os.Getenv(resource.EnvTfAcc); v == "" {
|
||||
t.Skipf(
|
||||
|
|
@ -219,18 +141,11 @@ func TestAccProviderConfigureValidValues(t *testing.T) {
|
|||
resource.EnvTfAcc)
|
||||
return
|
||||
}
|
||||
// use service account token for these tests
|
||||
token, err := getServiceAccountToken()
|
||||
if err != nil {
|
||||
t.Fatalf("Can't get token: %v", err)
|
||||
}
|
||||
|
||||
t.Setenv("STACKIT_CREDENTIALS_PATH", "")
|
||||
t.Setenv("STACKIT_SERVICE_ACCOUNT_TOKEN", token)
|
||||
tempHomeFolder := createTemporaryHome(true, t)
|
||||
defer cleanupTemporaryHome(tempHomeFolder, t)
|
||||
tempHomeFolder := testutils.CreateTemporaryHome(true, t)
|
||||
defer testutils.CleanupTemporaryHome(tempHomeFolder, t)
|
||||
resource.Test(t, resource.TestCase{
|
||||
ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories,
|
||||
ProtoV6ProviderFactories: testutils.TestAccProtoV6ProviderFactories,
|
||||
Steps: []resource.TestStep{
|
||||
{ // valid provider attributes
|
||||
ConfigVariables: testConfigProviderCredentials,
|
||||
|
|
@ -248,18 +163,12 @@ func TestAccProviderConfigureAnInvalidValue(t *testing.T) {
|
|||
resource.EnvTfAcc)
|
||||
return
|
||||
}
|
||||
// use service account token for these tests
|
||||
token, err := getServiceAccountToken()
|
||||
if err != nil {
|
||||
t.Fatalf("Can't get token: %v", err)
|
||||
}
|
||||
|
||||
t.Setenv("STACKIT_CREDENTIALS_PATH", "")
|
||||
t.Setenv("STACKIT_SERVICE_ACCOUNT_TOKEN", token)
|
||||
tempHomeFolder := createTemporaryHome(true, t)
|
||||
defer cleanupTemporaryHome(tempHomeFolder, t)
|
||||
tempHomeFolder := testutils.CreateTemporaryHome(true, t)
|
||||
defer testutils.CleanupTemporaryHome(tempHomeFolder, t)
|
||||
resource.Test(t, resource.TestCase{
|
||||
ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories,
|
||||
ProtoV6ProviderFactories: testutils.TestAccProtoV6ProviderFactories,
|
||||
Steps: []resource.TestStep{
|
||||
{ // invalid test attribute should throw an error
|
||||
ConfigVariables: testConfigProviderCredentials,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue