sing-box/test/http_json_test.go
2026-10-11 10:58:50 +08:00

56 lines
1.5 KiB
Go

package main
import (
"io"
"net/http"
"strconv"
"testing"
"github.com/sagernet/sing-box/option"
"github.com/sagernet/sing/common/json"
"github.com/stretchr/testify/require"
)
func TestHTTPJSONConfig(t *testing.T) {
serverOptions, err := json.UnmarshalExtendedContext[option.Options](globalCtx, []byte(`{
"inbounds": [{
"type": "http",
"listen": "127.0.0.1",
"listen_port": `+strconv.Itoa(int(serverPort))+`,
"users": [{"username": "sekai", "password": "password"}],
"stream_receive_window": "1 MB"
}],
"outbounds": [{"type": "direct"}]
}`))
require.NoError(t, err)
startInstance(t, serverOptions)
clientOptions, err := json.UnmarshalExtendedContext[option.Options](globalCtx, []byte(`{
"inbounds": [{
"type": "mixed",
"listen": "127.0.0.1",
"listen_port": `+strconv.Itoa(int(clientPort))+`
}],
"outbounds": [{
"type": "http",
"server": "127.0.0.1",
"server_port": `+strconv.Itoa(int(serverPort))+`,
"username": "sekai",
"password": "password",
"path": "/proxy"
}]
}`))
require.NoError(t, err)
startInstance(t, clientOptions)
origin := newForwardOrigin(t)
client := proxyClient(t, clientPort)
request, err := http.NewRequest(http.MethodGet, origin.url("/hello"), nil)
require.NoError(t, err)
request.Header.Set("User-Agent", "")
response, err := client.Do(request)
require.NoError(t, err)
body, err := io.ReadAll(response.Body)
response.Body.Close()
require.NoError(t, err)
require.Equal(t, "hello", string(body))
}