mux_test.go 2.7 KB

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