bench_test.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package yamux
  2. import (
  3. "testing"
  4. )
  5. func BenchmarkPing(b *testing.B) {
  6. client, server := testClientServer()
  7. defer client.Close()
  8. defer server.Close()
  9. for i := 0; i < b.N; i++ {
  10. rtt, err := client.Ping()
  11. if err != nil {
  12. b.Fatalf("err: %v", err)
  13. }
  14. if rtt == 0 {
  15. b.Fatalf("bad: %v", rtt)
  16. }
  17. }
  18. }
  19. func BenchmarkAccept(b *testing.B) {
  20. client, server := testClientServer()
  21. defer client.Close()
  22. defer server.Close()
  23. go func() {
  24. for i := 0; i < b.N; i++ {
  25. stream, err := server.AcceptStream()
  26. if err != nil {
  27. return
  28. }
  29. stream.Close()
  30. }
  31. }()
  32. for i := 0; i < b.N; i++ {
  33. stream, err := client.Open()
  34. if err != nil {
  35. b.Fatalf("err: %v", err)
  36. }
  37. stream.Close()
  38. }
  39. }
  40. func BenchmarkSendRecv(b *testing.B) {
  41. client, server := testClientServer()
  42. defer client.Close()
  43. defer server.Close()
  44. sendBuf := make([]byte, 512)
  45. recvBuf := make([]byte, 512)
  46. doneCh := make(chan struct{})
  47. go func() {
  48. stream, err := server.AcceptStream()
  49. if err != nil {
  50. return
  51. }
  52. defer stream.Close()
  53. for i := 0; i < b.N; i++ {
  54. if _, err := stream.Read(recvBuf); err != nil {
  55. b.Fatalf("err: %v", err)
  56. }
  57. }
  58. close(doneCh)
  59. }()
  60. stream, err := client.Open()
  61. if err != nil {
  62. b.Fatalf("err: %v", err)
  63. }
  64. defer stream.Close()
  65. for i := 0; i < b.N; i++ {
  66. if _, err := stream.Write(sendBuf); err != nil {
  67. b.Fatalf("err: %v", err)
  68. }
  69. }
  70. <-doneCh
  71. }