73 lines
2.6 KiB
Go
73 lines
2.6 KiB
Go
package process
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/kandev/kandev/internal/agentctl/server/adapter"
|
|
"github.com/kandev/kandev/internal/agentctl/server/config"
|
|
"github.com/kandev/kandev/internal/agentctl/types"
|
|
v1 "github.com/kandev/kandev/pkg/api/v1"
|
|
)
|
|
|
|
type stubAgentAdapter struct{}
|
|
|
|
func (stubAgentAdapter) PrepareEnvironment() (map[string]string, error) { return nil, nil }
|
|
func (stubAgentAdapter) PrepareCommandArgs() []string { return nil }
|
|
func (stubAgentAdapter) Connect(io.Writer, io.Reader) error { return nil }
|
|
func (stubAgentAdapter) Initialize(context.Context) error { return nil }
|
|
func (stubAgentAdapter) GetAgentInfo() *adapter.AgentInfo { return nil }
|
|
func (stubAgentAdapter) NewSession(context.Context, []types.McpServer) (string, error) {
|
|
return "", nil
|
|
}
|
|
func (stubAgentAdapter) LoadSession(context.Context, string, []types.McpServer) error {
|
|
return nil
|
|
}
|
|
func (stubAgentAdapter) Prompt(context.Context, string, []v1.MessageAttachment, uint64) error {
|
|
return nil
|
|
}
|
|
func (stubAgentAdapter) Cancel(context.Context) error { return nil }
|
|
func (stubAgentAdapter) Updates() <-chan adapter.AgentEvent { return nil }
|
|
func (stubAgentAdapter) GetSessionID() string { return "" }
|
|
func (stubAgentAdapter) GetOperationID() string { return "" }
|
|
func (stubAgentAdapter) SetPermissionHandler(adapter.PermissionHandler) {}
|
|
func (stubAgentAdapter) Close() error { return nil }
|
|
func (stubAgentAdapter) RequiresProcessKill() bool { return false }
|
|
|
|
func envValue(env []string, key string) string {
|
|
prefix := key + "="
|
|
for _, item := range env {
|
|
if len(item) > len(prefix) && item[:len(prefix)] == prefix {
|
|
return item[len(prefix):]
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func TestManager_BuildFinalCommandInjectsIsolatedTempDir(t *testing.T) {
|
|
mgr := NewManager(&config.InstanceConfig{
|
|
WorkDir: t.TempDir(),
|
|
SessionID: "session-123",
|
|
AgentArgs: []string{"echo"},
|
|
AgentEnv: []string{"PATH=/usr/bin"},
|
|
}, newTestLogger(t))
|
|
mgr.adapter = stubAgentAdapter{}
|
|
|
|
if err := mgr.buildFinalCommand(); err != nil {
|
|
t.Fatalf("buildFinalCommand() error = %v", err)
|
|
}
|
|
|
|
want := filepath.Join(os.TempDir(), "kandev-agent", "session-123")
|
|
for _, key := range []string{"TMPDIR", "TMP", "TEMP"} {
|
|
if got := envValue(mgr.cmd.Env, key); got != want {
|
|
t.Fatalf("%s = %q, want %q", key, got, want)
|
|
}
|
|
}
|
|
if info, err := os.Stat(want); err != nil || !info.IsDir() {
|
|
t.Fatalf("expected temp dir %q to exist, stat=%v err=%v", want, info, err)
|
|
}
|
|
}
|