mirror of https://github.com/cbeuw/Cloak
Add some tests
This commit is contained in:
parent
e28df86a55
commit
e9a3c29429
|
|
@ -139,6 +139,7 @@ func (sesh *Session) delStream(id uint32) {
|
||||||
func (sesh *Session) recvDataFromRemote(data []byte) {
|
func (sesh *Session) recvDataFromRemote(data []byte) {
|
||||||
frame, err := sesh.Deobfs(data)
|
frame, err := sesh.Deobfs(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
// TODO: return this error
|
||||||
log.Debugf("Failed to decrypt a frame for session %v: %v", sesh.id, err)
|
log.Debugf("Failed to decrypt a frame for session %v: %v", sesh.id, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,138 @@
|
||||||
package multiplex
|
package multiplex
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"github.com/cbeuw/Cloak/internal/util"
|
"github.com/cbeuw/Cloak/internal/util"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
var seshConfig = &SessionConfig{
|
var seshConfigOrdered = &SessionConfig{
|
||||||
Obfuscator: nil,
|
Obfuscator: nil,
|
||||||
Valve: nil,
|
Valve: nil,
|
||||||
UnitRead: util.ReadTLS,
|
UnitRead: util.ReadTLS,
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkRecvDataFromRemote(b *testing.B) {
|
var seshConfigUnordered = &SessionConfig{
|
||||||
testPayload := make([]byte, 1024)
|
Obfuscator: nil,
|
||||||
|
Valve: nil,
|
||||||
|
UnitRead: util.ReadTLS,
|
||||||
|
Unordered: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRecvDataFromRemote(t *testing.T) {
|
||||||
|
testPayloadLen := 1024
|
||||||
|
testPayload := make([]byte, testPayloadLen)
|
||||||
|
rand.Read(testPayload)
|
||||||
|
f := &Frame{
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
testPayload,
|
||||||
|
}
|
||||||
|
obfsBuf := make([]byte, 17000)
|
||||||
|
|
||||||
|
sessionKey := make([]byte, 32)
|
||||||
|
rand.Read(sessionKey)
|
||||||
|
t.Run("plain ordered", func(t *testing.T) {
|
||||||
|
obfuscator, _ := GenerateObfs(0x00, sessionKey)
|
||||||
|
seshConfigOrdered.Obfuscator = obfuscator
|
||||||
|
sesh := MakeSession(0, seshConfigOrdered)
|
||||||
|
n, _ := sesh.Obfs(f, obfsBuf)
|
||||||
|
|
||||||
|
sesh.recvDataFromRemote(obfsBuf[:n])
|
||||||
|
stream, err := sesh.Accept()
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resultPayload := make([]byte, testPayloadLen)
|
||||||
|
_, err = stream.Read(resultPayload)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !bytes.Equal(testPayload, resultPayload) {
|
||||||
|
t.Errorf("Expecting %x, got %x", testPayload, resultPayload)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
t.Run("aes-gcm ordered", func(t *testing.T) {
|
||||||
|
obfuscator, _ := GenerateObfs(0x01, sessionKey)
|
||||||
|
seshConfigOrdered.Obfuscator = obfuscator
|
||||||
|
sesh := MakeSession(0, seshConfigOrdered)
|
||||||
|
n, _ := sesh.Obfs(f, obfsBuf)
|
||||||
|
|
||||||
|
sesh.recvDataFromRemote(obfsBuf[:n])
|
||||||
|
stream, err := sesh.Accept()
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resultPayload := make([]byte, testPayloadLen)
|
||||||
|
_, err = stream.Read(resultPayload)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !bytes.Equal(testPayload, resultPayload) {
|
||||||
|
t.Errorf("Expecting %x, got %x", testPayload, resultPayload)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
t.Run("chacha20-poly1305 ordered", func(t *testing.T) {
|
||||||
|
obfuscator, _ := GenerateObfs(0x02, sessionKey)
|
||||||
|
seshConfigOrdered.Obfuscator = obfuscator
|
||||||
|
sesh := MakeSession(0, seshConfigOrdered)
|
||||||
|
n, _ := sesh.Obfs(f, obfsBuf)
|
||||||
|
|
||||||
|
sesh.recvDataFromRemote(obfsBuf[:n])
|
||||||
|
stream, err := sesh.Accept()
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resultPayload := make([]byte, testPayloadLen)
|
||||||
|
_, err = stream.Read(resultPayload)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !bytes.Equal(testPayload, resultPayload) {
|
||||||
|
t.Errorf("Expecting %x, got %x", testPayload, resultPayload)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("plain unordered", func(t *testing.T) {
|
||||||
|
obfuscator, _ := GenerateObfs(0x00, sessionKey)
|
||||||
|
seshConfigUnordered.Obfuscator = obfuscator
|
||||||
|
sesh := MakeSession(0, seshConfigOrdered)
|
||||||
|
n, _ := sesh.Obfs(f, obfsBuf)
|
||||||
|
|
||||||
|
sesh.recvDataFromRemote(obfsBuf[:n])
|
||||||
|
stream, err := sesh.Accept()
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resultPayload := make([]byte, testPayloadLen)
|
||||||
|
_, err = stream.Read(resultPayload)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !bytes.Equal(testPayload, resultPayload) {
|
||||||
|
t.Errorf("Expecting %x, got %x", testPayload, resultPayload)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkRecvDataFromRemote_Ordered(b *testing.B) {
|
||||||
|
testPayloadLen := 1024
|
||||||
|
testPayload := make([]byte, testPayloadLen)
|
||||||
rand.Read(testPayload)
|
rand.Read(testPayload)
|
||||||
f := &Frame{
|
f := &Frame{
|
||||||
1,
|
1,
|
||||||
|
|
@ -28,8 +147,8 @@ func BenchmarkRecvDataFromRemote(b *testing.B) {
|
||||||
|
|
||||||
b.Run("plain", func(b *testing.B) {
|
b.Run("plain", func(b *testing.B) {
|
||||||
obfuscator, _ := GenerateObfs(0x00, sessionKey)
|
obfuscator, _ := GenerateObfs(0x00, sessionKey)
|
||||||
seshConfig.Obfuscator = obfuscator
|
seshConfigOrdered.Obfuscator = obfuscator
|
||||||
sesh := MakeSession(0, seshConfig)
|
sesh := MakeSession(0, seshConfigOrdered)
|
||||||
n, _ := sesh.Obfs(f, obfsBuf)
|
n, _ := sesh.Obfs(f, obfsBuf)
|
||||||
|
|
||||||
b.ResetTimer()
|
b.ResetTimer()
|
||||||
|
|
@ -41,8 +160,8 @@ func BenchmarkRecvDataFromRemote(b *testing.B) {
|
||||||
|
|
||||||
b.Run("aes-gcm", func(b *testing.B) {
|
b.Run("aes-gcm", func(b *testing.B) {
|
||||||
obfuscator, _ := GenerateObfs(0x01, sessionKey)
|
obfuscator, _ := GenerateObfs(0x01, sessionKey)
|
||||||
seshConfig.Obfuscator = obfuscator
|
seshConfigOrdered.Obfuscator = obfuscator
|
||||||
sesh := MakeSession(0, seshConfig)
|
sesh := MakeSession(0, seshConfigOrdered)
|
||||||
n, _ := sesh.Obfs(f, obfsBuf)
|
n, _ := sesh.Obfs(f, obfsBuf)
|
||||||
|
|
||||||
b.ResetTimer()
|
b.ResetTimer()
|
||||||
|
|
@ -54,8 +173,8 @@ func BenchmarkRecvDataFromRemote(b *testing.B) {
|
||||||
|
|
||||||
b.Run("chacha20-poly1305", func(b *testing.B) {
|
b.Run("chacha20-poly1305", func(b *testing.B) {
|
||||||
obfuscator, _ := GenerateObfs(0x02, sessionKey)
|
obfuscator, _ := GenerateObfs(0x02, sessionKey)
|
||||||
seshConfig.Obfuscator = obfuscator
|
seshConfigOrdered.Obfuscator = obfuscator
|
||||||
sesh := MakeSession(0, seshConfig)
|
sesh := MakeSession(0, seshConfigOrdered)
|
||||||
n, _ := sesh.Obfs(f, obfsBuf)
|
n, _ := sesh.Obfs(f, obfsBuf)
|
||||||
|
|
||||||
b.ResetTimer()
|
b.ResetTimer()
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ func (b *blackhole) SetDeadline(t time.Time) error { return nil }
|
||||||
func (b *blackhole) SetReadDeadline(t time.Time) error { return nil }
|
func (b *blackhole) SetReadDeadline(t time.Time) error { return nil }
|
||||||
func (b *blackhole) SetWriteDeadline(t time.Time) error { return nil }
|
func (b *blackhole) SetWriteDeadline(t time.Time) error { return nil }
|
||||||
|
|
||||||
func BenchmarkStream_Write(b *testing.B) {
|
func BenchmarkStream_Write_Ordered(b *testing.B) {
|
||||||
const PAYLOAD_LEN = 1000
|
const PAYLOAD_LEN = 1000
|
||||||
hole := newBlackHole()
|
hole := newBlackHole()
|
||||||
sesh := setupSesh(false)
|
sesh := setupSesh(false)
|
||||||
|
|
@ -70,7 +70,7 @@ func BenchmarkStream_Write(b *testing.B) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkStream_Read(b *testing.B) {
|
func BenchmarkStream_Read_Ordered(b *testing.B) {
|
||||||
sesh := setupSesh(false)
|
sesh := setupSesh(false)
|
||||||
const PAYLOAD_LEN = 1000
|
const PAYLOAD_LEN = 1000
|
||||||
testPayload := make([]byte, PAYLOAD_LEN)
|
testPayload := make([]byte, PAYLOAD_LEN)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue