From f1d292203e014404b3d0d8a689a45f184d6996bc Mon Sep 17 00:00:00 2001
From: Matt Joiner <anacrolix@gmail.com>
Date: Wed, 13 Sep 2017 00:58:54 +1000
Subject: [PATCH] mse: Add a read/write benchmark

---
 mse/mse_test.go | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/mse/mse_test.go b/mse/mse_test.go
index 6c279954..8c283e56 100644
--- a/mse/mse_test.go
+++ b/mse/mse_test.go
@@ -3,6 +3,7 @@ package mse
 import (
 	"bytes"
 	"crypto/rand"
+	"crypto/rc4"
 	"io"
 	"io/ioutil"
 	"net"
@@ -125,3 +126,41 @@ func TestReceiveRandomData(t *testing.T) {
 	// synchronizing.
 	require.EqualValues(t, 96+532, tr.n)
 }
+
+func BenchmarkPipe(t *testing.B) {
+	key := make([]byte, 20)
+	n, _ := rand.Read(key)
+	require.Equal(t, len(key), n)
+	var buf bytes.Buffer
+	c, err := rc4.NewCipher(key)
+	require.NoError(t, err)
+	r := cipherReader{
+		c: c,
+		r: &buf,
+	}
+	c, err = rc4.NewCipher(key)
+	require.NoError(t, err)
+	w := cipherWriter{
+		c: c,
+		w: &buf,
+	}
+	a := make([]byte, 0x1000)
+	n, _ = io.ReadFull(rand.Reader, a)
+	require.Equal(t, len(a), n)
+	b := make([]byte, len(a))
+	t.SetBytes(int64(len(a)))
+	t.ResetTimer()
+	for range iter.N(t.N) {
+		n, _ = w.Write(a)
+		if n != len(a) {
+			t.FailNow()
+		}
+		n, _ = r.Read(b)
+		if n != len(b) {
+			t.FailNow()
+		}
+		if !bytes.Equal(a, b) {
+			t.FailNow()
+		}
+	}
+}
-- 
2.51.0