summaryrefslogtreecommitdiffhomepage
path: root/device/tun_test.go
diff options
context:
space:
mode:
authorMatt Layher <mdlayher@gmail.com>2019-05-29 12:18:20 -0400
committerJason A. Donenfeld <Jason@zx2c4.com>2019-05-29 18:34:55 +0200
commit32912dc778a0b98637fbfe010b31bd0b746662e6 (patch)
tree7d9dfa99bcb6e0479f6b4e0358f5f6daa213929d /device/tun_test.go
parentd4034e5f8a298c263c820d13a7758436f5e1b89b (diff)
device, tun: rearrange code and fix device tests
Signed-off-by: Matt Layher <mdlayher@gmail.com>
Diffstat (limited to 'device/tun_test.go')
-rw-r--r--device/tun_test.go56
1 files changed, 56 insertions, 0 deletions
diff --git a/device/tun_test.go b/device/tun_test.go
new file mode 100644
index 0000000..fbe4c1d
--- /dev/null
+++ b/device/tun_test.go
@@ -0,0 +1,56 @@
+/* SPDX-License-Identifier: MIT
+ *
+ * Copyright (C) 2017-2019 WireGuard LLC. All Rights Reserved.
+ */
+
+package device
+
+import (
+ "errors"
+ "os"
+
+ "golang.zx2c4.com/wireguard/tun"
+)
+
+// newDummyTUN creates a dummy TUN device with the specified name.
+func newDummyTUN(name string) tun.TUNDevice {
+ return &dummyTUN{
+ name: name,
+ packets: make(chan []byte, 100),
+ events: make(chan tun.TUNEvent, 10),
+ }
+}
+
+// A dummyTUN is a tun.TUNDevice which is used in unit tests.
+type dummyTUN struct {
+ name string
+ mtu int
+ packets chan []byte
+ events chan tun.TUNEvent
+}
+
+func (d *dummyTUN) Events() chan tun.TUNEvent { return d.events }
+func (*dummyTUN) File() *os.File { return nil }
+func (*dummyTUN) Flush() error { return nil }
+func (d *dummyTUN) MTU() (int, error) { return d.mtu, nil }
+func (d *dummyTUN) Name() (string, error) { return d.name, nil }
+
+func (d *dummyTUN) Close() error {
+ close(d.events)
+ close(d.packets)
+ return nil
+}
+
+func (d *dummyTUN) Read(b []byte, offset int) (int, error) {
+ buf, ok := <-d.packets
+ if !ok {
+ return 0, errors.New("device closed")
+ }
+ copy(b[offset:], buf)
+ return len(buf), nil
+}
+
+func (d *dummyTUN) Write(b []byte, offset int) (int, error) {
+ d.packets <- b[offset:]
+ return len(b), nil
+}