Quellcode durchsuchen

change mux test

cnlh vor 5 Jahren
Ursprung
Commit
0b3905e24a
2 geänderte Dateien mit 109 neuen und 6 gelöschten Zeilen
  1. 101 0
      lib/mux/mux_test.go
  2. 8 6
      lib/mux/tc.go

+ 101 - 0
lib/mux/mux_test.go

@@ -2,9 +2,11 @@ package mux
 
 import (
 	"bufio"
+	"bytes"
 	"fmt"
 	"github.com/cnlh/nps/lib/common"
 	"github.com/cnlh/nps/lib/goroutine"
+	"github.com/cnlh/nps/lib/rate"
 	"io"
 	"log"
 	"net"
@@ -141,7 +143,56 @@ func TestNewMux(t *testing.T) {
 		time.Sleep(time.Second * 5)
 	}
 }
+func TestNewMux2(t *testing.T) {
+	tc, err := NewTrafficControl("eth0")
+	if err != nil {
+		t.Fatal(err)
+	}
+	tc.RunNetRangeTest(func() {
+		logs.EnableFuncCallDepth(true)
+		logs.SetLogFuncCallDepth(3)
+		server()
+		client()
+		//poolConnCopy, _ := ants.NewPoolWithFunc(200000, common.copyConn, ants.WithNonblocking(false))
+		time.Sleep(time.Second * 3)
+		rate := rate.NewRate(1024 * 1024 * 3)
+		rate.Start()
+		conn2 = Newconn(rate, conn2)
+		go func() {
+			m2 := NewMux(conn2, "tcp")
+			for {
+				//logs.Warn("npc starting accept")
+				c, err := m2.Accept()
+				if err != nil {
+					logs.Warn(err)
+					continue
+				}
+				//logs.Warn("npc accept success ")
+				//c2, err := net.Dial("tcp", "127.0.0.1:80")
+				c.Write(bytes.Repeat([]byte{0}, 1024*1024*100))
+			}
+		}()
 
+		m1 := NewMux(conn1, "tcp")
+		tmpCpnn, err := m1.NewConn()
+		if err != nil {
+			logs.Warn("nps new conn err ", err)
+			return
+		}
+		buf := make([]byte, 1024*1024)
+		var count float64
+		start := time.Now()
+		defer logs.Warn("now rate", count/time.Now().Sub(start).Seconds())
+		for {
+			n, err := tmpCpnn.Read(buf)
+			count += float64(n)
+			if err != nil {
+				logs.Warn(err)
+				return
+			}
+		}
+	})
+}
 func server() {
 	var err error
 	l, err := net.Listen("tcp", "127.0.0.1:9999")
@@ -445,3 +496,53 @@ func TestPriority(t *testing.T) {
 //	}()
 //	time.Sleep(time.Second * 100000)
 //}
+
+type Conn struct {
+	conn net.Conn
+	rate *rate.Rate
+}
+
+func Newconn(rate *rate.Rate, conn net.Conn) *Conn {
+	return &Conn{
+		conn: conn,
+		rate: rate,
+	}
+}
+
+func (conn *Conn) Read(b []byte) (n int, err error) {
+	defer func() {
+		conn.rate.Get(int64(n))
+	}()
+	return conn.conn.Read(b)
+}
+
+func (conn *Conn) Write(b []byte) (n int, err error) {
+	defer func() {
+		conn.rate.Get(int64(n))
+	}()
+	return conn.conn.Write(b)
+}
+
+func (conn *Conn) LocalAddr() net.Addr {
+	return conn.conn.LocalAddr()
+}
+
+func (conn *Conn) RemoteAddr() net.Addr {
+	return conn.conn.RemoteAddr()
+}
+
+func (conn *Conn) SetDeadline(t time.Time) error {
+	return conn.conn.SetDeadline(t)
+}
+
+func (conn *Conn) SetWriteDeadline(t time.Time) error {
+	return conn.conn.SetWriteDeadline(t)
+}
+
+func (conn *Conn) SetReadDeadline(t time.Time) error {
+	return conn.conn.SetReadDeadline(t)
+}
+
+func (conn *Conn) Close() error {
+	return conn.conn.Close()
+}

+ 8 - 6
lib/mux/tc.go

@@ -43,12 +43,14 @@ func Ips() (map[string]string, error) {
 
 // get ip and Eth information by Eth name
 func GetIpAddrByName(EthName string) (Eth *Eth, err error) {
-	interfaces, err := net.Interfaces()
+	var interfaces []net.Interface
+	interfaces, err = net.Interfaces()
 	if err != nil {
 		return
 	}
 	for _, i := range interfaces {
-		byName, err := net.InterfaceByName(i.Name)
+		var byName *net.Interface
+		byName, err = net.InterfaceByName(i.Name)
 		if err != nil {
 			return
 		}
@@ -105,10 +107,10 @@ func (tc *TrafficControl) RunNetRangeTest(f func()) error {
 	funcs := tc.getTestVariable()
 	groups := getArrayExhaustivity(funcs)
 	for _, v := range groups {
-		// execute bandwidth control
-		if err := tc.bandwidth("1mbit"); err != nil {
-			return err
-		}
+		// execute bandwidth control, not good work
+		//if err := tc.bandwidth("1mbit"); err != nil {
+		//	return err
+		//}
 		// execute random strategy
 		for _, vv := range v {
 			err := vv()