Some checks failed
CI Workflow / Check GoReleaser config (pull_request) Successful in 5s
CI Workflow / Test readiness for publishing provider (pull_request) Failing after 3m27s
CI Workflow / CI run tests (pull_request) Failing after 4m54s
CI Workflow / CI run build and linting (pull_request) Failing after 4m39s
CI Workflow / Code coverage report (pull_request) Has been skipped
269 lines
9.6 KiB
Go
269 lines
9.6 KiB
Go
package stackit_test
|
|
|
|
import (
|
|
"context"
|
|
_ "embed"
|
|
"os"
|
|
"reflect"
|
|
"regexp"
|
|
"testing"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
sqlserverflexalphaDatabase "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/database"
|
|
//nolint:staticcheck // used for acceptance testing
|
|
postgresFlexAlphaFlavor "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/flavor"
|
|
|
|
"github.com/hashicorp/terraform-plugin-framework/datasource"
|
|
tfResource "github.com/hashicorp/terraform-plugin-framework/resource"
|
|
|
|
"tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit"
|
|
postgresFlexAlphaDatabase "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/database"
|
|
postgresflexalphaFlavors "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/flavors"
|
|
postgresFlexAlphaInstance "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/instance"
|
|
postgresFlexAlphaUser "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/user"
|
|
sqlserverFlexAlphaInstance "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/instance"
|
|
sqlserverFlexAlphaUser "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexalpha/user"
|
|
sqlserverflexBetaDatabase "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexbeta/database"
|
|
sqlserverFlexBetaInstance "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexbeta/instance"
|
|
sqlserverFlexBetaUser "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexbeta/user"
|
|
|
|
"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/resource" //nolint:staticcheck // used for acceptance testing
|
|
)
|
|
|
|
//go:embed testdata/provider-credentials.tf
|
|
var providerCredentialConfig string
|
|
|
|
//go:embed testdata/provider-invalid-attribute.tf
|
|
var providerInvalidAttribute string
|
|
|
|
//go:embed testdata/provider-all-attributes.tf
|
|
var providerValidAttributes string
|
|
|
|
var testConfigProviderCredentials config.Variables
|
|
|
|
func TestMain(m *testing.M) {
|
|
testutils.Setup()
|
|
code := m.Run()
|
|
// shutdown()
|
|
os.Exit(code)
|
|
}
|
|
|
|
func TestUnitProviderHasChildDataSources_Basic(t *testing.T) {
|
|
expectedDataSources := []datasource.DataSource{
|
|
postgresFlexAlphaFlavor.NewFlavorDataSource(),
|
|
// postgresFlexAlphaFlavor.NewFlavorListDataSource,
|
|
postgresFlexAlphaDatabase.NewDatabaseDataSource(),
|
|
postgresFlexAlphaInstance.NewInstanceDataSource(),
|
|
postgresFlexAlphaUser.NewUserDataSource(),
|
|
postgresflexalphaFlavors.NewFlavorsDataSource(),
|
|
|
|
// sqlserverFlexAlphaFlavor.NewFlavorDataSource(),
|
|
sqlserverFlexAlphaInstance.NewInstanceDataSource(),
|
|
sqlserverFlexAlphaUser.NewUserDataSource(),
|
|
sqlserverflexalphaDatabase.NewDatabaseDataSource(),
|
|
|
|
sqlserverflexBetaDatabase.NewDatabaseDataSource(),
|
|
sqlserverFlexBetaInstance.NewInstanceDataSource(),
|
|
sqlserverFlexBetaUser.NewUserDataSource(),
|
|
// sqlserverFlexBetaFlavor.NewFlavorDataSource(),
|
|
}
|
|
provider, ok := stackit.New("testing")().(*stackit.Provider)
|
|
if !ok {
|
|
t.Fatal("could not assert provider type")
|
|
}
|
|
datasources := provider.DataSources(context.Background())
|
|
|
|
expectedMap := map[string]struct{}{}
|
|
for _, d := range expectedDataSources {
|
|
expectedMap[reflect.TypeOf(d).String()] = struct{}{}
|
|
}
|
|
|
|
actualMap := map[string]struct{}{}
|
|
for _, d := range datasources {
|
|
actualMap[reflect.TypeOf(d()).String()] = struct{}{}
|
|
}
|
|
|
|
if diff := cmp.Diff(expectedMap, actualMap); diff != "" {
|
|
t.Errorf("DataSources mismatch (-expected +actual):\n%s", diff)
|
|
}
|
|
}
|
|
|
|
func TestUnitProviderHasChildResources_Basic(t *testing.T) {
|
|
expectedResources := []tfResource.Resource{
|
|
postgresFlexAlphaInstance.NewInstanceResource(),
|
|
postgresFlexAlphaUser.NewUserResource(),
|
|
postgresFlexAlphaDatabase.NewDatabaseResource(),
|
|
|
|
sqlserverFlexAlphaInstance.NewInstanceResource(),
|
|
sqlserverFlexAlphaUser.NewUserResource(),
|
|
sqlserverflexalphaDatabase.NewDatabaseResource(),
|
|
|
|
sqlserverFlexBetaInstance.NewInstanceResource(),
|
|
sqlserverFlexBetaUser.NewUserResource(),
|
|
sqlserverflexBetaDatabase.NewDatabaseResource(),
|
|
}
|
|
provider, ok := stackit.New("testing")().(*stackit.Provider)
|
|
if !ok {
|
|
t.Fatal("could not assert provider type")
|
|
}
|
|
resources := provider.Resources(context.Background())
|
|
|
|
expectedMap := map[string]struct{}{}
|
|
for _, r := range expectedResources {
|
|
expectedMap[reflect.TypeOf(r).String()] = struct{}{}
|
|
}
|
|
|
|
actualMap := map[string]struct{}{}
|
|
for _, r := range resources {
|
|
actualMap[reflect.TypeOf(r()).String()] = struct{}{}
|
|
}
|
|
|
|
if diff := cmp.Diff(expectedMap, actualMap); diff != "" {
|
|
t.Errorf("Resources mismatch (-expected +actual):\n%s", diff)
|
|
}
|
|
}
|
|
|
|
func TestAccEnvVarServiceAccountPathValid(t *testing.T) {
|
|
t.Skip("needs refactoring")
|
|
// Check if acceptance tests should be run
|
|
if v := os.Getenv(resource.EnvTfAcc); v == "" {
|
|
t.Skipf(
|
|
"Acceptance tests skipped unless env '%s' set",
|
|
resource.EnvTfAcc,
|
|
)
|
|
return
|
|
}
|
|
|
|
tempHomeFolder := testutils.CreateTemporaryHome(true, t)
|
|
defer testutils.CleanupTemporaryHome(tempHomeFolder, t)
|
|
resource.Test(
|
|
t, resource.TestCase{
|
|
ProtoV6ProviderFactories: testutils.TestAccProtoV6ProviderFactories,
|
|
Steps: []resource.TestStep{
|
|
{
|
|
PreConfig: func() { testutils.SetTemporaryHome(tempHomeFolder) },
|
|
ConfigVariables: testConfigProviderCredentials,
|
|
Config: providerCredentialConfig,
|
|
},
|
|
},
|
|
},
|
|
)
|
|
}
|
|
|
|
func TestAccEnvVarServiceAccountPathInvalid(t *testing.T) {
|
|
t.Skip("needs refactoring")
|
|
t.Setenv("STACKIT_CREDENTIALS_PATH", "")
|
|
tempHomeFolder := testutils.CreateTemporaryHome(false, t)
|
|
defer testutils.CleanupTemporaryHome(tempHomeFolder, t)
|
|
resource.Test(
|
|
t, resource.TestCase{
|
|
ProtoV6ProviderFactories: testutils.TestAccProtoV6ProviderFactories,
|
|
Steps: []resource.TestStep{
|
|
{
|
|
PreConfig: func() { testutils.SetTemporaryHome(tempHomeFolder) },
|
|
ConfigVariables: testConfigProviderCredentials,
|
|
Config: providerCredentialConfig,
|
|
ExpectError: regexp.MustCompile(`undefined response type, status code 401`),
|
|
},
|
|
},
|
|
},
|
|
)
|
|
}
|
|
|
|
func TestAccCredentialsFileValid(t *testing.T) {
|
|
t.Skip("needs refactoring")
|
|
t.Setenv("STACKIT_CREDENTIALS_PATH", "")
|
|
tempHomeFolder := testutils.CreateTemporaryHome(true, t)
|
|
defer testutils.CleanupTemporaryHome(tempHomeFolder, t)
|
|
resource.Test(
|
|
t, resource.TestCase{
|
|
ProtoV6ProviderFactories: testutils.TestAccProtoV6ProviderFactories,
|
|
Steps: []resource.TestStep{
|
|
{
|
|
PreConfig: func() { testutils.SetTemporaryHome(tempHomeFolder) },
|
|
ConfigVariables: testConfigProviderCredentials,
|
|
Config: providerCredentialConfig,
|
|
},
|
|
},
|
|
},
|
|
)
|
|
}
|
|
|
|
func TestAccCredentialsFileInvalid(t *testing.T) {
|
|
t.Skip("needs refactoring")
|
|
t.Setenv("STACKIT_CREDENTIALS_PATH", "")
|
|
tempHomeFolder := testutils.CreateTemporaryHome(false, t)
|
|
defer testutils.CleanupTemporaryHome(tempHomeFolder, t)
|
|
resource.Test(
|
|
t, resource.TestCase{
|
|
ProtoV6ProviderFactories: testutils.TestAccProtoV6ProviderFactories,
|
|
Steps: []resource.TestStep{
|
|
{
|
|
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`),
|
|
},
|
|
},
|
|
},
|
|
)
|
|
}
|
|
|
|
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(
|
|
"Acceptance tests skipped unless env '%s' set",
|
|
resource.EnvTfAcc,
|
|
)
|
|
return
|
|
}
|
|
t.Setenv("STACKIT_CREDENTIALS_PATH", "")
|
|
tempHomeFolder := testutils.CreateTemporaryHome(true, t)
|
|
defer testutils.CleanupTemporaryHome(tempHomeFolder, t)
|
|
resource.Test(
|
|
t, resource.TestCase{
|
|
ProtoV6ProviderFactories: testutils.TestAccProtoV6ProviderFactories,
|
|
Steps: []resource.TestStep{
|
|
{
|
|
// valid provider attributes
|
|
ConfigVariables: testConfigProviderCredentials,
|
|
Config: providerValidAttributes,
|
|
},
|
|
},
|
|
},
|
|
)
|
|
}
|
|
|
|
func TestAccProviderConfigureAnInvalidValue(t *testing.T) {
|
|
t.Skip("needs refactoring")
|
|
// Check if acceptance tests should be run
|
|
if v := os.Getenv(resource.EnvTfAcc); v == "" {
|
|
t.Skipf(
|
|
"Acceptance tests skipped unless env '%s' set",
|
|
resource.EnvTfAcc,
|
|
)
|
|
return
|
|
}
|
|
|
|
t.Setenv("STACKIT_CREDENTIALS_PATH", "")
|
|
tempHomeFolder := testutils.CreateTemporaryHome(true, t)
|
|
defer testutils.CleanupTemporaryHome(tempHomeFolder, t)
|
|
resource.Test(
|
|
t, resource.TestCase{
|
|
ProtoV6ProviderFactories: testutils.TestAccProtoV6ProviderFactories,
|
|
Steps: []resource.TestStep{
|
|
{
|
|
// invalid test attribute should throw an error
|
|
ConfigVariables: testConfigProviderCredentials,
|
|
Config: providerInvalidAttribute,
|
|
ExpectError: regexp.MustCompile(`An argument named "test" is not expected here\.`),
|
|
},
|
|
},
|
|
},
|
|
)
|
|
}
|