Files
traces/integration/e2e/backend/backend.go
T
JaviandGitHub 7a246d9b0c chore: upgrade azurite and fake-gcs-server (#5512)
* chore: upgrade azurite and fake-gcs-server

* changelog
2025-08-13 14:54:45 +05:30

113 lines
2.9 KiB
Go

package backend
import (
"context"
"fmt"
"strconv"
"strings"
"github.com/grafana/e2e"
e2e_db "github.com/grafana/e2e/db"
"github.com/grafana/tempo/integration/util"
"github.com/grafana/tempo/cmd/tempo/app"
"github.com/grafana/tempo/tempodb/backend"
"github.com/grafana/tempo/tempodb/backend/azure"
)
const (
azuriteImage = "mcr.microsoft.com/azure-storage/azurite:3.35.0"
gcsImage = "fsouza/fake-gcs-server:1.52.2"
)
func parsePort(endpoint string) (int, error) {
substrings := strings.Split(endpoint, ":")
portStrings := strings.Split(substrings[len(substrings)-1], "/")
port, err := strconv.Atoi(portStrings[0])
if err != nil {
return 0, err
}
return port, nil
}
func New(scenario *e2e.Scenario, cfg app.Config) (*e2e.HTTPService, error) {
var backendService *e2e.HTTPService
switch cfg.StorageConfig.Trace.Backend {
case backend.S3:
port, err := parsePort(cfg.StorageConfig.Trace.S3.Endpoint)
if err != nil {
return nil, err
}
backendService = e2e_db.NewMinio(port, "tempo")
if backendService == nil {
return nil, fmt.Errorf("error creating minio backend")
}
err = scenario.StartAndWaitReady(backendService)
if err != nil {
return nil, err
}
case backend.Azure:
port, err := parsePort(cfg.StorageConfig.Trace.Azure.Endpoint)
if err != nil {
return nil, err
}
backendService = NewAzurite(port)
err = scenario.StartAndWaitReady(backendService)
if err != nil {
return nil, err
}
cfg.StorageConfig.Trace.Azure.Endpoint = backendService.Endpoint(port)
_, err = azure.CreateContainer(context.TODO(), cfg.StorageConfig.Trace.Azure)
if err != nil {
return nil, err
}
case backend.GCS:
port, err := parsePort(cfg.StorageConfig.Trace.GCS.Endpoint)
if err != nil {
return nil, err
}
backendService = NewGCS(port)
if backendService == nil {
return nil, fmt.Errorf("error creating gcs backend")
}
err = scenario.StartAndWaitReady(backendService)
if err != nil {
return nil, err
}
}
return backendService, nil
}
func NewAzurite(port int) *e2e.HTTPService {
s := e2e.NewHTTPService(
"azurite",
azuriteImage, // Create the azurite container
e2e.NewCommandWithoutEntrypoint("sh", "-c", "azurite -l /data --blobHost 0.0.0.0"),
e2e.NewHTTPReadinessProbe(port, "/devstoreaccount1?comp=list", 403, 403), // If we get 403 the Azurite is ready
port, // blob storage port
)
s.SetBackoff(util.TempoBackoff())
return s
}
func NewGCS(port int) *e2e.HTTPService {
commands := []string{
"mkdir -p /data/tempo",
"/bin/fake-gcs-server -data /data -public-host=tempo_e2e-gcs -port=4443",
}
s := e2e.NewHTTPService(
"gcs",
gcsImage, // Create the the gcs container
e2e.NewCommandWithoutEntrypoint("sh", "-c", strings.Join(commands, " && ")),
e2e.NewHTTPReadinessProbe(port, "/", 400, 400), // for lack of a better way, readiness probe does not support https at the moment
port,
)
s.SetBackoff(util.TempoBackoff())
return s
}