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  }