internal/rosa: cure checks
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>
This commit is contained in:
2026-03-05 00:47:39 +09:00
parent 97448e2104
commit 7e2f13fa1b
2 changed files with 96 additions and 0 deletions

View File

@@ -0,0 +1,93 @@
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)
}
})
}
}