54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
//go:build linux || darwin
|
|
|
|
package cli
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"syscall"
|
|
"testing"
|
|
)
|
|
|
|
func TestRunCreatesReusableGroupAccessibleCacheState(t *testing.T) {
|
|
previousUmask := syscall.Umask(0o007)
|
|
defer syscall.Umask(previousUmask)
|
|
|
|
roots := newStateTestRoots(t)
|
|
harness := newStateTestHarness()
|
|
result := runStateTest(t, roots, harness.options(), false, false, "auto")
|
|
if result.code != 0 {
|
|
t.Fatalf("initial run code=%d stderr=%q", result.code, result.stderr)
|
|
}
|
|
assertGroupAccessibleCacheTree(t, roots.plans)
|
|
assertGroupAccessibleCacheTree(t, roots.checkpoints)
|
|
|
|
extractCalls := harness.extractCalls
|
|
result = runStateTest(t, roots, harness.options(), false, true, "auto")
|
|
if result.code != 0 {
|
|
t.Fatalf("resume run code=%d stderr=%q", result.code, result.stderr)
|
|
}
|
|
if harness.extractCalls != extractCalls {
|
|
t.Fatalf("extract calls after reuse = %d, want %d", harness.extractCalls, extractCalls)
|
|
}
|
|
}
|
|
|
|
func assertGroupAccessibleCacheTree(t *testing.T, root string) {
|
|
t.Helper()
|
|
if err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
want := os.FileMode(0o660)
|
|
if info.IsDir() {
|
|
want = 0o770
|
|
}
|
|
if got := info.Mode().Perm(); got != want {
|
|
return fmt.Errorf("%s mode = %#o, want %#o", path, got, want)
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|