73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package app
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"galaxy/notification/internal/config"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
testcontainers "github.com/testcontainers/testcontainers-go"
|
|
rediscontainer "github.com/testcontainers/testcontainers-go/modules/redis"
|
|
)
|
|
|
|
const (
|
|
realRuntimeSmokeEnv = "NOTIFICATION_REAL_RUNTIME_SMOKE"
|
|
realRuntimeRedisImage = "redis:7"
|
|
)
|
|
|
|
func TestRealRuntimeCompatibility(t *testing.T) {
|
|
if os.Getenv(realRuntimeSmokeEnv) != "1" {
|
|
t.Skipf("set %s=1 to run the real runtime smoke suite", realRuntimeSmokeEnv)
|
|
}
|
|
|
|
ctx := context.Background()
|
|
|
|
redisContainer, err := rediscontainer.Run(ctx, realRuntimeRedisImage)
|
|
require.NoError(t, err)
|
|
testcontainers.CleanupContainer(t, redisContainer)
|
|
|
|
redisAddr, err := redisContainer.Endpoint(ctx, "")
|
|
require.NoError(t, err)
|
|
|
|
cfg := config.DefaultConfig()
|
|
cfg.Redis.Addr = redisAddr
|
|
cfg.UserService.BaseURL = "http://user-service.internal"
|
|
cfg.InternalHTTP.Addr = mustFreeAddr(t)
|
|
cfg.ShutdownTimeout = 2 * time.Second
|
|
cfg.Telemetry.TracesExporter = "none"
|
|
cfg.Telemetry.MetricsExporter = "none"
|
|
|
|
runtime, err := NewRuntime(context.Background(), cfg, testLogger())
|
|
require.NoError(t, err)
|
|
defer func() {
|
|
require.NoError(t, runtime.Close())
|
|
}()
|
|
|
|
runCtx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
|
|
runErrCh := make(chan error, 1)
|
|
go func() {
|
|
runErrCh <- runtime.Run(runCtx)
|
|
}()
|
|
|
|
client := &http.Client{
|
|
Timeout: 500 * time.Millisecond,
|
|
Transport: &http.Transport{
|
|
DisableKeepAlives: true,
|
|
},
|
|
}
|
|
t.Cleanup(client.CloseIdleConnections)
|
|
|
|
waitForRuntimeReady(t, client, cfg.InternalHTTP.Addr)
|
|
assertHTTPStatus(t, client, "http://"+cfg.InternalHTTP.Addr+"/healthz", http.StatusOK)
|
|
assertHTTPStatus(t, client, "http://"+cfg.InternalHTTP.Addr+"/readyz", http.StatusOK)
|
|
|
|
cancel()
|
|
waitForRunResult(t, runErrCh, cfg.ShutdownTimeout+2*time.Second)
|
|
}
|