Files
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

117 lines
3.6 KiB
Go

package runtime
import (
"os"
"path/filepath"
"testing"
market "github.com/tutti-os/tutti/packages/connector/daemon/core"
)
func TestSecureConnectorStateDirRejectsTraversalBeforeCreatingIt(t *testing.T) {
root := filepath.Join(t.TempDir(), "state")
escaped := filepath.Join(filepath.Dir(root), "escaped")
if _, err := SecureConnectorStateDir(root, "../escaped", "github"); err == nil {
t.Fatal("expected traversal identity to be rejected")
}
if _, err := os.Stat(escaped); !os.IsNotExist(err) {
t.Fatalf("escaped directory was created before validation: %v", err)
}
}
func TestExecutionSnapshotterRemoveRejectsPathsOutsideItsNamespace(t *testing.T) {
stateRoot := t.TempDir()
snapshotter, err := NewExecutionSnapshotter(stateRoot)
if err != nil {
t.Fatal(err)
}
outside := filepath.Join(t.TempDir(), "keep")
if err := os.MkdirAll(outside, 0o700); err != nil {
t.Fatal(err)
}
if err := snapshotter.Remove(outside); err == nil {
t.Fatal("expected out-of-namespace removal to be rejected")
}
if _, err := os.Stat(outside); err != nil {
t.Fatalf("outside directory was removed: %v", err)
}
}
func TestExecutionSnapshotterCleanupOrphansRemovesOnlyManagedSnapshots(t *testing.T) {
stateRoot := t.TempDir()
snapshotter, err := NewExecutionSnapshotter(stateRoot)
if err != nil {
t.Fatal(err)
}
parent := filepath.Join(stateRoot, "execution-snapshots")
ready := filepath.Join(parent, ".staging-old.ready")
staging := filepath.Join(parent, ".staging-interrupted")
unmanaged := filepath.Join(parent, "keep")
for _, path := range []string{ready, staging, unmanaged} {
if err := os.MkdirAll(path, 0o700); err != nil {
t.Fatal(err)
}
}
if err := os.WriteFile(filepath.Join(ready, "entrypoint"), []byte("old"), 0o400); err != nil {
t.Fatal(err)
}
if err := os.Chmod(ready, 0o500); err != nil {
t.Fatal(err)
}
if err := snapshotter.CleanupOrphans(); err != nil {
t.Fatal(err)
}
for _, removed := range []string{ready, staging} {
if _, err := os.Stat(removed); !os.IsNotExist(err) {
t.Fatalf("orphan snapshot %q remains: %v", removed, err)
}
}
if _, err := os.Stat(unmanaged); err != nil {
t.Fatalf("unmanaged directory was removed: %v", err)
}
}
func TestExecutionSnapshotterMarksOnlyDeclaredArtifactNativeEntrypointExecutable(t *testing.T) {
source := t.TempDir()
executableRelative := "runtime/linux-arm64/gh"
executable := filepath.Join(source, filepath.FromSlash(executableRelative))
data := filepath.Join(source, "implementation", "broker.mjs")
for _, file := range []string{executable, data} {
if err := os.MkdirAll(filepath.Dir(file), 0o700); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(file, []byte(filepath.Base(file)), 0o600); err != nil {
t.Fatal(err)
}
}
digest, err := ExecutionInventoryDigest(source)
if err != nil {
t.Fatal(err)
}
snapshotter, err := NewExecutionSnapshotter(t.TempDir())
if err != nil {
t.Fatal(err)
}
snapshot, err := snapshotter.Create(market.PreparedArtifactReceipt{PreparedPath: source, InventoryDigest: digest}, executableRelative)
if err != nil {
t.Fatal(err)
}
defer func() {
if err := snapshotter.Remove(snapshot); err != nil {
t.Errorf("remove execution snapshot: %v", err)
}
}()
executableInfo, err := os.Stat(filepath.Join(snapshot, filepath.FromSlash(executableRelative)))
if err != nil {
t.Fatal(err)
}
dataInfo, err := os.Stat(filepath.Join(snapshot, "implementation", "broker.mjs"))
if err != nil {
t.Fatal(err)
}
if executableInfo.Mode()&0o111 == 0 || dataInfo.Mode()&0o111 != 0 {
t.Fatalf("snapshot modes executable=%o data=%o", executableInfo.Mode().Perm(), dataInfo.Mode().Perm())
}
}