MCPcopy Create free account
hub / github.com/0xUnixIO/pulse / TestManager_TransparentOnly

Function TestManager_TransparentOnly

internal/sniproxy/manager_test.go:67–124  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

65}
66
67func TestManager_TransparentOnly(t *testing.T) {
68 backend := startEchoTLS(t, "x.example.com")
69
70 // 提前探测一个空闲端口
71 ln, _ := net.Listen("tcp", "127.0.0.1:0")
72 addr := ln.Addr().String()
73 _ = ln.Close()
74
75 statePath := filepath.Join(t.TempDir(), "state.json")
76 m := NewManager(statePath)
77 defer m.Close()
78
79 cfg := ManagerConfig{
80 Listen: addr,
81 Routes: []Route{
82 {SNI: "x.example.com", Backend: backend, Mode: ModeTransparent},
83 },
84 }
85 if err := m.Apply(cfg); err != nil {
86 t.Fatalf("Apply: %v", err)
87 }
88 waitForListen(t, addr)
89
90 // 校验持久化
91 data, err := os.ReadFile(statePath)
92 if err != nil {
93 t.Fatalf("state not written: %v", err)
94 }
95 var got ManagerConfig
96 if err := json.Unmarshal(data, &got); err != nil {
97 t.Fatalf("state not valid JSON: %v", err)
98 }
99 if got.Listen != addr {
100 t.Errorf("persisted Listen = %q, want %q", got.Listen, addr)
101 }
102
103 // 功能验证:一次 TLS 连接应经过透明代理到 backend
104 conn, err := net.Dial("tcp", addr)
105 if err != nil {
106 t.Fatal(err)
107 }
108 defer conn.Close()
109 tc := tls.Client(conn, &tls.Config{ServerName: "x.example.com", InsecureSkipVerify: true})
110 _ = tc.SetDeadline(time.Now().Add(3 * time.Second))
111 if err := tc.Handshake(); err != nil {
112 t.Fatalf("handshake: %v", err)
113 }
114 if _, err := tc.Write([]byte("hi")); err != nil {
115 t.Fatal(err)
116 }
117 buf := make([]byte, 2)
118 if _, err := io.ReadFull(tc, buf); err != nil {
119 t.Fatalf("read: %v", err)
120 }
121 if string(buf) != "hi" {
122 t.Errorf("echo = %q, want hi", buf)
123 }
124}

Callers

nothing calls this directly

Calls 11

CloseMethod · 0.95
ApplyMethod · 0.95
startEchoTLSFunction · 0.85
waitForListenFunction · 0.85
AddrMethod · 0.80
DialMethod · 0.80
AddMethod · 0.80
WriteMethod · 0.80
NewManagerFunction · 0.70
CloseMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected