|
|
@@ -3,6 +3,9 @@ package scenarios
|
|
|
import (
|
|
|
"net"
|
|
|
|
|
|
+ routerconfig "github.com/v2ray/v2ray-core/app/router/config/testing"
|
|
|
+ _ "github.com/v2ray/v2ray-core/app/router/rules"
|
|
|
+ rulesconfig "github.com/v2ray/v2ray-core/app/router/rules/config/testing"
|
|
|
v2net "github.com/v2ray/v2ray-core/common/net"
|
|
|
v2nettesting "github.com/v2ray/v2ray-core/common/net/testing"
|
|
|
_ "github.com/v2ray/v2ray-core/proxy/freedom"
|
|
|
@@ -58,14 +61,14 @@ func socks5UDPRequest(address v2net.Address, payload []byte) []byte {
|
|
|
return request
|
|
|
}
|
|
|
|
|
|
-func setUpV2Ray() (v2net.Port, error) {
|
|
|
+func setUpV2Ray(routing func(v2net.Destination) bool) (v2net.Port, v2net.Port, error) {
|
|
|
id1, err := config.NewID("ad937d9d-6e23-4a5a-ba23-bce5092a7c51")
|
|
|
if err != nil {
|
|
|
- return 0, err
|
|
|
+ return 0, 0, err
|
|
|
}
|
|
|
id2, err := config.NewID("93ccfc71-b136-4015-ac85-e037bd1ead9e")
|
|
|
if err != nil {
|
|
|
- return 0, err
|
|
|
+ return 0, 0, err
|
|
|
}
|
|
|
users := []*vmessjson.ConfigUser{
|
|
|
&vmessjson.ConfigUser{Id: id1},
|
|
|
@@ -88,14 +91,15 @@ func setUpV2Ray() (v2net.Port, error) {
|
|
|
}
|
|
|
pointB, err := point.NewPoint(&configB)
|
|
|
if err != nil {
|
|
|
- return 0, err
|
|
|
+ return 0, 0, err
|
|
|
}
|
|
|
err = pointB.Start()
|
|
|
if err != nil {
|
|
|
- return 0, err
|
|
|
+ return 0, 0, err
|
|
|
}
|
|
|
|
|
|
portA := v2nettesting.PickPort()
|
|
|
+ portA2 := v2nettesting.PickPort()
|
|
|
configA := mocks.Config{
|
|
|
PortValue: portA,
|
|
|
InboundConfigValue: &mocks.ConnectionConfig{
|
|
|
@@ -117,16 +121,52 @@ func setUpV2Ray() (v2net.Port, error) {
|
|
|
},
|
|
|
},
|
|
|
},
|
|
|
+ InboundDetoursValue: []*mocks.InboundDetourConfig{
|
|
|
+ &mocks.InboundDetourConfig{
|
|
|
+ PortRangeValue: &mocks.PortRange{
|
|
|
+ FromValue: portA2,
|
|
|
+ ToValue: portA2,
|
|
|
+ },
|
|
|
+ ConnectionConfig: &mocks.ConnectionConfig{
|
|
|
+ ProtocolValue: "socks",
|
|
|
+ SettingsValue: &socksjson.SocksConfig{
|
|
|
+ AuthMethod: "noauth",
|
|
|
+ UDPEnabled: false,
|
|
|
+ HostIP: socksjson.IPAddress(net.IPv4(127, 0, 0, 1)),
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ OutboundDetoursValue: []*mocks.OutboundDetourConfig{
|
|
|
+ &mocks.OutboundDetourConfig{
|
|
|
+ TagValue: "direct",
|
|
|
+ ConnectionConfig: &mocks.ConnectionConfig{
|
|
|
+ ProtocolValue: "freedom",
|
|
|
+ SettingsValue: nil,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ RouterConfigValue: &routerconfig.RouterConfig{
|
|
|
+ StrategyValue: "rules",
|
|
|
+ SettingsValue: &rulesconfig.RouterRuleConfig{
|
|
|
+ RuleList: []*rulesconfig.TestRule{
|
|
|
+ &rulesconfig.TestRule{
|
|
|
+ TagValue: "direct",
|
|
|
+ Function: routing,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
}
|
|
|
|
|
|
pointA, err := point.NewPoint(&configA)
|
|
|
if err != nil {
|
|
|
- return 0, err
|
|
|
+ return 0, 0, err
|
|
|
}
|
|
|
err = pointA.Start()
|
|
|
if err != nil {
|
|
|
- return 0, err
|
|
|
+ return 0, 0, err
|
|
|
}
|
|
|
|
|
|
- return portA, nil
|
|
|
+ return portA, portA2, nil
|
|
|
}
|