sing-box/test/v2ray_api_test.go

59 lines
1.5 KiB
Go
Raw Normal View History

2022-10-26 11:20:34 +00:00
package main
import (
"context"
"net/netip"
"testing"
C "github.com/sagernet/sing-box/constant"
"github.com/sagernet/sing-box/experimental/v2rayapi"
"github.com/sagernet/sing-box/option"
2024-11-07 13:44:04 +00:00
"github.com/sagernet/sing/common"
"github.com/sagernet/sing/common/json/badoption"
2022-10-26 11:20:34 +00:00
"github.com/stretchr/testify/require"
)
func TestV2RayAPI(t *testing.T) {
i := startInstance(t, option.Options{
2024-11-07 13:44:04 +00:00
LegacyInbounds: []option.LegacyInbound{
2022-10-26 11:20:34 +00:00
{
Type: C.TypeMixed,
Tag: "in",
MixedOptions: option.HTTPMixedInboundOptions{
ListenOptions: option.ListenOptions{
2024-11-07 13:44:04 +00:00
Listen: common.Ptr(badoption.Addr(netip.IPv4Unspecified())),
2022-10-26 11:20:34 +00:00
ListenPort: clientPort,
},
},
},
},
2024-11-01 16:39:02 +00:00
LegacyOutbounds: []option.LegacyOutbound{
2022-10-26 11:20:34 +00:00
{
Type: C.TypeDirect,
Tag: "out",
},
},
Experimental: &option.ExperimentalOptions{
V2RayAPI: &option.V2RayAPIOptions{
Listen: "127.0.0.1:8080",
Stats: &option.V2RayStatsServiceOptions{
Enabled: true,
Inbounds: []string{"in"},
Outbounds: []string{"out"},
},
},
},
})
testSuit(t, clientPort, testPort)
statsService := i.Router().V2RayServer().StatsService()
require.NotNil(t, statsService)
response, err := statsService.(v2rayapi.StatsServiceServer).QueryStats(context.Background(), &v2rayapi.QueryStatsRequest{Regexp: true, Patterns: []string{".*"}})
require.NoError(t, err)
count := response.Stat[0].Value
require.Equal(t, len(response.Stat), 4)
for _, stat := range response.Stat {
require.Equal(t, count, stat.Value)
}
}