mirror of https://github.com/v2ray/v2ray-core
Darien Raymond
8 years ago
2 changed files with 122 additions and 25 deletions
@ -0,0 +1,104 @@
|
||||
package scenarios |
||||
|
||||
import ( |
||||
"fmt" |
||||
"testing" |
||||
|
||||
xproxy "golang.org/x/net/proxy" |
||||
"v2ray.com/core" |
||||
"v2ray.com/core/app/dns" |
||||
"v2ray.com/core/app/proxyman" |
||||
"v2ray.com/core/app/router" |
||||
v2net "v2ray.com/core/common/net" |
||||
"v2ray.com/core/common/serial" |
||||
"v2ray.com/core/proxy/blackhole" |
||||
"v2ray.com/core/proxy/freedom" |
||||
"v2ray.com/core/proxy/socks" |
||||
"v2ray.com/core/testing/assert" |
||||
"v2ray.com/core/testing/servers/tcp" |
||||
) |
||||
|
||||
func TestResolveIP(t *testing.T) { |
||||
assert := assert.On(t) |
||||
|
||||
tcpServer := tcp.Server{ |
||||
MsgProcessor: xor, |
||||
} |
||||
dest, err := tcpServer.Start() |
||||
assert.Error(err).IsNil() |
||||
defer tcpServer.Close() |
||||
|
||||
serverPort := pickPort() |
||||
serverConfig := &core.Config{ |
||||
App: []*serial.TypedMessage{ |
||||
serial.ToTypedMessage(&dns.Config{ |
||||
Hosts: map[string]*v2net.IPOrDomain{ |
||||
"google.com": v2net.NewIPOrDomain(dest.Address), |
||||
}, |
||||
}), |
||||
serial.ToTypedMessage(&router.Config{ |
||||
DomainStrategy: router.Config_IpIfNonMatch, |
||||
Rule: []*router.RoutingRule{ |
||||
{ |
||||
Cidr: []*router.CIDR{ |
||||
{ |
||||
Ip: []byte{127, 0, 0, 0}, |
||||
Prefix: 8, |
||||
}, |
||||
}, |
||||
Tag: "direct", |
||||
}, |
||||
}, |
||||
}), |
||||
}, |
||||
Inbound: []*proxyman.InboundHandlerConfig{ |
||||
{ |
||||
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ |
||||
PortRange: v2net.SinglePortRange(serverPort), |
||||
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), |
||||
}), |
||||
ProxySettings: serial.ToTypedMessage(&socks.ServerConfig{ |
||||
AuthType: socks.AuthType_NO_AUTH, |
||||
Accounts: map[string]string{ |
||||
"Test Account": "Test Password", |
||||
}, |
||||
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), |
||||
UdpEnabled: false, |
||||
}), |
||||
}, |
||||
}, |
||||
Outbound: []*proxyman.OutboundHandlerConfig{ |
||||
{ |
||||
ProxySettings: serial.ToTypedMessage(&blackhole.Config{}), |
||||
}, |
||||
{ |
||||
Tag: "direct", |
||||
ProxySettings: serial.ToTypedMessage(&freedom.Config{ |
||||
DomainStrategy: freedom.Config_USE_IP, |
||||
}), |
||||
}, |
||||
}, |
||||
} |
||||
|
||||
assert.Error(InitializeServerConfig(serverConfig)).IsNil() |
||||
|
||||
{ |
||||
noAuthDialer, err := xproxy.SOCKS5("tcp", v2net.TCPDestination(v2net.LocalHostIP, serverPort).NetAddr(), nil, xproxy.Direct) |
||||
assert.Error(err).IsNil() |
||||
conn, err := noAuthDialer.Dial("tcp", fmt.Sprintf("google.com:%d", dest.Port)) |
||||
assert.Error(err).IsNil() |
||||
|
||||
payload := "test payload" |
||||
nBytes, err := conn.Write([]byte(payload)) |
||||
assert.Error(err).IsNil() |
||||
assert.Int(nBytes).Equals(len(payload)) |
||||
|
||||
response := make([]byte, 1024) |
||||
nBytes, err = conn.Read(response) |
||||
assert.Error(err).IsNil() |
||||
assert.Bytes(response[:nBytes]).Equals(xor([]byte(payload))) |
||||
assert.Error(conn.Close()).IsNil() |
||||
} |
||||
|
||||
CloseAllServers() |
||||
} |
Loading…
Reference in new issue