129 lines
2.3 KiB
Go
129 lines
2.3 KiB
Go
|
package yamux
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func BenchmarkPing(b *testing.B) {
|
||
|
client, server := testClientServer()
|
||
|
defer client.Close()
|
||
|
defer server.Close()
|
||
|
|
||
|
for i := 0; i < b.N; i++ {
|
||
|
rtt, err := client.Ping()
|
||
|
if err != nil {
|
||
|
b.Fatalf("err: %v", err)
|
||
|
}
|
||
|
if rtt == 0 {
|
||
|
b.Fatalf("bad: %v", rtt)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func BenchmarkAccept(b *testing.B) {
|
||
|
client, server := testClientServer()
|
||
|
defer client.Close()
|
||
|
defer server.Close()
|
||
|
|
||
|
go func() {
|
||
|
for i := 0; i < b.N; i++ {
|
||
|
stream, err := server.AcceptStream()
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
stream.Close()
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
for i := 0; i < b.N; i++ {
|
||
|
stream, err := client.Open()
|
||
|
if err != nil {
|
||
|
b.Fatalf("err: %v", err)
|
||
|
}
|
||
|
stream.Close()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func BenchmarkSendRecv(b *testing.B) {
|
||
|
client, server := testClientServer()
|
||
|
defer client.Close()
|
||
|
defer server.Close()
|
||
|
|
||
|
sendBuf := make([]byte, 512)
|
||
|
recvBuf := make([]byte, 512)
|
||
|
|
||
|
doneCh := make(chan struct{})
|
||
|
go func() {
|
||
|
stream, err := server.AcceptStream()
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
defer stream.Close()
|
||
|
for i := 0; i < b.N; i++ {
|
||
|
if _, err := stream.Read(recvBuf); err != nil {
|
||
|
b.Fatalf("err: %v", err)
|
||
|
}
|
||
|
}
|
||
|
close(doneCh)
|
||
|
}()
|
||
|
|
||
|
stream, err := client.Open()
|
||
|
if err != nil {
|
||
|
b.Fatalf("err: %v", err)
|
||
|
}
|
||
|
defer stream.Close()
|
||
|
for i := 0; i < b.N; i++ {
|
||
|
if _, err := stream.Write(sendBuf); err != nil {
|
||
|
b.Fatalf("err: %v", err)
|
||
|
}
|
||
|
}
|
||
|
<-doneCh
|
||
|
}
|
||
|
|
||
|
func BenchmarkSendRecvLarge(b *testing.B) {
|
||
|
client, server := testClientServer()
|
||
|
defer client.Close()
|
||
|
defer server.Close()
|
||
|
|
||
|
const sendSize = 512 * 1024 * 1024
|
||
|
const recvSize = 4 * 1024
|
||
|
|
||
|
sendBuf := make([]byte, sendSize)
|
||
|
recvBuf := make([]byte, recvSize)
|
||
|
|
||
|
b.ResetTimer()
|
||
|
recvDone := make(chan struct{})
|
||
|
|
||
|
go func() {
|
||
|
stream, err := server.AcceptStream()
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
defer stream.Close()
|
||
|
for i := 0; i < b.N; i++ {
|
||
|
for j := 0; j < sendSize/recvSize; j++ {
|
||
|
if _, err := stream.Read(recvBuf); err != nil {
|
||
|
b.Fatalf("err: %v", err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fmt.Printf("Capacity of rcv buffer = %v, length of rcv window = %v\n", stream.recvBuf.Cap(), stream.recvWindow)
|
||
|
|
||
|
}
|
||
|
close(recvDone)
|
||
|
}()
|
||
|
|
||
|
stream, err := client.Open()
|
||
|
if err != nil {
|
||
|
b.Fatalf("err: %v", err)
|
||
|
}
|
||
|
defer stream.Close()
|
||
|
for i := 0; i < b.N; i++ {
|
||
|
if _, err := stream.Write(sendBuf); err != nil {
|
||
|
b.Fatalf("err: %v", err)
|
||
|
}
|
||
|
}
|
||
|
<-recvDone
|
||
|
}
|