Files
sing-box/protocol/cloudflare/request_builder_test.go
2026-03-31 15:32:56 +08:00

79 lines
2.1 KiB
Go

//go:build with_cloudflared
package cloudflare
import (
"bytes"
"context"
"io"
"net/http"
"testing"
)
func TestBuildHTTPRequestFromMetadataUsesNoBodyWhenLengthZeroWithoutChunked(t *testing.T) {
request, err := buildHTTPRequestFromMetadata(context.Background(), &ConnectRequest{
Dest: "http://example.com",
Type: ConnectionTypeHTTP,
Metadata: []Metadata{
{Key: metadataHTTPMethod, Val: http.MethodGet},
{Key: metadataHTTPHost, Val: "cf.host"},
},
}, io.NopCloser(bytes.NewBuffer(nil)))
if err != nil {
t.Fatal(err)
}
if request.Body != http.NoBody {
t.Fatalf("expected http.NoBody, got %#v", request.Body)
}
}
func TestBuildHTTPRequestFromMetadataPreservesBodyWhenTransferEncodingChunked(t *testing.T) {
request, err := buildHTTPRequestFromMetadata(context.Background(), &ConnectRequest{
Dest: "http://example.com",
Type: ConnectionTypeHTTP,
Metadata: []Metadata{
{Key: metadataHTTPMethod, Val: http.MethodPost},
{Key: metadataHTTPHost, Val: "cf.host"},
{Key: metadataHTTPHeader + ":Transfer-Encoding", Val: "chunked"},
},
}, io.NopCloser(bytes.NewBufferString("payload")))
if err != nil {
t.Fatal(err)
}
if request.Body == http.NoBody {
t.Fatal("expected request body to be preserved")
}
body, err := io.ReadAll(request.Body)
if err != nil {
t.Fatal(err)
}
if string(body) != "payload" {
t.Fatalf("unexpected body %q", body)
}
}
func TestBuildHTTPRequestFromMetadataPreservesBodyWhenTransferEncodingContainsChunked(t *testing.T) {
request, err := buildHTTPRequestFromMetadata(context.Background(), &ConnectRequest{
Dest: "http://example.com",
Type: ConnectionTypeHTTP,
Metadata: []Metadata{
{Key: metadataHTTPMethod, Val: http.MethodPost},
{Key: metadataHTTPHost, Val: "cf.host"},
{Key: metadataHTTPHeader + ":Transfer-Encoding", Val: "gzip,chunked"},
},
}, io.NopCloser(bytes.NewBufferString("payload")))
if err != nil {
t.Fatal(err)
}
if request.Body == http.NoBody {
t.Fatal("expected request body to be preserved")
}
body, err := io.ReadAll(request.Body)
if err != nil {
t.Fatal(err)
}
if string(body) != "payload" {
t.Fatalf("unexpected body %q", body)
}
}