starnet/defensive_copy_test.go
starainrt b5bd7595a1
1. 优化ping功能
2. 新增重试机制
3. 优化错误处理逻辑
2026-03-19 16:42:45 +08:00

60 lines
1.4 KiB
Go

package starnet
import (
"net/http"
"testing"
)
func TestWithRawRequestNil(t *testing.T) {
_, err := NewRequest("http://example.com", "GET", WithRawRequest(nil))
if err == nil {
t.Fatal("expected error when WithRawRequest(nil)")
}
}
func TestSetHeadersDefensiveCopy(t *testing.T) {
req := NewSimpleRequest("http://example.com", "GET")
headers := http.Header{
"X-Test": []string{"v1"},
}
req.SetHeaders(headers)
headers.Set("X-Test", "v2")
if got := req.GetHeader("X-Test"); got != "v1" {
t.Fatalf("header mutated by external map change: got=%q want=%q", got, "v1")
}
}
func TestSetQueriesDefensiveCopy(t *testing.T) {
req := NewSimpleRequest("http://example.com", "GET")
queries := map[string][]string{
"k": []string{"v1"},
}
req.SetQueries(queries)
queries["k"][0] = "v2"
queries["k"] = append(queries["k"], "v3")
got := req.config.Queries["k"]
if len(got) != 1 || got[0] != "v1" {
t.Fatalf("queries mutated by external map change: got=%v want=[v1]", got)
}
}
func TestSetFormDataDefensiveCopy(t *testing.T) {
req := NewSimpleRequest("http://example.com", "POST")
form := map[string][]string{
"name": []string{"alice"},
}
req.SetFormData(form)
form["name"][0] = "bob"
form["name"] = append(form["name"], "carol")
got := req.config.Body.FormData["name"]
if len(got) != 1 || got[0] != "alice" {
t.Fatalf("form data mutated by external map change: got=%v want=[alice]", got)
}
}