// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package gcs import ( "context" "fmt" "math/rand" "os" "strconv" "testing" "time" "cloud.google.com/go/storage" log "github.com/hashicorp/go-hclog" "github.com/hashicorp/vault/sdk/helper/logging" "github.com/hashicorp/vault/sdk/physical" "google.golang.org/api/googleapi" ) func testCleanup(t testing.TB, client *storage.Client, bucket string) { t.Helper() ctx := context.Background() if err := client.Bucket(bucket).Delete(ctx); err != nil { if terr, ok := err.(*googleapi.Error); !ok || terr.Code != 404 { t.Fatal(err) } } } func TestBackend(t *testing.T) { projectID := os.Getenv("GOOGLE_PROJECT_ID") if projectID == "" { t.Skip("GOOGLE_PROJECT_ID not set") } r := rand.New(rand.NewSource(time.Now().UnixNano())).Int() bucket := fmt.Sprintf("vault-gcs-testacc-%d", r) ctx := context.Background() client, err := storage.NewClient(ctx) if err != nil { t.Fatal(err) } testCleanup(t, client, bucket) defer testCleanup(t, client, bucket) b := client.Bucket(bucket) if err := b.Create(context.Background(), projectID, nil); err != nil { t.Fatal(err) } backend, err := NewBackend(map[string]string{ "bucket": bucket, "ha_enabled": "false", }, logging.NewVaultLogger(log.Trace)) if err != nil { t.Fatal(err) } // Verify chunkSize is set correctly on the Backend be := backend.(*Backend) expectedChunkSize, err := strconv.Atoi(defaultChunkSize) if err != nil { t.Fatalf("failed to convert defaultChunkSize to int: %s", err) } expectedChunkSize = expectedChunkSize * 1024 if be.chunkSize != expectedChunkSize { t.Fatalf("expected chunkSize to be %d. got=%d", expectedChunkSize, be.chunkSize) } physical.ExerciseBackend(t, backend) physical.ExerciseBackend_ListPrefix(t, backend) }