From 88f1e7a2c0605d3e5d2fec7cc333cbd80b4535b6 Mon Sep 17 00:00:00 2001
From: xtaci <daniel820313@gmail.com>
Date: Thu, 8 Sep 2016 11:29:49 +0800
Subject: [PATCH] upd test

---
 session_test.go | 95 +++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 92 insertions(+), 3 deletions(-)

diff --git a/session_test.go b/session_test.go
index 9931831..be81c9d 100644
--- a/session_test.go
+++ b/session_test.go
@@ -51,7 +51,6 @@ func handleConnection(conn net.Conn) {
 				}
 			}(stream)
 		} else {
-			log.Println(err)
 			return
 		}
 	}
@@ -110,9 +109,8 @@ func TestSpeed(t *testing.T) {
 				}
 			}
 		}
-		println("total recv:", nrecv)
 		stream.Close()
-		fmt.Println("time for 16MB rtt", time.Since(start))
+		t.Log("time for 16MB rtt", time.Since(start))
 		wg.Done()
 	}()
 	msg := make([]byte, 8192)
@@ -480,3 +478,94 @@ func BenchmarkAcceptClose(b *testing.B) {
 		}
 	}
 }
+func BenchmarkConnSmux(b *testing.B) {
+	cs, ss, err := getSmuxStreamPair()
+	if err != nil {
+		b.Fatal(err)
+	}
+	defer cs.Close()
+	defer ss.Close()
+	bench(b, cs, ss)
+}
+
+/*
+func BenchmarkConnTCP(b *testing.B) {
+	cs, ss, err := getTCPConnectionPair()
+	if err != nil {
+		b.Fatal(err)
+	}
+	defer cs.Close()
+	defer ss.Close()
+	bench(b, cs, ss)
+}
+*/
+
+func getSmuxStreamPair() (*Stream, *Stream, error) {
+	c1, c2, err := getTCPConnectionPair()
+	if err != nil {
+		return nil, nil, err
+	}
+
+	s, err := Server(c2, nil)
+	if err != nil {
+		return nil, nil, err
+	}
+	c, err := Client(c1, nil)
+	if err != nil {
+		return nil, nil, err
+	}
+	var ss *Stream
+	done := make(chan error)
+	go func() {
+		var rerr error
+		ss, rerr = s.AcceptStream()
+		done <- rerr
+		close(done)
+	}()
+	cs, err := c.OpenStream()
+	if err != nil {
+		return nil, nil, err
+	}
+	err = <-done
+	if err != nil {
+		return nil, nil, err
+	}
+
+	return cs, ss, nil
+}
+
+func getTCPConnectionPair() (net.Conn, net.Conn, error) {
+	lst, err := net.Listen("tcp", "127.0.0.1:0")
+	if err != nil {
+		return nil, nil, err
+	}
+
+	var conn0 net.Conn
+	var err0 error
+	done := make(chan struct{})
+	go func() {
+		conn0, err0 = lst.Accept()
+		close(done)
+	}()
+
+	conn1, err := net.Dial("tcp", lst.Addr().String())
+	if err != nil {
+		return nil, nil, err
+	}
+
+	<-done
+	if err0 != nil {
+		return nil, nil, err0
+	}
+	return conn0, conn1, nil
+}
+
+func bench(b *testing.B, rd io.Reader, wr io.Writer) {
+	buf := make([]byte, 128*1024)
+	b.SetBytes(128 * 1024)
+	b.ResetTimer()
+	for i := 0; i < b.N; i++ {
+		wr.Write(buf)
+		rd.Read(buf)
+	}
+}