github.com/xtls/xray-core@v1.8.12-0.20240518155711-3168d27b0bdb/proxy/trojan/protocol_test.go (about) 1 package trojan_test 2 3 import ( 4 "testing" 5 6 "github.com/google/go-cmp/cmp" 7 "github.com/xtls/xray-core/common" 8 "github.com/xtls/xray-core/common/buf" 9 "github.com/xtls/xray-core/common/net" 10 "github.com/xtls/xray-core/common/protocol" 11 . "github.com/xtls/xray-core/proxy/trojan" 12 ) 13 14 func toAccount(a *Account) protocol.Account { 15 account, err := a.AsAccount() 16 common.Must(err) 17 return account 18 } 19 20 func TestTCPRequest(t *testing.T) { 21 user := &protocol.MemoryUser{ 22 Email: "love@example.com", 23 Account: toAccount(&Account{ 24 Password: "password", 25 }), 26 } 27 payload := []byte("test string") 28 data := buf.New() 29 common.Must2(data.Write(payload)) 30 31 buffer := buf.New() 32 defer buffer.Release() 33 34 destination := net.Destination{Network: net.Network_TCP, Address: net.LocalHostIP, Port: 1234} 35 writer := &ConnWriter{Writer: buffer, Target: destination, Account: user.Account.(*MemoryAccount)} 36 common.Must(writer.WriteMultiBuffer(buf.MultiBuffer{data})) 37 38 reader := &ConnReader{Reader: buffer} 39 common.Must(reader.ParseHeader()) 40 41 if r := cmp.Diff(reader.Target, destination); r != "" { 42 t.Error("destination: ", r) 43 } 44 45 decodedData, err := reader.ReadMultiBuffer() 46 common.Must(err) 47 if r := cmp.Diff(decodedData[0].Bytes(), payload); r != "" { 48 t.Error("data: ", r) 49 } 50 } 51 52 func TestUDPRequest(t *testing.T) { 53 user := &protocol.MemoryUser{ 54 Email: "love@example.com", 55 Account: toAccount(&Account{ 56 Password: "password", 57 }), 58 } 59 payload := []byte("test string") 60 data := buf.New() 61 common.Must2(data.Write(payload)) 62 63 buffer := buf.New() 64 defer buffer.Release() 65 66 destination := net.Destination{Network: net.Network_UDP, Address: net.LocalHostIP, Port: 1234} 67 writer := &PacketWriter{Writer: &ConnWriter{Writer: buffer, Target: destination, Account: user.Account.(*MemoryAccount)}, Target: destination} 68 common.Must(writer.WriteMultiBuffer(buf.MultiBuffer{data})) 69 70 connReader := &ConnReader{Reader: buffer} 71 common.Must(connReader.ParseHeader()) 72 73 packetReader := &PacketReader{Reader: connReader} 74 mb, err := packetReader.ReadMultiBuffer() 75 common.Must(err) 76 77 if mb.IsEmpty() { 78 t.Error("no request data") 79 } 80 81 mb2, b := buf.SplitFirst(mb) 82 defer buf.ReleaseMulti(mb2) 83 84 dest := *b.UDP 85 if r := cmp.Diff(dest, destination); r != "" { 86 t.Error("destination: ", r) 87 } 88 89 if r := cmp.Diff(b.Bytes(), payload); r != "" { 90 t.Error("data: ", r) 91 } 92 }