mirror of
https://github.com/XTLS/Xray-core.git
synced 2024-12-23 14:09:49 +00:00
94c249a8c8
* Fix some tests to PickPort correctly * Add retry logic for two socks tests Two socks tests listen for both TCP and UDP with same port number, in some cases the port is not available Add retry logic for server core, start server core and client core separately Extract a common method * Add retry logic for two dokodemo tests Two dokodemo tests listen for 5 ports, in some cases they are not available Add retry logic for client core, start server and client separately
94 lines
2.3 KiB
Go
94 lines
2.3 KiB
Go
package core_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/golang/protobuf/proto"
|
|
|
|
"github.com/xtls/xray-core/app/dispatcher"
|
|
"github.com/xtls/xray-core/app/proxyman"
|
|
"github.com/xtls/xray-core/common"
|
|
"github.com/xtls/xray-core/common/net"
|
|
"github.com/xtls/xray-core/common/protocol"
|
|
"github.com/xtls/xray-core/common/serial"
|
|
"github.com/xtls/xray-core/common/uuid"
|
|
. "github.com/xtls/xray-core/core"
|
|
"github.com/xtls/xray-core/features/dns"
|
|
"github.com/xtls/xray-core/features/dns/localdns"
|
|
_ "github.com/xtls/xray-core/main/distro/all"
|
|
"github.com/xtls/xray-core/proxy/dokodemo"
|
|
"github.com/xtls/xray-core/proxy/vmess"
|
|
"github.com/xtls/xray-core/proxy/vmess/outbound"
|
|
"github.com/xtls/xray-core/testing/servers/tcp"
|
|
)
|
|
|
|
func TestXrayDependency(t *testing.T) {
|
|
instance := new(Instance)
|
|
|
|
wait := make(chan bool, 1)
|
|
instance.RequireFeatures(func(d dns.Client) {
|
|
if d == nil {
|
|
t.Error("expected dns client fulfilled, but actually nil")
|
|
}
|
|
wait <- true
|
|
})
|
|
instance.AddFeature(localdns.New())
|
|
<-wait
|
|
}
|
|
|
|
func TestXrayClose(t *testing.T) {
|
|
port := tcp.PickPort()
|
|
|
|
userID := uuid.New()
|
|
config := &Config{
|
|
App: []*serial.TypedMessage{
|
|
serial.ToTypedMessage(&dispatcher.Config{}),
|
|
serial.ToTypedMessage(&proxyman.InboundConfig{}),
|
|
serial.ToTypedMessage(&proxyman.OutboundConfig{}),
|
|
},
|
|
Inbound: []*InboundHandlerConfig{
|
|
{
|
|
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
|
|
PortList: &net.PortList{
|
|
Range: []*net.PortRange{net.SinglePortRange(port)},
|
|
},
|
|
Listen: net.NewIPOrDomain(net.LocalHostIP),
|
|
}),
|
|
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
|
|
Address: net.NewIPOrDomain(net.LocalHostIP),
|
|
Port: uint32(0),
|
|
NetworkList: &net.NetworkList{
|
|
Network: []net.Network{net.Network_TCP},
|
|
},
|
|
}),
|
|
},
|
|
},
|
|
Outbound: []*OutboundHandlerConfig{
|
|
{
|
|
ProxySettings: serial.ToTypedMessage(&outbound.Config{
|
|
Receiver: []*protocol.ServerEndpoint{
|
|
{
|
|
Address: net.NewIPOrDomain(net.LocalHostIP),
|
|
Port: uint32(0),
|
|
User: []*protocol.User{
|
|
{
|
|
Account: serial.ToTypedMessage(&vmess.Account{
|
|
Id: userID.String(),
|
|
}),
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
},
|
|
},
|
|
}
|
|
|
|
cfgBytes, err := proto.Marshal(config)
|
|
common.Must(err)
|
|
|
|
server, err := StartInstance("protobuf", cfgBytes)
|
|
common.Must(err)
|
|
server.Close()
|
|
}
|