github.com/forest33/wtun@v0.3.1/tun/tun_linux_test.go (about) 1 package tun 2 3 import ( 4 "bytes" 5 "fmt" 6 "os/exec" 7 "testing" 8 ) 9 10 func TestCreate(t *testing.T) { 11 //d, err := CreateTUN("", DefaultMTU, unix.IFF_VNET_HDR) 12 d, err := CreateTUN("", DefaultMTU, 0) 13 if err != nil { 14 t.Fatalf("failed create device: %v", err) 15 } 16 17 if ev := <-d.Events(); ev != EventUp { 18 t.Fatal("device in not up") 19 } 20 21 deviceName, err := d.Name() 22 if err != nil { 23 t.Fatalf("failed to get device name: %v", err) 24 } 25 26 if err := execute(fmt.Sprintf("ip addr add dev %s local 192.168.100.1 remote 192.168.100.2", deviceName)); err != nil { 27 t.Fatalf("failed to set interface address: %v", err) 28 } 29 if err := execute(fmt.Sprintf("ip link set dev %s mtu %d up", deviceName, DefaultMTU)); err != nil { 30 t.Fatalf("failed to set interface MTU: %v", err) 31 } 32 33 buf := make([]byte, DefaultMTU) 34 nr, err := d.Read(buf) 35 if err != nil { 36 t.Fatalf("failed reading from device: %v", err) 37 } 38 39 nw, err := d.Write(buf[:nr]) 40 if err != nil { 41 t.Fatalf("failed to write to device: %v", err) 42 } 43 44 if nw != nr { 45 t.Fatalf("write failed nw=%d nr=%d", nw, nr) 46 } 47 } 48 49 func execute(command string) error { 50 var stdout bytes.Buffer 51 var stderr bytes.Buffer 52 53 cmd := exec.Command("bash", append([]string{"-c"}, command)...) 54 cmd.Stdout = &stdout 55 cmd.Stderr = &stderr 56 57 return cmd.Run() 58 }