Resolve declared file targets in Run
This commit is contained in:
@@ -704,6 +704,47 @@ func TestScopedFileExecutorBoundsReads(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeclaredFileTargetKeyReadsAndWritesRelativeToDeploymentRoot(t *testing.T) {
|
||||
workspaceRoot := t.TempDir()
|
||||
serverRoot := t.TempDir()
|
||||
filePath := filepath.Join(serverRoot, "SCUM", "Saved", "Config", "WindowsServer", "ServerSettings.ini")
|
||||
if err := os.MkdirAll(filepath.Dir(filePath), 0o700); err != nil {
|
||||
t.Fatalf("mkdir declared file fixture: %v", err)
|
||||
}
|
||||
if err := os.WriteFile(filePath, []byte("[General]\nscum.MaxPlayers=63\n"), 0o600); err != nil {
|
||||
t.Fatalf("write declared file fixture: %v", err)
|
||||
}
|
||||
executor, err := NewFileExecutor(workspaceRoot)
|
||||
if err != nil {
|
||||
t.Fatalf("new file executor: %v", err)
|
||||
}
|
||||
assignment := executionAssignment(protocol.RunCapabilityFilesRead)
|
||||
assignment.TargetKey = "scum-server-settings"
|
||||
assignment.ExecutionInput.FileTargetKey = "SCUM/Saved/Config/WindowsServer/ServerSettings.ini"
|
||||
assignment.ExecutionInput.Deployment = &protocol.ServerDeploymentExecution{SchemaVersion: "1", Mode: "guided-install", ServerRoot: serverRoot, Revision: 1}
|
||||
read := executor.Execute(context.Background(), assignment)
|
||||
if read.State != lifecycleResultStateSucceeded || read.ExecutionResult.Kind != "file.read" || read.ExecutionResult.Content != "[General]\nscum.MaxPlayers=63\n" {
|
||||
t.Fatalf("expected declared target read, got %+v", read)
|
||||
}
|
||||
assignment.Capability = protocol.RunCapabilityFilesWrite
|
||||
assignment.InputRef = "input://server-execution/settings-write"
|
||||
assignment.ExecutionInput.Content = "[General]\nscum.MaxPlayers=80\n"
|
||||
assignment.ExecutionInput.ExpectedVersion = read.ExecutionResult.Version
|
||||
assignment.ExecutionInput.ExpectedChecksum = read.ExecutionResult.Checksum
|
||||
write := executor.Execute(context.Background(), assignment)
|
||||
if write.State != lifecycleResultStateSucceeded || write.ExecutionResult.Kind != "file.write" {
|
||||
t.Fatalf("expected declared target write, got %+v", write)
|
||||
}
|
||||
body, err := os.ReadFile(filePath)
|
||||
if err != nil || string(body) != assignment.ExecutionInput.Content {
|
||||
t.Fatalf("declared target write used the wrong path, body=%q err=%v", body, err)
|
||||
}
|
||||
assignment.ExecutionInput.FileTargetKey = "../outside.ini"
|
||||
if unsafe := executor.Execute(context.Background(), assignment); unsafe.State != lifecycleResultStateFailed {
|
||||
t.Fatalf("expected unsafe declared target rejection, got %+v", unsafe)
|
||||
}
|
||||
}
|
||||
|
||||
func TestScopedFileExecutorListsDirectories(t *testing.T) {
|
||||
root := t.TempDir()
|
||||
executor, err := NewFileExecutor(root)
|
||||
|
||||
Reference in New Issue
Block a user