mux_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package mux
  2. import (
  3. "github.com/cnlh/nps/lib/common"
  4. "github.com/cnlh/nps/vender/github.com/astaxie/beego/logs"
  5. "net"
  6. "net/http"
  7. _ "net/http/pprof"
  8. "testing"
  9. "time"
  10. )
  11. var conn1 net.Conn
  12. var conn2 net.Conn
  13. func TestNewMux(t *testing.T) {
  14. go func() {
  15. http.ListenAndServe("0.0.0.0:8889", nil)
  16. }()
  17. logs.EnableFuncCallDepth(true)
  18. logs.SetLogFuncCallDepth(3)
  19. server()
  20. client()
  21. time.Sleep(time.Second * 3)
  22. go func() {
  23. m2 := NewMux(conn2, "tcp")
  24. for {
  25. logs.Warn("npc starting accept")
  26. c, err := m2.Accept()
  27. if err != nil {
  28. logs.Warn(err)
  29. continue
  30. }
  31. logs.Warn("npc accept success ")
  32. c2, err := net.Dial("tcp", "127.0.0.1:80")
  33. if err != nil {
  34. logs.Warn(err)
  35. continue
  36. }
  37. go func() {
  38. _, err = common.CopyBuffer(c2, c)
  39. if err != nil {
  40. logs.Warn("close npc by copy from nps", err)
  41. c2.Close()
  42. c.Close()
  43. }
  44. }()
  45. _, err = common.CopyBuffer(c, c2)
  46. if err != nil {
  47. logs.Warn("close npc by copy from server", err)
  48. c2.Close()
  49. c.Close()
  50. }
  51. }
  52. }()
  53. go func() {
  54. m1 := NewMux(conn1, "tcp")
  55. l, err := net.Listen("tcp", "127.0.0.1:7777")
  56. if err != nil {
  57. logs.Warn(err)
  58. }
  59. for {
  60. logs.Warn("nps starting accept")
  61. conn, err := l.Accept()
  62. if err != nil {
  63. logs.Warn(err)
  64. continue
  65. }
  66. logs.Warn("nps accept success starting new conn")
  67. tmpCpnn, err := m1.NewConn()
  68. if err != nil {
  69. logs.Warn("nps new conn err ", err)
  70. continue
  71. }
  72. logs.Warn("nps new conn success ", tmpCpnn.connId)
  73. go func() {
  74. _, err := common.CopyBuffer(tmpCpnn, conn)
  75. if err != nil {
  76. logs.Warn("close nps by copy from user", tmpCpnn.connId)
  77. conn.Close()
  78. tmpCpnn.Close()
  79. }
  80. }()
  81. //time.Sleep(time.Second)
  82. _, err = common.CopyBuffer(conn, tmpCpnn)
  83. if err != nil {
  84. logs.Warn("close nps by copy from npc ", tmpCpnn.connId)
  85. conn.Close()
  86. tmpCpnn.Close()
  87. }
  88. }
  89. }()
  90. for {
  91. time.Sleep(time.Second * 5)
  92. }
  93. }
  94. func server() {
  95. var err error
  96. l, err := net.Listen("tcp", "127.0.0.1:9999")
  97. if err != nil {
  98. logs.Warn(err)
  99. }
  100. go func() {
  101. conn1, err = l.Accept()
  102. if err != nil {
  103. logs.Warn(err)
  104. }
  105. }()
  106. return
  107. }
  108. func client() {
  109. var err error
  110. conn2, err = net.Dial("tcp", "127.0.0.1:9999")
  111. if err != nil {
  112. logs.Warn(err)
  113. }
  114. }
  115. func TestNewConn(t *testing.T) {
  116. buf := common.GetBufPoolCopy()
  117. logs.Warn(len(buf), cap(buf))
  118. //b := pool.GetBufPoolCopy()
  119. //b[0] = 1
  120. //b[1] = 2
  121. //b[2] = 3
  122. b := []byte{1, 2, 3}
  123. logs.Warn(copy(buf[:3], b), len(buf), cap(buf))
  124. logs.Warn(len(buf), buf[0])
  125. }