mirror of
https://github.com/holos-run/holos.git
synced 2026-03-19 16:54:58 +00:00
Without this patch lint fails with error:
SA1019: testscript.RunMain is deprecated: use [Main]
This patch uses testscript.Main instead.
90 lines
2.3 KiB
Go
90 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"runtime"
|
|
"slices"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/holos-run/holos/cmd"
|
|
"github.com/rogpeppe/go-internal/testscript"
|
|
|
|
cue "cuelang.org/go/cmd/cue/cmd"
|
|
)
|
|
|
|
func TestMain(m *testing.M) {
|
|
holosMain := cmd.MakeMain()
|
|
|
|
testscript.Main(m, map[string]func(){
|
|
"holos": func() { os.Exit(holosMain()) },
|
|
"cue": func() { os.Exit(cue.Main()) },
|
|
})
|
|
}
|
|
|
|
// Run these with go test -v to see the verbose names
|
|
func TestHelmValues(t *testing.T) {
|
|
t.Run("TestHelmValues", func(t *testing.T) {
|
|
// Get an ordered list of test script files.
|
|
dir := "_helm-values"
|
|
for _, file := range sortedTestScripts(t, filepath.Join(dir, "examples")) {
|
|
t.Run("examples", func(t *testing.T) {
|
|
runOneScript(t, dir, file)
|
|
})
|
|
}
|
|
})
|
|
}
|
|
|
|
func runOneScript(t *testing.T, dir string, file string) {
|
|
params := testscript.Params{
|
|
Dir: "",
|
|
Files: []string{file},
|
|
RequireExplicitExec: true,
|
|
RequireUniqueNames: false,
|
|
WorkdirRoot: filepath.Join(testDir(t), dir),
|
|
UpdateScripts: os.Getenv("HOLOS_UPDATE_SCRIPTS") != "",
|
|
Setup: func(env *testscript.Env) error {
|
|
// Needed for update.sh to determine if we need to update output files.
|
|
env.Setenv("HOLOS_UPDATE_SCRIPTS", os.Getenv("HOLOS_UPDATE_SCRIPTS"))
|
|
// Just like cmd/cue/cmd.TestScript, set up separate cache and config dirs per test.
|
|
env.Setenv("CUE_CACHE_DIR", filepath.Join(env.WorkDir, "tmp/cachedir"))
|
|
configDir := filepath.Join(env.WorkDir, "tmp/configdir")
|
|
env.Setenv("CUE_CONFIG_DIR", configDir)
|
|
return nil
|
|
},
|
|
}
|
|
|
|
testscript.Run(t, params)
|
|
}
|
|
|
|
// testDir returns the path of the directory containing the go source file of
|
|
// the caller.
|
|
func testDir(t *testing.T) string {
|
|
_, file, _, ok := runtime.Caller(0)
|
|
if !ok {
|
|
t.Fatal("could not get runtime caller")
|
|
}
|
|
return filepath.Dir(file)
|
|
}
|
|
|
|
func sortedTestScripts(t *testing.T, dir string) (files []string) {
|
|
entries, err := os.ReadDir(dir)
|
|
if os.IsNotExist(err) {
|
|
// Continue to helpful error on len(files) == 0 below.
|
|
} else if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, entry := range entries {
|
|
name := entry.Name()
|
|
if strings.HasSuffix(name, ".txtar") || strings.HasSuffix(name, ".txt") {
|
|
files = append(files, filepath.Join(dir, name))
|
|
}
|
|
}
|
|
if len(files) == 0 {
|
|
t.Fatalf("no txtar nor txt scripts found in dir %s", dir)
|
|
}
|
|
slices.Sort(files)
|
|
return files
|
|
}
|