nps/lib/mux/mux_test.go

201 lines
3.8 KiB
Go
Raw Normal View History

2019-02-26 14:40:28 +00:00
package mux
import (
2019-10-12 14:56:37 +00:00
"bufio"
"fmt"
2019-02-26 14:40:28 +00:00
"net"
"net/http"
2019-10-12 14:56:37 +00:00
"net/http/httputil"
2019-02-26 14:40:28 +00:00
_ "net/http/pprof"
2019-09-11 12:19:14 +00:00
"sync"
2019-02-26 14:40:28 +00:00
"testing"
"time"
2019-08-10 03:15:25 +00:00
"github.com/astaxie/beego/logs"
"github.com/cnlh/nps/lib/common"
2019-02-26 14:40:28 +00:00
)
var conn1 net.Conn
var conn2 net.Conn
func TestNewMux(t *testing.T) {
go func() {
2019-03-15 06:03:49 +00:00
http.ListenAndServe("0.0.0.0:8889", nil)
2019-02-26 14:40:28 +00:00
}()
logs.EnableFuncCallDepth(true)
logs.SetLogFuncCallDepth(3)
server()
client()
time.Sleep(time.Second * 3)
go func() {
2019-03-29 02:41:57 +00:00
m2 := NewMux(conn2, "tcp")
2019-02-26 14:40:28 +00:00
for {
logs.Warn("npc starting accept")
2019-02-26 14:40:28 +00:00
c, err := m2.Accept()
if err != nil {
logs.Warn(err)
continue
2019-02-26 14:40:28 +00:00
}
logs.Warn("npc accept success ")
c2, err := net.Dial("tcp", "127.0.0.1:80")
2019-08-26 13:42:20 +00:00
if err != nil {
logs.Warn(err)
2019-10-12 14:56:37 +00:00
c.Close()
continue
}
2019-09-24 14:29:31 +00:00
go func(c2 net.Conn, c net.Conn) {
wg := sync.WaitGroup{}
wg.Add(1)
go func() {
_, err = common.CopyBuffer(c2, c)
if err != nil {
c2.Close()
c.Close()
logs.Warn("close npc by copy from nps", err)
}
wg.Done()
}()
wg.Add(1)
go func() {
_, err = common.CopyBuffer(c, c2)
if err != nil {
c2.Close()
c.Close()
logs.Warn("close npc by copy from server", err)
}
wg.Done()
}()
logs.Warn("npc wait")
wg.Wait()
}(c2, c)
2019-02-26 14:40:28 +00:00
}
}()
go func() {
2019-03-29 02:41:57 +00:00
m1 := NewMux(conn1, "tcp")
2019-02-26 14:40:28 +00:00
l, err := net.Listen("tcp", "127.0.0.1:7777")
if err != nil {
logs.Warn(err)
2019-02-26 14:40:28 +00:00
}
for {
logs.Warn("nps starting accept")
2019-02-26 14:40:28 +00:00
conn, err := l.Accept()
if err != nil {
logs.Warn(err)
continue
2019-02-26 14:40:28 +00:00
}
logs.Warn("nps accept success starting new conn")
2019-08-26 13:42:20 +00:00
tmpCpnn, err := m1.NewConn()
if err != nil {
logs.Warn("nps new conn err ", err)
continue
}
logs.Warn("nps new conn success ", tmpCpnn.connId)
2019-09-24 14:29:31 +00:00
go func(tmpCpnn net.Conn, conn net.Conn) {
go func() {
_, err := common.CopyBuffer(tmpCpnn, conn)
if err != nil {
conn.Close()
tmpCpnn.Close()
logs.Warn("close nps by copy from user")
}
}()
//time.Sleep(time.Second)
_, err = common.CopyBuffer(conn, tmpCpnn)
2019-09-08 15:49:16 +00:00
if err != nil {
conn.Close()
tmpCpnn.Close()
2019-09-24 14:29:31 +00:00
logs.Warn("close nps by copy from npc ")
2019-09-08 15:49:16 +00:00
}
2019-09-24 14:29:31 +00:00
}(tmpCpnn, conn)
2019-02-26 14:40:28 +00:00
}
}()
2019-10-12 14:56:37 +00:00
time.Sleep(time.Second * 5)
//go test_request()
2019-02-26 14:40:28 +00:00
for {
time.Sleep(time.Second * 5)
}
}
func server() {
var err error
l, err := net.Listen("tcp", "127.0.0.1:9999")
if err != nil {
logs.Warn(err)
2019-02-26 14:40:28 +00:00
}
go func() {
conn1, err = l.Accept()
if err != nil {
logs.Warn(err)
2019-02-26 14:40:28 +00:00
}
}()
return
}
func client() {
var err error
conn2, err = net.Dial("tcp", "127.0.0.1:9999")
if err != nil {
logs.Warn(err)
2019-02-26 14:40:28 +00:00
}
}
2019-03-15 06:03:49 +00:00
2019-10-12 14:56:37 +00:00
func test_request() {
conn, _ := net.Dial("tcp", "127.0.0.1:7777")
for {
conn.Write([]byte(`GET /videojs5/video.js HTTP/1.1
Host: 127.0.0.1:7777
Connection: keep-alive
`))
r, err := http.ReadResponse(bufio.NewReader(conn), nil)
if err != nil {
logs.Warn("close by read response err", err)
break
}
logs.Warn("read response success", r)
b, err := httputil.DumpResponse(r, true)
if err != nil {
logs.Warn("close by dump response err", err)
break
}
fmt.Println(string(b[:20]), err)
time.Sleep(time.Second)
}
}
func test_raw() {
conn, _ := net.Dial("tcp", "127.0.0.1:7777")
for {
conn.Write([]byte(`GET /videojs5/test HTTP/1.1
Host: 127.0.0.1:7777
Connection: keep-alive
`))
buf := make([]byte, 1000000)
n, err := conn.Read(buf)
if err != nil {
logs.Warn("close by read response err", err)
break
}
logs.Warn(n, string(buf[:50]), "\n--------------\n", string(buf[n-50:n]))
time.Sleep(time.Second)
}
}
2019-03-15 06:03:49 +00:00
func TestNewConn(t *testing.T) {
buf := common.GetBufPoolCopy()
2019-03-15 06:03:49 +00:00
logs.Warn(len(buf), cap(buf))
//b := pool.GetBufPoolCopy()
//b[0] = 1
//b[1] = 2
//b[2] = 3
b := []byte{1, 2, 3}
logs.Warn(copy(buf[:3], b), len(buf), cap(buf))
logs.Warn(len(buf), buf[0])
}