70 lines
1.9 KiB
Go
70 lines
1.9 KiB
Go
|
package remote
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
storage "google.golang.org/api/storage/v1"
|
||
|
)
|
||
|
|
||
|
func TestGCSClient_impl(t *testing.T) {
|
||
|
var _ Client = new(GCSClient)
|
||
|
}
|
||
|
|
||
|
func TestGCSClient(t *testing.T) {
|
||
|
// This test creates a bucket in GCS and populates it.
|
||
|
// It may incur costs, so it will only run if GCS credential environment
|
||
|
// variables are present.
|
||
|
|
||
|
projectID := os.Getenv("GOOGLE_PROJECT")
|
||
|
if projectID == "" {
|
||
|
t.Skipf("skipping; GOOGLE_PROJECT must be set")
|
||
|
}
|
||
|
|
||
|
bucketName := fmt.Sprintf("terraform-remote-gcs-test-%x", time.Now().Unix())
|
||
|
keyName := "testState"
|
||
|
testData := []byte(`testing data`)
|
||
|
|
||
|
config := make(map[string]string)
|
||
|
config["bucket"] = bucketName
|
||
|
config["path"] = keyName
|
||
|
|
||
|
client, err := gcsFactory(config)
|
||
|
if err != nil {
|
||
|
t.Fatalf("Error for valid config: %v", err)
|
||
|
}
|
||
|
|
||
|
gcsClient := client.(*GCSClient)
|
||
|
nativeClient := gcsClient.clientStorage
|
||
|
|
||
|
// Be clear about what we're doing in case the user needs to clean
|
||
|
// this up later.
|
||
|
if _, err := nativeClient.Buckets.Get(bucketName).Do(); err == nil {
|
||
|
fmt.Printf("Bucket %s already exists - skipping buckets.insert call.", bucketName)
|
||
|
} else {
|
||
|
// Create a bucket.
|
||
|
if res, err := nativeClient.Buckets.Insert(projectID, &storage.Bucket{Name: bucketName}).Do(); err == nil {
|
||
|
fmt.Printf("Created bucket %v at location %v\n\n", res.Name, res.SelfLink)
|
||
|
} else {
|
||
|
t.Skipf("Failed to create test GCS bucket, so skipping")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Ensure we can perform a PUT request with the encryption header
|
||
|
err = gcsClient.Put(testData)
|
||
|
if err != nil {
|
||
|
t.Logf("WARNING: Failed to send test data to GCS bucket. (error was %s)", err)
|
||
|
}
|
||
|
|
||
|
defer func() {
|
||
|
// Delete the test bucket in the project
|
||
|
if err := gcsClient.clientStorage.Buckets.Delete(bucketName).Do(); err != nil {
|
||
|
t.Logf("WARNING: Failed to delete the test GCS bucket. It has been left in your GCE account and may incur storage charges. (error was %s)", err)
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
testClient(t, client)
|
||
|
}
|