tests: integration suite
This commit is contained in:
@@ -25,6 +25,8 @@ import (
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
var errNoopClose = func() error { return nil }
|
||||
|
||||
// main loads the gateway configuration, runs the process lifecycle, and exits
|
||||
// with a non-zero status when startup or runtime fails.
|
||||
func main() {
|
||||
@@ -53,8 +55,18 @@ func run(ctx context.Context) (err error) {
|
||||
return fmt.Errorf("build gateway telemetry: %w", err)
|
||||
}
|
||||
|
||||
publicRESTDeps, closePublicRESTDeps, err := newPublicRESTDependencies(cfg, logger, telemetryRuntime)
|
||||
if err != nil {
|
||||
_ = telemetryRuntime.Shutdown(context.Background())
|
||||
_ = logging.Sync(logger)
|
||||
return err
|
||||
}
|
||||
|
||||
grpcDeps, components, cleanup, err := newAuthenticatedGRPCDependencies(ctx, cfg, logger, telemetryRuntime)
|
||||
if err != nil {
|
||||
_ = closePublicRESTDeps()
|
||||
_ = telemetryRuntime.Shutdown(context.Background())
|
||||
_ = logging.Sync(logger)
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
@@ -63,16 +75,14 @@ func run(ctx context.Context) (err error) {
|
||||
|
||||
err = errors.Join(
|
||||
err,
|
||||
closePublicRESTDeps(),
|
||||
cleanup(),
|
||||
telemetryRuntime.Shutdown(shutdownCtx),
|
||||
logging.Sync(logger),
|
||||
)
|
||||
}()
|
||||
|
||||
restServer := restapi.NewServer(cfg.PublicHTTP, restapi.ServerDependencies{
|
||||
Logger: logger,
|
||||
Telemetry: telemetryRuntime,
|
||||
})
|
||||
restServer := restapi.NewServer(cfg.PublicHTTP, publicRESTDeps)
|
||||
grpcServer := grpcapi.NewServer(cfg.AuthenticatedGRPC, grpcDeps)
|
||||
|
||||
applicationComponents := []app.Component{
|
||||
@@ -96,6 +106,25 @@ func run(ctx context.Context) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func newPublicRESTDependencies(cfg config.Config, logger *zap.Logger, telemetryRuntime *telemetry.Runtime) (restapi.ServerDependencies, func() error, error) {
|
||||
deps := restapi.ServerDependencies{
|
||||
Logger: logger,
|
||||
Telemetry: telemetryRuntime,
|
||||
}
|
||||
|
||||
if cfg.AuthService.BaseURL == "" {
|
||||
return deps, errNoopClose, nil
|
||||
}
|
||||
|
||||
authService, err := restapi.NewHTTPAuthServiceClient(cfg.AuthService.BaseURL)
|
||||
if err != nil {
|
||||
return restapi.ServerDependencies{}, nil, fmt.Errorf("build public REST dependencies: auth service client: %w", err)
|
||||
}
|
||||
|
||||
deps.AuthService = authService
|
||||
return deps, authService.Close, nil
|
||||
}
|
||||
|
||||
func newAuthenticatedGRPCDependencies(ctx context.Context, cfg config.Config, logger *zap.Logger, telemetryRuntime *telemetry.Runtime) (grpcapi.ServerDependencies, []app.Component, func() error, error) {
|
||||
responseSigner, err := authn.LoadEd25519ResponseSignerFromPEMFile(cfg.ResponseSigner.PrivateKeyPEMPath)
|
||||
if err != nil {
|
||||
|
||||
@@ -7,12 +7,14 @@ import (
|
||||
"crypto/x509"
|
||||
"encoding/pem"
|
||||
"net"
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"galaxy/gateway/internal/config"
|
||||
"galaxy/gateway/internal/restapi"
|
||||
|
||||
"github.com/alicebob/miniredis/v2"
|
||||
"github.com/stretchr/testify/assert"
|
||||
@@ -20,6 +22,72 @@ import (
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func TestNewPublicRESTDependencies(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
authServer := httptest.NewServer(nil)
|
||||
defer authServer.Close()
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
cfg config.Config
|
||||
assert func(*testing.T, restapi.ServerDependencies)
|
||||
wantErr string
|
||||
}{
|
||||
{
|
||||
name: "default unavailable auth service when base url is empty",
|
||||
cfg: config.Config{},
|
||||
assert: func(t *testing.T, deps restapi.ServerDependencies) {
|
||||
t.Helper()
|
||||
assert.Nil(t, deps.AuthService)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "real auth service client when base url is configured",
|
||||
cfg: config.Config{
|
||||
AuthService: config.AuthServiceConfig{
|
||||
BaseURL: authServer.URL,
|
||||
},
|
||||
},
|
||||
assert: func(t *testing.T, deps restapi.ServerDependencies) {
|
||||
t.Helper()
|
||||
require.NotNil(t, deps.AuthService)
|
||||
_, ok := deps.AuthService.(*restapi.HTTPAuthServiceClient)
|
||||
assert.True(t, ok)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "invalid auth service base url fails fast",
|
||||
cfg: config.Config{
|
||||
AuthService: config.AuthServiceConfig{
|
||||
BaseURL: "/relative",
|
||||
},
|
||||
},
|
||||
wantErr: "auth service client",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
tt := tt
|
||||
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
deps, cleanup, err := newPublicRESTDependencies(tt.cfg, zap.NewNop(), nil)
|
||||
if tt.wantErr != "" {
|
||||
require.Error(t, err)
|
||||
assert.ErrorContains(t, err, tt.wantErr)
|
||||
return
|
||||
}
|
||||
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, cleanup)
|
||||
tt.assert(t, deps)
|
||||
assert.NoError(t, cleanup())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewAuthenticatedGRPCDependencies(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user