summaryrefslogtreecommitdiffhomepage
path: root/device/tun_test.go
diff options
context:
space:
mode:
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
+}