github.com/kubri/kubri@v0.5.1-0.20240317001612-bda2aaef967e/internal/emulator/services.go (about) 1 package emulator 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/docker/go-connections/nat" 8 "github.com/fullstorydev/emulators/storage/gcsemu" 9 "github.com/testcontainers/testcontainers-go" 10 "github.com/testcontainers/testcontainers-go/wait" 11 "gocloud.dev/blob/azureblob" 12 ) 13 14 func AzureBlob(t *testing.T, bucket string) string { 15 t.Helper() 16 17 c := runContainer(t, testcontainers.ContainerRequest{ 18 Image: "mcr.microsoft.com/azure-storage/azurite:latest", 19 ExposedPorts: []string{"10000"}, 20 Cmd: []string{"azurite-blob", "--blobHost", "0.0.0.0"}, 21 WaitingFor: wait.ForListeningPort(nat.Port("10000")), 22 }) 23 host, err := c.PortEndpoint(context.Background(), "10000", "") 24 if err != nil { 25 t.Fatal(err) 26 } 27 28 t.Setenv("AZURE_STORAGE_ACCOUNT", "devstoreaccount1") 29 t.Setenv("AZURE_STORAGE_KEY", 30 "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==") 31 t.Setenv("AZURE_STORAGE_DOMAIN", host) 32 t.Setenv("AZURE_STORAGE_PROTOCOL", "http") 33 34 u := azureblob.ServiceURL("http://" + host + "/devstoreaccount1") 35 client, err := azureblob.NewDefaultClient(u, azureblob.ContainerName(bucket)) 36 if err != nil { 37 t.Fatal(err) 38 } 39 if _, err = client.Create(context.Background(), nil); err != nil { 40 t.Fatal(err) 41 } 42 43 return host 44 } 45 46 func GCS(t *testing.T, bucket string) string { 47 t.Helper() 48 49 emu, err := gcsemu.NewServer(":0", gcsemu.Options{}) 50 if err != nil { 51 t.Fatal(err) 52 } 53 54 if err = emu.InitBucket(bucket); err != nil { 55 t.Fatal(err) 56 } 57 58 t.Setenv("STORAGE_EMULATOR_HOST", emu.Addr) 59 60 return emu.Addr 61 } 62 63 func S3(t *testing.T, bucket string) string { 64 t.Helper() 65 66 c := runContainer(t, testcontainers.ContainerRequest{ 67 Image: "adobe/s3mock:latest", 68 ExposedPorts: []string{"9090"}, 69 Env: map[string]string{"initialBuckets": bucket}, 70 WaitingFor: wait.ForHTTP("/").WithPort("9090").WithStatusCodeMatcher(nil), 71 }) 72 host, err := c.PortEndpoint(context.Background(), "9090", "") 73 if err != nil { 74 t.Fatal(err) 75 } 76 77 t.Setenv("AWS_ACCESS_KEY_ID", "test") 78 t.Setenv("AWS_SECRET_ACCESS_KEY", "test") 79 t.Setenv("AWS_REGION", "us-east-1") 80 81 return host 82 }