fix wireguard availability test

This commit is contained in:
Michael Stapelberg 2022-06-06 13:58:39 +02:00
parent 2ee2a943a7
commit 40f8eb5b1b

View File

@ -28,6 +28,7 @@ import (
"github.com/rtr7/router7/internal/netconfig" "github.com/rtr7/router7/internal/netconfig"
"github.com/vishvananda/netlink" "github.com/vishvananda/netlink"
"github.com/vishvananda/netns"
"github.com/andreyvit/diff" "github.com/andreyvit/diff"
"github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp"
@ -239,19 +240,24 @@ const goldenDhcp6 = `
} }
` `
type wgLink struct{} type wgLink struct {
ns int
}
func (w *wgLink) Type() string { return "wireguard" } func (w *wgLink) Type() string { return "wireguard" }
func (w *wgLink) Attrs() *netlink.LinkAttrs { func (w *wgLink) Attrs() *netlink.LinkAttrs {
attrs := netlink.NewLinkAttrs() attrs := netlink.NewLinkAttrs()
attrs.Name = "wg5" attrs.Name = "wg5"
if w.ns > 0 {
attrs.Namespace = netlink.NsFd(w.ns)
}
return &attrs return &attrs
} }
var wireGuardAvailable = func() bool { var wireGuardAvailable = func() bool {
// The wg tool must also be available for our test to succeed: // The wg tool must also be available for our test to succeed:
if _, err := exec.LookPath("wg"); err == nil { if _, err := exec.LookPath("wg"); err != nil {
return false return false
} }
@ -265,7 +271,18 @@ var wireGuardAvailable = func() bool {
} }
defer exec.Command("ip", "netns", "delete", ns).Run() defer exec.Command("ip", "netns", "delete", ns).Run()
return netlink.LinkAdd(&wgLink{}) == nil nsHandle, err := netns.GetFromName(ns)
if err != nil {
log.Printf("GetFromName: %v", err)
return false
}
if err := netlink.LinkAdd(&wgLink{ns: int(nsHandle)}); err != nil {
log.Printf("netlink.LinkAdd: %v", err)
return false
}
return true
}() }()
func TestNetconfig(t *testing.T) { func TestNetconfig(t *testing.T) {