]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
Properly close DummyTUN to avoid deadlock in TestNoiseHandshake
authorFilippo Valsorda <hi@filippo.io>
Mon, 21 May 2018 03:12:55 +0000 (23:12 -0400)
committerJason A. Donenfeld <Jason@zx2c4.com>
Mon, 21 May 2018 18:20:13 +0000 (20:20 +0200)
License: MIT
Signed-off-by: Filippo Valsorda <valsorda@google.com>
helper_test.go
noise_test.go
tun.go

index c72e868918c1fc1f95374ae887e86d1dc858d3c7..b7c9c6c2f6ad2485de8decec40034c7bbbacbc54 100644 (file)
@@ -8,6 +8,7 @@ package main
 
 import (
        "bytes"
+       "errors"
        "os"
        "testing"
 )
@@ -40,6 +41,8 @@ func (tun *DummyTUN) Write(d []byte, offset int) (int, error) {
 }
 
 func (tun *DummyTUN) Close() error {
+       close(tun.events)
+       close(tun.packets)
        return nil
 }
 
@@ -48,7 +51,10 @@ func (tun *DummyTUN) Events() chan TUNEvent {
 }
 
 func (tun *DummyTUN) Read(d []byte, offset int) (int, error) {
-       t := <-tun.packets
+       t, ok := <-tun.packets
+       if !ok {
+               return 0, errors.New("device closed")
+       }
        copy(d[offset:], t)
        return len(t), nil
 }
@@ -57,6 +63,7 @@ func CreateDummyTUN(name string) (TUNDevice, error) {
        var dummy DummyTUN
        dummy.mtu = 0
        dummy.packets = make(chan []byte, 100)
+       dummy.events = make(chan TUNEvent, 10)
        return &dummy, nil
 }
 
index d5b1011dc9bfacac0d9c90d04f40f52bbd5804de..3da36e978fbeb12659a28d32a3070537cfb9c89a 100644 (file)
@@ -58,6 +58,7 @@ func TestNoiseHandshake(t *testing.T) {
        packet := make([]byte, 0, 256)
        writer := bytes.NewBuffer(packet)
        err = binary.Write(writer, binary.LittleEndian, msg1)
+       assertNil(t, err)
        peer := dev2.ConsumeMessageInitiation(msg1)
        if peer == nil {
                t.Fatal("handshake failed at initiation message")
diff --git a/tun.go b/tun.go
index 65a878cfab899d21400443709cfc82bed9aef29a..d2fb708d8e72b8ac6e988477956cfa52eb4de2af 100644 (file)
--- a/tun.go
+++ b/tun.go
@@ -33,9 +33,11 @@ type TUNDevice interface {
 
 func (device *Device) RoutineTUNEventReader() {
        setUp := false
+       logDebug := device.log.Debug
        logInfo := device.log.Info
        logError := device.log.Error
 
+       logDebug.Println("Routine: event worker - started")
        device.state.starting.Done()
 
        for event := range device.tun.device.Events() {
@@ -67,5 +69,6 @@ func (device *Device) RoutineTUNEventReader() {
                }
        }
 
+       logDebug.Println("Routine: event worker - stopped")
        device.state.stopping.Done()
 }