path: root/device/tun_test.go
blob: fbe4c1dff552a00b623a5ffa46c67f20d3a727be (plain) (tree)

/* SPDX-License-Identifier: MIT
 * Copyright (C) 2017-2019 WireGuard LLC. All Rights Reserved.

package device

import (


// 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 {
	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