mirror of
https://github.com/opentofu/opentofu.git
synced 2025-01-07 06:33:53 -06:00
68dfc3046d
faster The acceptance tests for etcdv3, oss and manta were not validating required env variablea, chosing to assume that if one was running acceptance tests they had already configured the credentials. It was not always clear if this was a bug in the tests or the provider, so I opted to make the tests fail faster when required attributes were unset (or "").
131 lines
3.9 KiB
Go
131 lines
3.9 KiB
Go
package manta
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"path"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/hashicorp/terraform/backend"
|
|
"github.com/joyent/triton-go/storage"
|
|
)
|
|
|
|
func testACC(t *testing.T) {
|
|
skip := os.Getenv("TF_ACC") == "" && os.Getenv("TF_MANTA_TEST") == ""
|
|
if skip {
|
|
t.Log("Manta backend tests require setting TF_ACC or TF_MANTA_TEST")
|
|
t.Skip()
|
|
}
|
|
skip = os.Getenv("TRITON_ACCOUNT") == "" && os.Getenv("SDC_ACCOUNT") == ""
|
|
if skip {
|
|
t.Fatal("Manta backend tests require setting TRITON_ACCOUNT or SDC_ACCOUNT")
|
|
}
|
|
skip = os.Getenv("TRITON_KEY_ID") == "" && os.Getenv("SDC_KEY_ID") == ""
|
|
if skip {
|
|
t.Fatal("Manta backend tests require setting TRITON_KEY_ID or SDC_KEY_ID")
|
|
}
|
|
}
|
|
|
|
func TestBackend_impl(t *testing.T) {
|
|
var _ backend.Backend = new(Backend)
|
|
}
|
|
|
|
func TestBackend(t *testing.T) {
|
|
testACC(t)
|
|
|
|
directory := fmt.Sprintf("terraform-remote-manta-test-%x", time.Now().Unix())
|
|
keyName := "testState"
|
|
|
|
b := backend.TestBackendConfig(t, New(), backend.TestWrapConfig(map[string]interface{}{
|
|
"path": directory,
|
|
"object_name": keyName,
|
|
})).(*Backend)
|
|
|
|
createMantaFolder(t, b.storageClient, directory)
|
|
defer deleteMantaFolder(t, b.storageClient, directory)
|
|
|
|
backend.TestBackendStates(t, b)
|
|
}
|
|
|
|
func TestBackendLocked(t *testing.T) {
|
|
testACC(t)
|
|
|
|
directory := fmt.Sprintf("terraform-remote-manta-test-%x", time.Now().Unix())
|
|
keyName := "testState"
|
|
|
|
b1 := backend.TestBackendConfig(t, New(), backend.TestWrapConfig(map[string]interface{}{
|
|
"path": directory,
|
|
"object_name": keyName,
|
|
})).(*Backend)
|
|
|
|
b2 := backend.TestBackendConfig(t, New(), backend.TestWrapConfig(map[string]interface{}{
|
|
"path": directory,
|
|
"object_name": keyName,
|
|
})).(*Backend)
|
|
|
|
createMantaFolder(t, b1.storageClient, directory)
|
|
defer deleteMantaFolder(t, b1.storageClient, directory)
|
|
|
|
backend.TestBackendStateLocks(t, b1, b2)
|
|
backend.TestBackendStateForceUnlock(t, b1, b2)
|
|
}
|
|
|
|
func createMantaFolder(t *testing.T, mantaClient *storage.StorageClient, directoryName string) {
|
|
// Be clear about what we're doing in case the user needs to clean
|
|
// this up later.
|
|
//t.Logf("creating Manta directory %s", directoryName)
|
|
err := mantaClient.Dir().Put(context.Background(), &storage.PutDirectoryInput{
|
|
DirectoryName: path.Join(mantaDefaultRootStore, directoryName),
|
|
})
|
|
if err != nil {
|
|
t.Fatal("failed to create test Manta directory:", err)
|
|
}
|
|
}
|
|
|
|
func deleteMantaFolder(t *testing.T, mantaClient *storage.StorageClient, directoryName string) {
|
|
//warning := "WARNING: Failed to delete the test Manta directory. It may have been left in your Manta account and may incur storage charges. (error was %s)"
|
|
|
|
// first we have to get rid of the env objects, or we can't delete the directory
|
|
objs, err := mantaClient.Dir().List(context.Background(), &storage.ListDirectoryInput{
|
|
DirectoryName: path.Join(mantaDefaultRootStore, directoryName),
|
|
})
|
|
if err != nil {
|
|
t.Fatal("failed to retrieve directory listing")
|
|
}
|
|
|
|
for _, obj := range objs.Entries {
|
|
if obj.Type == "directory" {
|
|
ojs, err := mantaClient.Dir().List(context.Background(), &storage.ListDirectoryInput{
|
|
DirectoryName: path.Join(mantaDefaultRootStore, directoryName, obj.Name),
|
|
})
|
|
if err != nil {
|
|
t.Fatal("failed to retrieve directory listing")
|
|
}
|
|
for _, oj := range ojs.Entries {
|
|
err := mantaClient.Objects().Delete(context.Background(), &storage.DeleteObjectInput{
|
|
ObjectPath: path.Join(mantaDefaultRootStore, directoryName, obj.Name, oj.Name),
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
err := mantaClient.Objects().Delete(context.Background(), &storage.DeleteObjectInput{
|
|
ObjectPath: path.Join(mantaDefaultRootStore, directoryName, obj.Name),
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
err = mantaClient.Dir().Delete(context.Background(), &storage.DeleteDirectoryInput{
|
|
DirectoryName: path.Join(mantaDefaultRootStore, directoryName),
|
|
})
|
|
if err != nil {
|
|
t.Fatal("failed to delete manta directory")
|
|
}
|
|
}
|