Begin work on full device<->device unit-test
To simulate a full interaction between two WireGuard instances without networking, using dummy instances of the interfaces
This commit is contained in:
parent
fd248c6cb1
commit
6cecaf3157
50
bind_test.go
Normal file
50
bind_test.go
Normal file
|
@ -0,0 +1,50 @@
|
|||
package main
|
||||
|
||||
import "errors"
|
||||
|
||||
type DummyDatagram struct {
|
||||
msg []byte
|
||||
endpoint Endpoint
|
||||
world bool // better type
|
||||
}
|
||||
|
||||
type DummyBind struct {
|
||||
in6 chan DummyDatagram
|
||||
ou6 chan DummyDatagram
|
||||
in4 chan DummyDatagram
|
||||
ou4 chan DummyDatagram
|
||||
closed bool
|
||||
}
|
||||
|
||||
func (b *DummyBind) SetMark(v uint32) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *DummyBind) ReceiveIPv6(buff []byte) (int, Endpoint, error) {
|
||||
datagram, ok := <-b.in6
|
||||
if !ok {
|
||||
return 0, nil, errors.New("closed")
|
||||
}
|
||||
copy(buff, datagram.msg)
|
||||
return len(datagram.msg), datagram.endpoint, nil
|
||||
}
|
||||
|
||||
func (b *DummyBind) ReceiveIPv4(buff []byte) (int, Endpoint, error) {
|
||||
datagram, ok := <-b.in4
|
||||
if !ok {
|
||||
return 0, nil, errors.New("closed")
|
||||
}
|
||||
copy(buff, datagram.msg)
|
||||
return len(datagram.msg), datagram.endpoint, nil
|
||||
}
|
||||
|
||||
func (b *DummyBind) Close() error {
|
||||
close(b.in6)
|
||||
close(b.in4)
|
||||
b.closed = true
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *DummyBind) Send(buff []byte, end Endpoint) error {
|
||||
return nil
|
||||
}
|
43
device_test.go
Normal file
43
device_test.go
Normal file
|
@ -0,0 +1,43 @@
|
|||
package main
|
||||
|
||||
/* Create two device instances and simulate full WireGuard interaction
|
||||
* without network dependencies
|
||||
*/
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestDevice(t *testing.T) {
|
||||
|
||||
// prepare tun devices for generating traffic
|
||||
|
||||
tun1, err := CreateDummyTUN("tun1")
|
||||
if err != nil {
|
||||
t.Error("failed to create tun:", err.Error())
|
||||
}
|
||||
|
||||
tun2, err := CreateDummyTUN("tun2")
|
||||
if err != nil {
|
||||
t.Error("failed to create tun:", err.Error())
|
||||
}
|
||||
|
||||
println(tun1)
|
||||
println(tun2)
|
||||
|
||||
// prepare endpoints
|
||||
|
||||
end1, err := CreateDummyEndpoint()
|
||||
if err != nil {
|
||||
t.Error("failed to create endpoint:", err.Error())
|
||||
}
|
||||
|
||||
end2, err := CreateDummyEndpoint()
|
||||
if err != nil {
|
||||
t.Error("failed to create endpoint:", err.Error())
|
||||
}
|
||||
|
||||
println(end1)
|
||||
println(end2)
|
||||
|
||||
// create binds
|
||||
|
||||
}
|
48
endpoint_test.go
Normal file
48
endpoint_test.go
Normal file
|
@ -0,0 +1,48 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"math/rand"
|
||||
"net"
|
||||
)
|
||||
|
||||
type DummyEndpoint struct {
|
||||
src [16]byte
|
||||
dst [16]byte
|
||||
}
|
||||
|
||||
func CreateDummyEndpoint() (*DummyEndpoint, error) {
|
||||
var end DummyEndpoint
|
||||
if _, err := rand.Read(end.src[:]); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
_, err := rand.Read(end.dst[:])
|
||||
return &end, err
|
||||
}
|
||||
|
||||
func (e *DummyEndpoint) ClearSrc() {}
|
||||
|
||||
func (e *DummyEndpoint) SrcToString() string {
|
||||
var addr net.UDPAddr
|
||||
addr.IP = e.SrcIP()
|
||||
addr.Port = 1000
|
||||
return addr.String()
|
||||
}
|
||||
|
||||
func (e *DummyEndpoint) DstToString() string {
|
||||
var addr net.UDPAddr
|
||||
addr.IP = e.DstIP()
|
||||
addr.Port = 1000
|
||||
return addr.String()
|
||||
}
|
||||
|
||||
func (e *DummyEndpoint) SrcToBytes() []byte {
|
||||
return e.src[:]
|
||||
}
|
||||
|
||||
func (e *DummyEndpoint) DstIP() net.IP {
|
||||
return e.dst[:]
|
||||
}
|
||||
|
||||
func (e *DummyEndpoint) SrcIP() net.IP {
|
||||
return e.src[:]
|
||||
}
|
|
@ -475,7 +475,7 @@ func (device *Device) RoutineHandshake() {
|
|||
peer.endpoint = elem.endpoint
|
||||
peer.mutex.Unlock()
|
||||
|
||||
logDebug.Println("Received handshake initiation from", peer)
|
||||
logDebug.Println(peer, ": Received handshake initiation")
|
||||
|
||||
peer.TimerEphemeralKeyCreated()
|
||||
|
||||
|
|
Loading…
Reference in a new issue