protocol_test.go 2.3 KB

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