github.com/v2fly/v2ray-core/v4@v4.45.2/common/net/destination_test.go (about) 1 package net_test 2 3 import ( 4 "testing" 5 6 "github.com/google/go-cmp/cmp" 7 8 . "github.com/v2fly/v2ray-core/v4/common/net" 9 ) 10 11 func TestDestinationProperty(t *testing.T) { 12 testCases := []struct { 13 Input Destination 14 Network Network 15 String string 16 NetString string 17 }{ 18 { 19 Input: TCPDestination(IPAddress([]byte{1, 2, 3, 4}), 80), 20 Network: Network_TCP, 21 String: "tcp:1.2.3.4:80", 22 NetString: "1.2.3.4:80", 23 }, 24 { 25 Input: UDPDestination(IPAddress([]byte{0x20, 0x01, 0x48, 0x60, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88}), 53), 26 Network: Network_UDP, 27 String: "udp:[2001:4860:4860::8888]:53", 28 NetString: "[2001:4860:4860::8888]:53", 29 }, 30 { 31 Input: UnixDestination(DomainAddress("/tmp/test.sock")), 32 Network: Network_UNIX, 33 String: "unix:/tmp/test.sock", 34 NetString: "/tmp/test.sock", 35 }, 36 } 37 38 for _, testCase := range testCases { 39 dest := testCase.Input 40 if r := cmp.Diff(dest.Network, testCase.Network); r != "" { 41 t.Error("unexpected Network in ", dest.String(), ": ", r) 42 } 43 if r := cmp.Diff(dest.String(), testCase.String); r != "" { 44 t.Error(r) 45 } 46 if r := cmp.Diff(dest.NetAddr(), testCase.NetString); r != "" { 47 t.Error(r) 48 } 49 } 50 } 51 52 func TestDestinationParse(t *testing.T) { 53 cases := []struct { 54 Input string 55 Output Destination 56 Error bool 57 }{ 58 { 59 Input: "tcp:127.0.0.1:80", 60 Output: TCPDestination(LocalHostIP, Port(80)), 61 }, 62 { 63 Input: "udp:8.8.8.8:53", 64 Output: UDPDestination(IPAddress([]byte{8, 8, 8, 8}), Port(53)), 65 }, 66 { 67 Input: "unix:/tmp/test.sock", 68 Output: UnixDestination(DomainAddress("/tmp/test.sock")), 69 }, 70 { 71 Input: "8.8.8.8:53", 72 Output: Destination{ 73 Address: IPAddress([]byte{8, 8, 8, 8}), 74 Port: Port(53), 75 }, 76 }, 77 { 78 Input: ":53", 79 Output: Destination{ 80 Address: AnyIP, 81 Port: Port(53), 82 }, 83 }, 84 { 85 Input: "8.8.8.8", 86 Error: true, 87 }, 88 { 89 Input: "8.8.8.8:http", 90 Error: true, 91 }, 92 { 93 Input: "/tmp/test.sock", 94 Error: true, 95 }, 96 } 97 98 for _, testcase := range cases { 99 d, err := ParseDestination(testcase.Input) 100 if !testcase.Error { 101 if err != nil { 102 t.Error("for test case: ", testcase.Input, " expected no error, but got ", err) 103 } 104 if d != testcase.Output { 105 t.Error("for test case: ", testcase.Input, " expected output: ", testcase.Output.String(), " but got ", d.String()) 106 } 107 } else if err == nil { 108 t.Error("for test case: ", testcase.Input, " expected error, but got nil") 109 } 110 } 111 }