All checks were successful
Test / Create distribution (push) Successful in 59s
Test / Sandbox (push) Successful in 2m40s
Test / Hakurei (push) Successful in 3m48s
Test / ShareFS (push) Successful in 3m52s
Test / Sandbox (race detector) (push) Successful in 4m52s
Test / Hakurei (race detector) (push) Successful in 5m49s
Test / Flake checks (push) Successful in 1m29s
This cures all presets if a cache directory is supplied and verbose is set. Signed-off-by: Ophestra <cat@gensokyo.uk>
94 lines
1.8 KiB
Go
94 lines
1.8 KiB
Go
package rosa_test
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"sync"
|
|
"syscall"
|
|
"testing"
|
|
|
|
"hakurei.app/container"
|
|
"hakurei.app/container/check"
|
|
"hakurei.app/internal/pkg"
|
|
"hakurei.app/internal/rosa"
|
|
"hakurei.app/message"
|
|
)
|
|
|
|
var (
|
|
// skipBuildTest caches whether build tests are skipped.
|
|
skipBuildTest bool
|
|
// buildTestCache is populated by getCache and must not be accessed directly.
|
|
buildTestCache *pkg.Cache
|
|
// buildTestCacheCancel cancels buildTestCache.
|
|
buildTestCacheCancel context.CancelFunc
|
|
// buildTestCacheOnce synchronises access to buildTestCache.
|
|
buildTestCacheOnce sync.Once
|
|
)
|
|
|
|
func TestMain(m *testing.M) {
|
|
container.TryArgv0(nil)
|
|
|
|
code := m.Run()
|
|
if buildTestCache != nil {
|
|
buildTestCacheCancel()
|
|
buildTestCache.Close()
|
|
}
|
|
os.Exit(code)
|
|
}
|
|
|
|
func getCache(t *testing.T) *pkg.Cache {
|
|
t.Helper()
|
|
const env = "ROSA_BUILD_TEST_CACHE_DIR"
|
|
|
|
if !testing.Verbose() {
|
|
t.Skip("verbose flag not set")
|
|
}
|
|
|
|
buildTestCacheOnce.Do(func() {
|
|
if p, ok := os.LookupEnv(env); !ok {
|
|
skipBuildTest = true
|
|
return
|
|
} else if a, err := check.NewAbs(p); err != nil {
|
|
t.Fatal(err)
|
|
} else {
|
|
var ctx context.Context
|
|
ctx, buildTestCacheCancel = signal.NotifyContext(context.Background(),
|
|
syscall.SIGINT, syscall.SIGTERM)
|
|
|
|
msg := message.New(log.New(os.Stderr, "rosa: ", 0))
|
|
msg.SwapVerbose(true)
|
|
|
|
if buildTestCache, err = pkg.Open(ctx, msg, 0, a); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
})
|
|
|
|
if skipBuildTest {
|
|
t.Skip(env + " not set")
|
|
}
|
|
return buildTestCache
|
|
}
|
|
|
|
func TestCureAll(t *testing.T) {
|
|
cache := getCache(t)
|
|
t.Parallel()
|
|
|
|
for i := range rosa.PresetEnd {
|
|
p := rosa.PArtifact(i)
|
|
meta := rosa.GetMetadata(p)
|
|
a := rosa.Std.Load(p)
|
|
t.Run(meta.Name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
if pathname, _, err := cache.Cure(a); err != nil {
|
|
t.Fatal(err)
|
|
} else {
|
|
t.Log(pathname)
|
|
}
|
|
})
|
|
}
|
|
}
|