//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) } }