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
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:
93
internal/rosa/rosa_test.go
Normal file
93
internal/rosa/rosa_test.go
Normal 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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user