blob: 630ae8cf5bd9e779024f86b303dd99b0a737fe23 [file] [log] [blame]
Asim Shankar147c3b62014-08-16 09:28:38 -07001// +build !go1.4
2
3// TODO(ashankar): Remove the build tag and replace the tls import with crypto/tls
4// when go1.4 is released.
5
Jiri Simsa5293dcb2014-05-10 09:56:38 -07006package benchmark
7
8import (
Jiri Simsa5293dcb2014-05-10 09:56:38 -07009 "io"
10 "net"
11 "testing"
12
Jiri Simsa519c5072014-09-17 21:37:57 -070013 "veyron.io/veyron/veyron/runtimes/google/ipc/stream/crypto"
14 tls "veyron.io/veyron/veyron/runtimes/google/ipc/stream/crypto/tlsfork"
Jiri Simsa5293dcb2014-05-10 09:56:38 -070015)
16
17func benchmarkTLS(b *testing.B, nConns int) {
18 rchan := make(chan *tls.Conn, nConns)
19 wchan := make(chan *tls.Conn, nConns)
20 ln, err := net.Listen("tcp", "127.0.0.1:0")
21 if err != nil {
22 b.Fatalf("net.Listen failed: %v", err)
23 return
24 }
25
26 defer ln.Close()
27 // One goroutine to dial nConns connections.
28 var tlsConfig tls.Config
29 tlsConfig.InsecureSkipVerify = true
30 go func() {
31 for i := 0; i < nConns; i++ {
32 conn, err := tls.Dial("tcp", ln.Addr().String(), &tlsConfig)
33 if err != nil {
34 b.Fatalf("tls.Dial(%q, %q) failed: %v", "tcp", ln.Addr(), err)
35 wchan <- nil
36 return
37 }
38 wchan <- conn
39 }
40 close(wchan)
41 }()
42 // One goroutine to accept nConns connections.
43 go func() {
44 for i := 0; i < nConns; i++ {
45 conn, err := ln.Accept()
46 if err != nil {
47 b.Fatalf("Accept failed: %v", err)
48 rchan <- nil
49 }
50 server := tls.Server(conn, crypto.ServerTLSConfig())
51 server.Handshake()
52 rchan <- server
53 }
54 close(rchan)
55 }()
56
57 var readers []io.ReadCloser
58 var writers []io.WriteCloser
59 for r := range rchan {
60 readers = append(readers, r)
61 }
62 for w := range wchan {
63 writers = append(writers, w)
64 }
65 if b.Failed() {
66 return
67 }
68 (&throughputTester{b: b, readers: readers, writers: writers}).Run()
69}