starnet/header_test.go
2026-03-08 20:19:40 +08:00

141 lines
3.3 KiB
Go

package starnet
import (
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
)
func TestRequestHeaders(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
headers := make(map[string]string)
for k, v := range r.Header {
if len(v) > 0 {
headers[k] = v[0]
}
}
json.NewEncoder(w).Encode(headers)
}))
defer server.Close()
req := NewSimpleRequest(server.URL, "GET").
SetHeader("X-Custom-Header", "value1").
AddHeader("X-Multi-Header", "value1").
AddHeader("X-Multi-Header", "value2")
resp, err := req.Do()
if err != nil {
t.Fatalf("Do() error: %v", err)
}
defer resp.Close()
var headers map[string]string
resp.Body().JSON(&headers)
if headers["X-Custom-Header"] != "value1" {
t.Errorf("X-Custom-Header = %v; want value1", headers["X-Custom-Header"])
}
}
func TestRequestCookies(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
cookies := make(map[string]string)
for _, cookie := range r.Cookies() {
cookies[cookie.Name] = cookie.Value
}
json.NewEncoder(w).Encode(cookies)
}))
defer server.Close()
req := NewSimpleRequest(server.URL, "GET").
AddSimpleCookie("session", "abc123").
AddSimpleCookie("user", "john")
resp, err := req.Do()
if err != nil {
t.Fatalf("Do() error: %v", err)
}
defer resp.Close()
var cookies map[string]string
resp.Body().JSON(&cookies)
if cookies["session"] != "abc123" {
t.Errorf("session cookie = %v; want abc123", cookies["session"])
}
if cookies["user"] != "john" {
t.Errorf("user cookie = %v; want john", cookies["user"])
}
}
func TestRequestUserAgent(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(r.UserAgent()))
}))
defer server.Close()
req := NewSimpleRequest(server.URL, "GET").
SetUserAgent("CustomAgent/1.0")
resp, err := req.Do()
if err != nil {
t.Fatalf("Do() error: %v", err)
}
defer resp.Close()
body, _ := resp.Body().String()
if body != "CustomAgent/1.0" {
t.Errorf("User-Agent = %v; want CustomAgent/1.0", body)
}
}
func TestRequestBearerToken(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
auth := r.Header.Get("Authorization")
w.Write([]byte(auth))
}))
defer server.Close()
req := NewSimpleRequest(server.URL, "GET").
SetBearerToken("mytoken123")
resp, err := req.Do()
if err != nil {
t.Fatalf("Do() error: %v", err)
}
defer resp.Close()
body, _ := resp.Body().String()
expected := "Bearer mytoken123"
if body != expected {
t.Errorf("Authorization = %v; want %v", body, expected)
}
}
func TestRequestBasicAuth(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
username, password, ok := r.BasicAuth()
if !ok {
w.WriteHeader(http.StatusUnauthorized)
return
}
w.Write([]byte(username + ":" + password))
}))
defer server.Close()
req := NewSimpleRequest(server.URL, "GET").
SetBasicAuth("user", "pass")
resp, err := req.Do()
if err != nil {
t.Fatalf("Do() error: %v", err)
}
defer resp.Close()
body, _ := resp.Body().String()
if body != "user:pass" {
t.Errorf("BasicAuth = %v; want user:pass", body)
}
}