Add tests

pull/110/head
Andy Wang 4 years ago
parent c22b0fb54f
commit a8c584c242

@ -2,6 +2,7 @@ package multiplex
import ( import (
"encoding/binary" "encoding/binary"
"io"
"time" "time"
//"log" //"log"
@ -72,3 +73,23 @@ func TestRecvNewFrame(t *testing.T) {
test(outOfOrder2, t) test(outOfOrder2, t)
}) })
} }
func TestStreamBuffer_RecvThenClose(t *testing.T) {
const testDataLen = 128
sb := NewStreamBuffer()
testData := make([]byte, testDataLen)
testFrame := Frame{
StreamID: 0,
Seq: 0,
Closing: 0,
Payload: testData,
}
sb.Write(testFrame)
sb.Close()
readBuf := make([]byte, testDataLen)
_, err := io.ReadFull(sb, readBuf)
if err != nil {
t.Error(err)
}
}

@ -2,6 +2,7 @@ package multiplex
import ( import (
"bytes" "bytes"
"github.com/cbeuw/Cloak/internal/common"
"io" "io"
"math/rand" "math/rand"
"net" "net"
@ -11,10 +12,10 @@ import (
"github.com/cbeuw/connutil" "github.com/cbeuw/connutil"
) )
func setupSesh(unordered bool) *Session { const payloadLen = 1000
var sessionKey [32]byte
rand.Read(sessionKey[:]) func setupSesh(unordered bool, key [32]byte) *Session {
obfuscator, _ := MakeObfuscator(0x00, sessionKey) obfuscator, _ := MakeObfuscator(0x00, key)
seshConfig := SessionConfig{ seshConfig := SessionConfig{
Obfuscator: obfuscator, Obfuscator: obfuscator,
@ -25,11 +26,12 @@ func setupSesh(unordered bool) *Session {
} }
func BenchmarkStream_Write_Ordered(b *testing.B) { func BenchmarkStream_Write_Ordered(b *testing.B) {
const PAYLOAD_LEN = 1000
hole := connutil.Discard() hole := connutil.Discard()
sesh := setupSesh(false) var sessionKey [32]byte
rand.Read(sessionKey[:])
sesh := setupSesh(false, sessionKey)
sesh.AddConnection(hole) sesh.AddConnection(hole)
testData := make([]byte, PAYLOAD_LEN) testData := make([]byte, payloadLen)
rand.Read(testData) rand.Read(testData)
stream, _ := sesh.OpenStream() stream, _ := sesh.OpenStream()
@ -42,14 +44,15 @@ func BenchmarkStream_Write_Ordered(b *testing.B) {
"got", err, "got", err,
) )
} }
b.SetBytes(PAYLOAD_LEN) b.SetBytes(payloadLen)
} }
} }
func BenchmarkStream_Read_Ordered(b *testing.B) { func BenchmarkStream_Read_Ordered(b *testing.B) {
sesh := setupSesh(false) var sessionKey [32]byte
const PAYLOAD_LEN = 1000 rand.Read(sessionKey[:])
testPayload := make([]byte, PAYLOAD_LEN) sesh := setupSesh(false, sessionKey)
testPayload := make([]byte, payloadLen)
rand.Read(testPayload) rand.Read(testPayload)
f := &Frame{ f := &Frame{
@ -84,7 +87,7 @@ func BenchmarkStream_Read_Ordered(b *testing.B) {
//time.Sleep(5*time.Second) // wait for buffer to fill up //time.Sleep(5*time.Second) // wait for buffer to fill up
readBuf := make([]byte, PAYLOAD_LEN) readBuf := make([]byte, payloadLen)
b.ResetTimer() b.ResetTimer()
for j := 0; j < b.N; j++ { for j := 0; j < b.N; j++ {
n, err := stream.Read(readBuf) n, err := stream.Read(readBuf)
@ -100,11 +103,12 @@ func BenchmarkStream_Read_Ordered(b *testing.B) {
} }
func TestStream_Write(t *testing.T) { func TestStream_Write(t *testing.T) {
const PAYLOAD_LEN = 1000
hole := connutil.Discard() hole := connutil.Discard()
sesh := setupSesh(false) var sessionKey [32]byte
rand.Read(sessionKey[:])
sesh := setupSesh(false, sessionKey)
sesh.AddConnection(hole) sesh.AddConnection(hole)
testData := make([]byte, PAYLOAD_LEN) testData := make([]byte, payloadLen)
rand.Read(testData) rand.Read(testData)
stream, _ := sesh.OpenStream() stream, _ := sesh.OpenStream()
@ -117,8 +121,57 @@ func TestStream_Write(t *testing.T) {
} }
} }
func TestStream_WriteSync(t *testing.T) {
// Close calls made after write MUST have a higher seq
var sessionKey [32]byte
rand.Read(sessionKey[:])
clientSesh := setupSesh(false, sessionKey)
serverSesh := setupSesh(false, sessionKey)
w, r := connutil.AsyncPipe()
clientSesh.AddConnection(&common.TLSConn{Conn: w})
serverSesh.AddConnection(&common.TLSConn{Conn: r})
testData := make([]byte, payloadLen)
rand.Read(testData)
t.Run("test single", func(t *testing.T) {
go func() {
stream, _ := clientSesh.OpenStream()
stream.Write(testData)
stream.Close()
}()
recvBuf := make([]byte, payloadLen)
serverStream, _ := serverSesh.Accept()
_, err := io.ReadFull(serverStream, recvBuf)
if err != nil {
t.Error(err)
}
})
t.Run("test multiple", func(t *testing.T) {
const numStreams = 100
for i := 0; i < numStreams; i++ {
go func() {
stream, _ := clientSesh.OpenStream()
stream.Write(testData)
stream.Close()
}()
}
for i := 0; i < numStreams; i++ {
recvBuf := make([]byte, payloadLen)
serverStream, _ := serverSesh.Accept()
_, err := io.ReadFull(serverStream, recvBuf)
if err != nil {
t.Error(err)
}
}
})
}
func TestStream_Close(t *testing.T) { func TestStream_Close(t *testing.T) {
sesh := setupSesh(false) var sessionKey [32]byte
rand.Read(sessionKey[:])
sesh := setupSesh(false, sessionKey)
testPayload := []byte{42, 42, 42} testPayload := []byte{42, 42, 42}
f := &Frame{ f := &Frame{
@ -161,9 +214,11 @@ func TestStream_Close(t *testing.T) {
} }
func TestStream_Read(t *testing.T) { func TestStream_Read(t *testing.T) {
sesh := setupSesh(false) var sessionKey [32]byte
rand.Read(sessionKey[:])
sesh := setupSesh(false, sessionKey)
testPayload := []byte{42, 42, 42} testPayload := []byte{42, 42, 42}
const PAYLOAD_LEN = 3 const smallPayloadLen = 3
f := &Frame{ f := &Frame{
1, 1,
@ -195,8 +250,8 @@ func TestStream_Read(t *testing.T) {
t.Error("failed to read", err) t.Error("failed to read", err)
return return
} }
if i != PAYLOAD_LEN { if i != smallPayloadLen {
t.Errorf("expected read %v, got %v", PAYLOAD_LEN, i) t.Errorf("expected read %v, got %v", smallPayloadLen, i)
return return
} }
if !bytes.Equal(buf[:i], testPayload) { if !bytes.Equal(buf[:i], testPayload) {
@ -230,8 +285,8 @@ func TestStream_Read(t *testing.T) {
if err != nil { if err != nil {
t.Error("failed to read", err) t.Error("failed to read", err)
} }
if i != PAYLOAD_LEN { if i != smallPayloadLen {
t.Errorf("expected read %v, got %v", PAYLOAD_LEN, i) t.Errorf("expected read %v, got %v", smallPayloadLen, i)
} }
if !bytes.Equal(buf[:i], testPayload) { if !bytes.Equal(buf[:i], testPayload) {
t.Error("expected", testPayload, t.Error("expected", testPayload,
@ -255,8 +310,8 @@ func TestStream_Read(t *testing.T) {
if err != nil { if err != nil {
t.Error("failed to read", err) t.Error("failed to read", err)
} }
if i != PAYLOAD_LEN { if i != smallPayloadLen {
t.Errorf("expected read %v, got %v", PAYLOAD_LEN, i) t.Errorf("expected read %v, got %v", smallPayloadLen, i)
} }
if !bytes.Equal(buf[:i], testPayload) { if !bytes.Equal(buf[:i], testPayload) {
t.Error("expected", testPayload, t.Error("expected", testPayload,
@ -272,9 +327,11 @@ func TestStream_Read(t *testing.T) {
} }
func TestStream_UnorderedRead(t *testing.T) { func TestStream_UnorderedRead(t *testing.T) {
sesh := setupSesh(true) var sessionKey [32]byte
rand.Read(sessionKey[:])
sesh := setupSesh(false, sessionKey)
testPayload := []byte{42, 42, 42} testPayload := []byte{42, 42, 42}
const PAYLOAD_LEN = 3 const smallPayloadLen = 3
f := &Frame{ f := &Frame{
1, 1,
@ -304,8 +361,8 @@ func TestStream_UnorderedRead(t *testing.T) {
if err != nil { if err != nil {
t.Error("failed to read", err) t.Error("failed to read", err)
} }
if i != PAYLOAD_LEN { if i != smallPayloadLen {
t.Errorf("expected read %v, got %v", PAYLOAD_LEN, i) t.Errorf("expected read %v, got %v", smallPayloadLen, i)
} }
if !bytes.Equal(buf[:i], testPayload) { if !bytes.Equal(buf[:i], testPayload) {
t.Error("expected", testPayload, t.Error("expected", testPayload,
@ -337,8 +394,8 @@ func TestStream_UnorderedRead(t *testing.T) {
if err != nil { if err != nil {
t.Error("failed to read", err) t.Error("failed to read", err)
} }
if i != PAYLOAD_LEN { if i != smallPayloadLen {
t.Errorf("expected read %v, got %v", PAYLOAD_LEN, i) t.Errorf("expected read %v, got %v", smallPayloadLen, i)
} }
if !bytes.Equal(buf[:i], testPayload) { if !bytes.Equal(buf[:i], testPayload) {
t.Error("expected", testPayload, t.Error("expected", testPayload,
@ -362,8 +419,8 @@ func TestStream_UnorderedRead(t *testing.T) {
if err != nil { if err != nil {
t.Error("failed to read", err) t.Error("failed to read", err)
} }
if i != PAYLOAD_LEN { if i != smallPayloadLen {
t.Errorf("expected read %v, got %v", PAYLOAD_LEN, i) t.Errorf("expected read %v, got %v", smallPayloadLen, i)
} }
if !bytes.Equal(buf[:i], testPayload) { if !bytes.Equal(buf[:i], testPayload) {
t.Error("expected", testPayload, t.Error("expected", testPayload,

@ -137,7 +137,9 @@ func TestSwitchboard_TxCredit(t *testing.T) {
} }
func TestSwitchboard_CloseOnOneDisconn(t *testing.T) { func TestSwitchboard_CloseOnOneDisconn(t *testing.T) {
sesh := setupSesh(false) var sessionKey [32]byte
rand.Read(sessionKey[:])
sesh := setupSesh(false, sessionKey)
conn0client, conn0server := connutil.AsyncPipe() conn0client, conn0server := connutil.AsyncPipe()
sesh.AddConnection(conn0client) sesh.AddConnection(conn0client)

Loading…
Cancel
Save