From fd695db044ae2e73ddca9313727baa6c044cea87 Mon Sep 17 00:00:00 2001 From: Andy Wang Date: Mon, 28 Dec 2020 01:27:40 +0000 Subject: [PATCH] Reduce unnecessary test bloat --- internal/multiplex/session_test.go | 312 ++++++++++++++--------------- 1 file changed, 154 insertions(+), 158 deletions(-) diff --git a/internal/multiplex/session_test.go b/internal/multiplex/session_test.go index 210bce4..dfa3dbb 100644 --- a/internal/multiplex/session_test.go +++ b/internal/multiplex/session_test.go @@ -36,175 +36,171 @@ func TestRecvDataFromRemote(t *testing.T) { for seshType, seshConfig := range seshConfigs { seshConfig := seshConfig t.Run(seshType, func(t *testing.T) { - for methodName, method := range encryptionMethods { - method := method - t.Run(methodName, func(t *testing.T) { - var err error - seshConfig.Obfuscator, err = MakeObfuscator(method, sessionKey) - if err != nil { - t.Fatalf("failed to make obfuscator: %v", err) + var err error + seshConfig.Obfuscator, err = MakeObfuscator(EncryptionMethodPlain, sessionKey) + if err != nil { + t.Fatalf("failed to make obfuscator: %v", err) + } + t.Run("initial frame", func(t *testing.T) { + sesh := MakeSession(0, seshConfig) + obfsBuf := make([]byte, obfsBufLen) + f := Frame{ + 1, + 0, + 0, + make([]byte, testPayloadLen), + } + rand.Read(f.Payload) + n, err := sesh.obfuscate(&f, obfsBuf, 0) + assert.NoError(t, err) + err = sesh.recvDataFromRemote(obfsBuf[:n]) + assert.NoError(t, err) + stream, err := sesh.Accept() + assert.NoError(t, err) + + resultPayload := make([]byte, testPayloadLen) + _, err = stream.Read(resultPayload) + assert.NoError(t, err) + + assert.EqualValues(t, f.Payload, resultPayload) + }) + + t.Run("two frames in order", func(t *testing.T) { + sesh := MakeSession(0, seshConfig) + obfsBuf := make([]byte, obfsBufLen) + f := Frame{ + 1, + 0, + 0, + make([]byte, testPayloadLen), + } + rand.Read(f.Payload) + n, err := sesh.obfuscate(&f, obfsBuf, 0) + assert.NoError(t, err) + err = sesh.recvDataFromRemote(obfsBuf[:n]) + assert.NoError(t, err) + stream, err := sesh.Accept() + assert.NoError(t, err) + + resultPayload := make([]byte, testPayloadLen) + _, err = io.ReadFull(stream, resultPayload) + assert.NoError(t, err) + + assert.EqualValues(t, f.Payload, resultPayload) + + f.Seq += 1 + rand.Read(f.Payload) + n, err = sesh.obfuscate(&f, obfsBuf, 0) + assert.NoError(t, err) + err = sesh.recvDataFromRemote(obfsBuf[:n]) + assert.NoError(t, err) + + _, err = io.ReadFull(stream, resultPayload) + assert.NoError(t, err) + + assert.EqualValues(t, f.Payload, resultPayload) + }) + + t.Run("two frames in order", func(t *testing.T) { + sesh := MakeSession(0, seshConfig) + obfsBuf := make([]byte, obfsBufLen) + f := Frame{ + 1, + 0, + 0, + make([]byte, testPayloadLen), + } + rand.Read(f.Payload) + n, err := sesh.obfuscate(&f, obfsBuf, 0) + assert.NoError(t, err) + err = sesh.recvDataFromRemote(obfsBuf[:n]) + assert.NoError(t, err) + stream, err := sesh.Accept() + assert.NoError(t, err) + + resultPayload := make([]byte, testPayloadLen) + _, err = io.ReadFull(stream, resultPayload) + assert.NoError(t, err) + + assert.EqualValues(t, f.Payload, resultPayload) + + f.Seq += 1 + rand.Read(f.Payload) + n, err = sesh.obfuscate(&f, obfsBuf, 0) + assert.NoError(t, err) + err = sesh.recvDataFromRemote(obfsBuf[:n]) + assert.NoError(t, err) + + _, err = io.ReadFull(stream, resultPayload) + assert.NoError(t, err) + + assert.EqualValues(t, f.Payload, resultPayload) + }) + + if seshType == "ordered" { + t.Run("frames out of order", func(t *testing.T) { + sesh := MakeSession(0, seshConfig) + obfsBuf := make([]byte, obfsBufLen) + f := Frame{ + 1, + 0, + 0, + nil, } - t.Run("initial frame", func(t *testing.T) { - sesh := MakeSession(0, seshConfig) - obfsBuf := make([]byte, obfsBufLen) - f := Frame{ - 1, - 0, - 0, - make([]byte, testPayloadLen), - } - rand.Read(f.Payload) - n, err := sesh.obfuscate(&f, obfsBuf, 0) - assert.NoError(t, err) - err = sesh.recvDataFromRemote(obfsBuf[:n]) - assert.NoError(t, err) - stream, err := sesh.Accept() - assert.NoError(t, err) - resultPayload := make([]byte, testPayloadLen) - _, err = stream.Read(resultPayload) - assert.NoError(t, err) + // First frame + seq0 := make([]byte, testPayloadLen) + rand.Read(seq0) + f.Seq = 0 + f.Payload = seq0 + n, err := sesh.obfuscate(&f, obfsBuf, 0) + assert.NoError(t, err) + err = sesh.recvDataFromRemote(obfsBuf[:n]) + assert.NoError(t, err) - assert.EqualValues(t, f.Payload, resultPayload) - }) + // Third frame + seq2 := make([]byte, testPayloadLen) + rand.Read(seq2) + f.Seq = 2 + f.Payload = seq2 + n, err = sesh.obfuscate(&f, obfsBuf, 0) + assert.NoError(t, err) + err = sesh.recvDataFromRemote(obfsBuf[:n]) + assert.NoError(t, err) - t.Run("two frames in order", func(t *testing.T) { - sesh := MakeSession(0, seshConfig) - obfsBuf := make([]byte, obfsBufLen) - f := Frame{ - 1, - 0, - 0, - make([]byte, testPayloadLen), - } - rand.Read(f.Payload) - n, err := sesh.obfuscate(&f, obfsBuf, 0) - assert.NoError(t, err) - err = sesh.recvDataFromRemote(obfsBuf[:n]) - assert.NoError(t, err) - stream, err := sesh.Accept() - assert.NoError(t, err) + // Second frame + seq1 := make([]byte, testPayloadLen) + rand.Read(seq1) + f.Seq = 1 + f.Payload = seq1 + n, err = sesh.obfuscate(&f, obfsBuf, 0) + assert.NoError(t, err) + err = sesh.recvDataFromRemote(obfsBuf[:n]) + assert.NoError(t, err) - resultPayload := make([]byte, testPayloadLen) - _, err = io.ReadFull(stream, resultPayload) - assert.NoError(t, err) + // Expect things to receive in order + stream, err := sesh.Accept() + assert.NoError(t, err) - assert.EqualValues(t, f.Payload, resultPayload) + resultPayload := make([]byte, testPayloadLen) - f.Seq += 1 - rand.Read(f.Payload) - n, err = sesh.obfuscate(&f, obfsBuf, 0) - assert.NoError(t, err) - err = sesh.recvDataFromRemote(obfsBuf[:n]) - assert.NoError(t, err) + // First + _, err = io.ReadFull(stream, resultPayload) + assert.NoError(t, err) + assert.EqualValues(t, seq0, resultPayload) - _, err = io.ReadFull(stream, resultPayload) - assert.NoError(t, err) + // Second + _, err = io.ReadFull(stream, resultPayload) + assert.NoError(t, err) + assert.EqualValues(t, seq1, resultPayload) - assert.EqualValues(t, f.Payload, resultPayload) - }) - - t.Run("two frames in order", func(t *testing.T) { - sesh := MakeSession(0, seshConfig) - obfsBuf := make([]byte, obfsBufLen) - f := Frame{ - 1, - 0, - 0, - make([]byte, testPayloadLen), - } - rand.Read(f.Payload) - n, err := sesh.obfuscate(&f, obfsBuf, 0) - assert.NoError(t, err) - err = sesh.recvDataFromRemote(obfsBuf[:n]) - assert.NoError(t, err) - stream, err := sesh.Accept() - assert.NoError(t, err) - - resultPayload := make([]byte, testPayloadLen) - _, err = io.ReadFull(stream, resultPayload) - assert.NoError(t, err) - - assert.EqualValues(t, f.Payload, resultPayload) - - f.Seq += 1 - rand.Read(f.Payload) - n, err = sesh.obfuscate(&f, obfsBuf, 0) - assert.NoError(t, err) - err = sesh.recvDataFromRemote(obfsBuf[:n]) - assert.NoError(t, err) - - _, err = io.ReadFull(stream, resultPayload) - assert.NoError(t, err) - - assert.EqualValues(t, f.Payload, resultPayload) - }) - - if seshType == "ordered" { - t.Run("frames out of order", func(t *testing.T) { - sesh := MakeSession(0, seshConfig) - obfsBuf := make([]byte, obfsBufLen) - f := Frame{ - 1, - 0, - 0, - nil, - } - - // First frame - seq0 := make([]byte, testPayloadLen) - rand.Read(seq0) - f.Seq = 0 - f.Payload = seq0 - n, err := sesh.obfuscate(&f, obfsBuf, 0) - assert.NoError(t, err) - err = sesh.recvDataFromRemote(obfsBuf[:n]) - assert.NoError(t, err) - - // Third frame - seq2 := make([]byte, testPayloadLen) - rand.Read(seq2) - f.Seq = 2 - f.Payload = seq2 - n, err = sesh.obfuscate(&f, obfsBuf, 0) - assert.NoError(t, err) - err = sesh.recvDataFromRemote(obfsBuf[:n]) - assert.NoError(t, err) - - // Second frame - seq1 := make([]byte, testPayloadLen) - rand.Read(seq1) - f.Seq = 1 - f.Payload = seq1 - n, err = sesh.obfuscate(&f, obfsBuf, 0) - assert.NoError(t, err) - err = sesh.recvDataFromRemote(obfsBuf[:n]) - assert.NoError(t, err) - - // Expect things to receive in order - stream, err := sesh.Accept() - assert.NoError(t, err) - - resultPayload := make([]byte, testPayloadLen) - - // First - _, err = io.ReadFull(stream, resultPayload) - assert.NoError(t, err) - assert.EqualValues(t, seq0, resultPayload) - - // Second - _, err = io.ReadFull(stream, resultPayload) - assert.NoError(t, err) - assert.EqualValues(t, seq1, resultPayload) - - // Third - _, err = io.ReadFull(stream, resultPayload) - assert.NoError(t, err) - assert.EqualValues(t, seq2, resultPayload) - }) - } + // Third + _, err = io.ReadFull(stream, resultPayload) + assert.NoError(t, err) + assert.EqualValues(t, seq2, resultPayload) }) } + }) } }