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  }