184 lines
4.8 KiB
Go
184 lines
4.8 KiB
Go
package digitalocean
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"github.com/aws/aws-sdk-go/aws/session"
|
|
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
|
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
|
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
|
|
)
|
|
|
|
const testNamePrefix = "tf-acc-test-"
|
|
|
|
var testAccProvider *schema.Provider
|
|
var testAccProviders map[string]*schema.Provider
|
|
var testAccProviderFactories map[string]func() (*schema.Provider, error)
|
|
|
|
func init() {
|
|
testAccProvider = Provider()
|
|
testAccProviders = map[string]*schema.Provider{
|
|
"digitalocean": testAccProvider,
|
|
}
|
|
testAccProviderFactories = map[string]func() (*schema.Provider, error){
|
|
"digitalocean": func() (*schema.Provider, error) {
|
|
return testAccProvider, nil
|
|
},
|
|
}
|
|
}
|
|
|
|
func TestProvider(t *testing.T) {
|
|
if err := Provider().InternalValidate(); err != nil {
|
|
t.Fatalf("err: %s", err)
|
|
}
|
|
}
|
|
|
|
func TestProvider_impl(t *testing.T) {
|
|
var _ *schema.Provider = Provider()
|
|
}
|
|
|
|
func testAccPreCheck(t *testing.T) {
|
|
if v := os.Getenv("DIGITALOCEAN_TOKEN"); v == "" {
|
|
t.Fatal("DIGITALOCEAN_TOKEN must be set for acceptance tests")
|
|
}
|
|
|
|
err := testAccProvider.Configure(context.Background(), terraform.NewResourceConfigRaw(nil))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func TestURLOverride(t *testing.T) {
|
|
customEndpoint := "https://mock-api.internal.example.com/"
|
|
|
|
rawProvider := Provider()
|
|
raw := map[string]interface{}{
|
|
"token": "12345",
|
|
"api_endpoint": customEndpoint,
|
|
}
|
|
|
|
diags := rawProvider.Configure(context.Background(), terraform.NewResourceConfigRaw(raw))
|
|
if diags.HasError() {
|
|
t.Fatalf("provider configure failed: %s", diagnosticsToString(diags))
|
|
}
|
|
|
|
meta := rawProvider.Meta()
|
|
if meta == nil {
|
|
t.Fatalf("Expected metadata, got nil")
|
|
}
|
|
|
|
client := meta.(*CombinedConfig).godoClient()
|
|
if client.BaseURL.String() != customEndpoint {
|
|
t.Fatalf("Expected %s, got %s", customEndpoint, client.BaseURL.String())
|
|
}
|
|
}
|
|
|
|
func TestURLDefault(t *testing.T) {
|
|
rawProvider := Provider()
|
|
raw := map[string]interface{}{
|
|
"token": "12345",
|
|
}
|
|
|
|
diags := rawProvider.Configure(context.Background(), terraform.NewResourceConfigRaw(raw))
|
|
if diags.HasError() {
|
|
t.Fatalf("provider configure failed: %s", diagnosticsToString(diags))
|
|
}
|
|
|
|
meta := rawProvider.Meta()
|
|
if meta == nil {
|
|
t.Fatal("Expected metadata, got nil")
|
|
}
|
|
|
|
client := meta.(*CombinedConfig).godoClient()
|
|
if client.BaseURL.String() != "https://api.digitalocean.com" {
|
|
t.Fatalf("Expected %s, got %s", "https://api.digitalocean.com", client.BaseURL.String())
|
|
}
|
|
}
|
|
|
|
func diagnosticsToString(diags diag.Diagnostics) string {
|
|
diagsAsStrings := make([]string, len(diags))
|
|
for i, diag := range diags {
|
|
diagsAsStrings[i] = diag.Summary
|
|
}
|
|
|
|
return strings.Join(diagsAsStrings, "; ")
|
|
}
|
|
|
|
func TestSpaceAPIDefaultEndpoint(t *testing.T) {
|
|
rawProvider := Provider()
|
|
raw := map[string]interface{}{
|
|
"token": "12345",
|
|
"spaces_access_id": "abcdef",
|
|
"spaces_secret_key": "xyzzy",
|
|
}
|
|
|
|
diags := rawProvider.Configure(context.Background(), terraform.NewResourceConfigRaw(raw))
|
|
if diags.HasError() {
|
|
t.Fatalf("provider configure failed: %s", diagnosticsToString(diags))
|
|
}
|
|
|
|
meta := rawProvider.Meta()
|
|
if meta == nil {
|
|
t.Fatalf("Expected metadata, got nil")
|
|
}
|
|
|
|
var client *session.Session
|
|
var err error
|
|
client, err = meta.(*CombinedConfig).spacesClient("sfo2")
|
|
if err != nil {
|
|
t.Fatalf("Failed to create Spaces client: %s", err)
|
|
}
|
|
|
|
expectedEndpoint := "https://sfo2.digitaloceanspaces.com"
|
|
if *client.Config.Endpoint != expectedEndpoint {
|
|
t.Fatalf("Expected %s, got %s", expectedEndpoint, *client.Config.Endpoint)
|
|
}
|
|
}
|
|
|
|
func TestSpaceAPIEndpointOverride(t *testing.T) {
|
|
customSpacesEndpoint := "https://{{.Region}}.not-digitalocean-domain.com"
|
|
|
|
rawProvider := Provider()
|
|
raw := map[string]interface{}{
|
|
"token": "12345",
|
|
"spaces_endpoint": customSpacesEndpoint,
|
|
"spaces_access_id": "abcdef",
|
|
"spaces_secret_key": "xyzzy",
|
|
}
|
|
|
|
diags := rawProvider.Configure(context.Background(), terraform.NewResourceConfigRaw(raw))
|
|
if diags.HasError() {
|
|
t.Fatalf("provider configure failed: %s", diagnosticsToString(diags))
|
|
}
|
|
|
|
meta := rawProvider.Meta()
|
|
if meta == nil {
|
|
t.Fatal("Expected metadata, got nil")
|
|
}
|
|
|
|
var client *session.Session
|
|
var err error
|
|
client, err = meta.(*CombinedConfig).spacesClient("sfo2")
|
|
if err != nil {
|
|
t.Fatalf("Failed to create Spaces client: %s", err)
|
|
}
|
|
|
|
expectedEndpoint := "https://sfo2.not-digitalocean-domain.com"
|
|
if *client.Config.Endpoint != expectedEndpoint {
|
|
t.Fatalf("Expected %s, got %s", expectedEndpoint, *client.Config.Endpoint)
|
|
}
|
|
}
|
|
|
|
func randomTestName() string {
|
|
return randomName(testNamePrefix, 10)
|
|
}
|
|
|
|
func randomName(prefix string, length int) string {
|
|
return fmt.Sprintf("%s%s", prefix, acctest.RandString(length))
|
|
}
|