返回 DeepSeek-Reasonix
run_headless_kind_test.go
根目录 / internal / cli / run_headless_kind_test.go
1 package cli
2
3 import (
4 "encoding/json"
5 "io/fs"
6 "net/http"
7 "net/http/httptest"
8 "os"
9 "path/filepath"
10 "testing"
11
12 "reasonix/internal/config"
13 )
14
15 // A one-shot run persists a resumable store; its manifest must say it is one,
16 // or every conversation list treats it as a conversation the user started.
17 func TestRunPrintRecordsHeadlessRunKind(t *testing.T) {
18 home := isolateCLIConfigHome(t)
19 srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
20 w.Header().Set("Content-Type", "text/event-stream")
21 _, _ = w.Write([]byte("data: {\"choices\":[{\"delta\":{\"content\":\"ok\"}}]}\n\ndata: [DONE]\n\n"))
22 }))
23 defer srv.Close()
24 t.Setenv("REASONIX_TEST_RUN_KEY", "test-key")
25 path := config.UserConfigPath()
26 if err := os.MkdirAll(filepath.Dir(path), 0o700); err != nil {
27 t.Fatal(err)
28 }
29 body := "default_model = \"fake/model-a\"\n\n[[providers]]\nname = \"fake\"\nkind = \"openai\"\nbase_url = \"" + srv.URL + "/v1\"\nmodels = [\"model-a\"]\ndefault = \"model-a\"\napi_key_env = \"REASONIX_TEST_RUN_KEY\"\n"
30 if err := os.WriteFile(path, []byte(body), 0o600); err != nil {
31 t.Fatal(err)
32 }
33
34 var rc int
35 _ = captureStdout(t, func() {
36 _ = captureStderr(t, func() {
37 rc = runAgent([]string{"-p", "list the tools"}, "dev")
38 })
39 })
40 if rc != 0 {
41 t.Fatalf("run -p rc = %d, want 0", rc)
42 }
43 closeTestSessionServices()
44
45 var kinds []string
46 _ = filepath.WalkDir(home, func(p string, d fs.DirEntry, err error) error {
47 if err != nil || d.IsDir() || d.Name() != "manifest.json" || filepath.Base(filepath.Dir(filepath.Dir(p))) != "sessions-v4" {
48 return nil
49 }
50 raw, readErr := os.ReadFile(p)
51 if readErr != nil {
52 t.Fatal(readErr)
53 }
54 var manifest struct {
55 Kind string `json:"kind"`
56 }
57 if err := json.Unmarshal(raw, &manifest); err != nil {
58 t.Fatal(err)
59 }
60 kinds = append(kinds, manifest.Kind)
61 return nil
62 })
63 if len(kinds) != 1 || kinds[0] != "headless-run" {
64 t.Fatalf("run -p store kinds = %q, want one headless-run store", kinds)
65 }
66 }
67
67 lines GO