github.com/forest33/wtun@v0.3.1/tun/tun_windows_test.go (about) 1 package tun 2 3 import ( 4 "bytes" 5 "fmt" 6 "os/exec" 7 "testing" 8 "time" 9 ) 10 11 func TestCreate(t *testing.T) { 12 d, err := CreateTUN(fmt.Sprintf("tun-%d", time.Now().Unix()), "My", DefaultMTU) 13 if err != nil { 14 t.Fatalf("failed create device: %v", err) 15 } 16 17 deviceName, err := d.Name() 18 if err != nil { 19 t.Fatalf("failed to get device name: %v", err) 20 } 21 22 if err := execute(fmt.Sprintf("Disable-NetAdapterBinding -Name \"%s\" -ComponentID ms_tcpip6", deviceName)); err != nil { 23 t.Fatalf("failed to set interface address: %v", err) 24 } 25 if err := execute(fmt.Sprintf("netsh interface ip set address name=\"%s\" source=static addr=192.168.100.1 mask=255.255.255.0 gateway=none", deviceName)); err != nil { 26 t.Fatalf("failed to set interface address: %v", err) 27 } 28 if err := execute(fmt.Sprintf("netsh interface ip set interface \"%s\" mtu=%d", deviceName, DefaultMTU)); err != nil { 29 t.Fatalf("failed to set interface MTU: %v", err) 30 } 31 32 buf := make([]byte, DefaultMTU) 33 nr, err := d.Read(buf) 34 if err != nil { 35 t.Fatalf("failed reading from device: %v", err) 36 } 37 38 nw, err := d.Write(buf[:nr]) 39 if err != nil { 40 t.Fatalf("failed to write to device: %v", err) 41 } 42 43 if nw != nr { 44 t.Fatalf("write failed nw=%d nr=%d", nw, nr) 45 } 46 } 47 48 func execute(command string) error { 49 var stdout bytes.Buffer 50 var stderr bytes.Buffer 51 52 cmd := exec.Command("powershell.exe", append([]string{"-c"}, command)...) 53 cmd.Stdout = &stdout 54 cmd.Stderr = &stderr 55 56 return cmd.Run() 57 }