|
|
|
package net_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
. "v2ray.com/core/common/net"
|
|
|
|
. "v2ray.com/core/common/net/testing"
|
|
|
|
. "v2ray.com/ext/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestTCPDestination(t *testing.T) {
|
|
|
|
assert := With(t)
|
|
|
|
|
|
|
|
dest := TCPDestination(IPAddress([]byte{1, 2, 3, 4}), 80)
|
|
|
|
assert(dest, IsTCP)
|
|
|
|
assert(dest, Not(IsUDP))
|
|
|
|
assert(dest.String(), Equals, "tcp:1.2.3.4:80")
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestUDPDestination(t *testing.T) {
|
|
|
|
assert := With(t)
|
|
|
|
|
|
|
|
dest := UDPDestination(IPAddress([]byte{0x20, 0x01, 0x48, 0x60, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88}), 53)
|
|
|
|
assert(dest, Not(IsTCP))
|
|
|
|
assert(dest, IsUDP)
|
|
|
|
assert(dest.String(), Equals, "udp:[2001:4860:4860::8888]:53")
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestDestinationParse(t *testing.T) {
|
|
|
|
assert := With(t)
|
|
|
|
|
|
|
|
cases := []struct {
|
|
|
|
Input string
|
|
|
|
Output Destination
|
|
|
|
Error bool
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
Input: "tcp:127.0.0.1:80",
|
|
|
|
Output: TCPDestination(LocalHostIP, Port(80)),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Input: "udp:8.8.8.8:53",
|
|
|
|
Output: UDPDestination(IPAddress([]byte{8, 8, 8, 8}), Port(53)),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Input: "8.8.8.8:53",
|
|
|
|
Output: Destination{
|
|
|
|
Address: IPAddress([]byte{8, 8, 8, 8}),
|
|
|
|
Port: Port(53),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Input: ":53",
|
|
|
|
Output: Destination{
|
|
|
|
Address: AnyIP,
|
|
|
|
Port: Port(53),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Input: "8.8.8.8",
|
|
|
|
Error: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Input: "8.8.8.8:http",
|
|
|
|
Error: true,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, testcase := range cases {
|
|
|
|
d, err := ParseDestination(testcase.Input)
|
|
|
|
if !testcase.Error {
|
|
|
|
assert(err, IsNil)
|
|
|
|
assert(d, Equals, testcase.Output)
|
|
|
|
} else {
|
|
|
|
assert(err, IsNotNil)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|