返回 DeepSeek-Reasonix
serve_files_test.go
根目录 / internal / cli / serve_files_test.go
1 package cli
2
3 import (
4 "os"
5 "path/filepath"
6 "runtime"
7 "strings"
8 "testing"
9 )
10
11 func TestReadServeTokenFileTrimsSingleLine(t *testing.T) {
12 p := filepath.Join(t.TempDir(), "token")
13 if err := os.WriteFile(p, []byte(" s3cret-token \n"), 0o600); err != nil {
14 t.Fatal(err)
15 }
16 tok, err := readServeTokenFile(p)
17 if err != nil {
18 t.Fatalf("readServeTokenFile: %v", err)
19 }
20 if tok != "s3cret-token" {
21 t.Fatalf("token = %q, want s3cret-token", tok)
22 }
23 }
24
25 func TestReadServeTokenFileRejectsEmptyAndMultiline(t *testing.T) {
26 dir := t.TempDir()
27 empty := filepath.Join(dir, "empty")
28 if err := os.WriteFile(empty, []byte(" \n"), 0o600); err != nil {
29 t.Fatal(err)
30 }
31 if _, err := readServeTokenFile(empty); err == nil {
32 t.Fatal("empty token file accepted")
33 }
34 multi := filepath.Join(dir, "multi")
35 if err := os.WriteFile(multi, []byte("a\nb\n"), 0o600); err != nil {
36 t.Fatal(err)
37 }
38 if _, err := readServeTokenFile(multi); err == nil {
39 t.Fatal("multi-line token file accepted")
40 }
41 }
42
43 func TestReadServeTokenFileRejectsLoosePermissions(t *testing.T) {
44 if runtime.GOOS == "windows" {
45 t.Skip("POSIX permission check")
46 }
47 p := filepath.Join(t.TempDir(), "token")
48 if err := os.WriteFile(p, []byte("tok\n"), 0o644); err != nil {
49 t.Fatal(err)
50 }
51 if _, err := readServeTokenFile(p); err == nil || !strings.Contains(err.Error(), "chmod 600") {
52 t.Fatalf("loose-permission token file accepted (err=%v)", err)
53 }
54 }
55
56 func TestWriteServeAddrAndPidFiles(t *testing.T) {
57 dir := t.TempDir()
58 addrPath := filepath.Join(dir, "port")
59 if err := writeServeAddrFile(addrPath, "127.0.0.1:43210"); err != nil {
60 t.Fatalf("writeServeAddrFile: %v", err)
61 }
62 b, err := os.ReadFile(addrPath)
63 if err != nil {
64 t.Fatal(err)
65 }
66 if got := strings.TrimSpace(string(b)); got != "127.0.0.1:43210" {
67 t.Fatalf("addr file = %q", got)
68 }
69 if runtime.GOOS != "windows" {
70 fi, err := os.Stat(addrPath)
71 if err != nil {
72 t.Fatal(err)
73 }
74 if fi.Mode().Perm()&0o077 != 0 {
75 t.Fatalf("addr file perm = %v, want owner-only", fi.Mode().Perm())
76 }
77 }
78
79 pidPath := filepath.Join(dir, "pid")
80 if err := writeServePidFile(pidPath); err != nil {
81 t.Fatalf("writeServePidFile: %v", err)
82 }
83 b, err = os.ReadFile(pidPath)
84 if err != nil {
85 t.Fatal(err)
86 }
87 if strings.TrimSpace(string(b)) == "" {
88 t.Fatal("pid file empty")
89 }
90 }
91
91 lines GO