mirror of
https://github.com/holos-run/holos.git
synced 2026-03-21 17:55:01 +00:00
This patch adds basic test data to run integration level tests on the holos cli command. Tests are structured similar to how the go and cue maintainers test their own cli tools using the testscripts package. Fixture data is loaded into a fake kubernetes.Clientset. The holos root command is executed without using a full sub-process so the fake kubernetes interface persists across multiple holos commands in the same test case. The fake kubernetes interface is reset after the testcase script concludes and a new one starts. Take care to read and write absolute paths from the test scripts, the current working directory of the test runner is not set to $WORK when executing the custom holos command.
36 lines
922 B
Go
36 lines
922 B
Go
package cli
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"github.com/holos-run/holos/pkg/holos"
|
|
"github.com/holos-run/holos/pkg/wrapper"
|
|
"log/slog"
|
|
)
|
|
|
|
// MakeMain makes a main function for the cli or tests.
|
|
func MakeMain(options ...holos.Option) func() int {
|
|
return func() (exitCode int) {
|
|
cfg := holos.New(options...)
|
|
slog.SetDefault(cfg.Logger())
|
|
ctx := context.Background()
|
|
if err := New(cfg).ExecuteContext(ctx); err != nil {
|
|
return handleError(ctx, err, cfg)
|
|
}
|
|
return 0
|
|
}
|
|
}
|
|
|
|
// handleError is the top level error handler that unwraps and logs errors.
|
|
func handleError(ctx context.Context, err error, hc *holos.Config) (exitCode int) {
|
|
log := hc.NewTopLevelLogger()
|
|
var errAt *wrapper.ErrorAt
|
|
const msg = "could not execute"
|
|
if ok := errors.As(err, &errAt); ok {
|
|
log.ErrorContext(ctx, msg, "err", errAt.Unwrap(), "loc", errAt.Source.Loc())
|
|
} else {
|
|
log.ErrorContext(ctx, msg, "err", err)
|
|
}
|
|
return 1
|
|
}
|