/*
GoVPN -- simple secure free software virtual private network daemon
-Copyright (C) 2014-2016 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2014-2017 Sergey Matveev <stargrave@stargrave.org>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
import (
"testing"
"testing/quick"
- "time"
)
var (
testPeer *Peer
testPt []byte
testCt []byte
- testPeerId PeerId
+ testPeerID PeerID
testConf *PeerConf
)
func init() {
id := new([IDSize]byte)
- testPeerId = PeerId(*id)
+ testPeerID = PeerID(*id)
testConf = &PeerConf{
- Id: &testPeerId,
+ ID: &testPeerID,
MTU: MTUDefault,
- Timeout: time.Second * time.Duration(TimeoutDefault),
+ Timeout: TimeoutDefault,
}
- testPeer = newPeer(true, "foo", Dummy{&testCt}, testConf, new([SSize]byte))
testPt = make([]byte, 789)
}
+func testPeerNew(t *testing.T) {
+ var err error
+ testPeer, err = newPeer(true, "foo", Dummy{&testCt}, testConf, new([SSize]byte))
+ if err != nil {
+ t.Error(err)
+ }
+}
+
func TestTransportSymmetric(t *testing.T) {
- peerd := newPeer(true, "foo", Dummy{nil}, testConf, new([SSize]byte))
+ testPeerNew(t)
+ peerd, err := newPeer(false, "foo", Dummy{nil}, testConf, new([SSize]byte))
+ if err != nil {
+ t.Error(err)
+ }
f := func(payload []byte) bool {
if len(payload) == 0 {
return true
}
- testPeer.EthProcess(payload)
+ if err := testPeer.EthProcess(payload); err != nil {
+ t.Error(err)
+ }
return peerd.PktProcess(testCt, Dummy{nil}, true)
}
if err := quick.Check(f, nil); err != nil {
}
func TestTransportSymmetricNoise(t *testing.T) {
- peerd := newPeer(true, "foo", Dummy{nil}, testConf, new([SSize]byte))
+ testPeerNew(t)
+ peerd, err := newPeer(false, "foo", Dummy{nil}, testConf, new([SSize]byte))
+ if err != nil {
+ t.Error(err)
+ }
testPeer.NoiseEnable = true
peerd.NoiseEnable = true
f := func(payload []byte) bool {
if len(payload) == 0 {
return true
}
- testPeer.EthProcess(payload)
+ if err := testPeer.EthProcess(payload); err != nil {
+ t.Error(err)
+ }
return peerd.PktProcess(testCt, Dummy{nil}, true)
}
if err := quick.Check(f, nil); err != nil {
}
func TestTransportSymmetricEncless(t *testing.T) {
- peerd := newPeer(true, "foo", Dummy{nil}, testConf, new([SSize]byte))
+ testPeerNew(t)
+ peerd, err := newPeer(false, "foo", Dummy{nil}, testConf, new([SSize]byte))
+ if err != nil {
+ t.Error(err)
+ }
testPeer.Encless = true
testPeer.NoiseEnable = true
peerd.Encless = true
if len(payload) == 0 {
return true
}
- testPeer.EthProcess(payload)
+ if err := testPeer.EthProcess(payload); err != nil {
+ t.Error(err)
+ }
return peerd.PktProcess(testCt, Dummy{nil}, true)
}
if err := quick.Check(f, nil); err != nil {
}
func BenchmarkEnc(b *testing.B) {
- b.ResetTimer()
+ var err error
for i := 0; i < b.N; i++ {
- testPeer.EthProcess(testPt)
+ if err = testPeer.EthProcess(testPt); err != nil {
+ b.Error(err)
+ }
}
}
func BenchmarkDec(b *testing.B) {
- testPeer = newPeer(true, "foo", Dummy{&testCt}, testConf, new([SSize]byte))
- testPeer.EthProcess(testPt)
- testPeer = newPeer(true, "foo", Dummy{nil}, testConf, new([SSize]byte))
+ var err error
+ testPeer, err = newPeer(true, "foo", Dummy{&testCt}, testConf, new([SSize]byte))
+ if err != nil {
+ b.Error(err)
+ }
+ if err := testPeer.EthProcess(testPt); err != nil {
+ b.Error(err)
+ }
+ testPeer, err = newPeer(true, "foo", Dummy{nil}, testConf, new([SSize]byte))
+ if err != nil {
+ b.Error(err)
+ }
orig := make([]byte, len(testCt))
copy(orig, testCt)
+ nonce := new([NonceSize]byte)
+ copy(nonce[:], testCt[len(testCt)-NonceSize:])
b.ResetTimer()
for i := 0; i < b.N; i++ {
- testPeer.nonceBucket0 = make(map[uint64]struct{}, 1)
- testPeer.nonceBucket1 = make(map[uint64]struct{}, 1)
+ testPeer.nonceBucketL = make(map[[NonceSize]byte]struct{}, 1)
+ testPeer.nonceBucketM = make(map[[NonceSize]byte]struct{}, 1)
+ testPeer.nonceBucketH = make(map[[NonceSize]byte]struct{}, 1)
+ testPeer.nonceBucketL[*nonce] = struct{}{}
copy(testCt, orig)
if !testPeer.PktProcess(testCt, Dummy{nil}, true) {
b.Fail()