netconfig_test: skip test if WireGuard is unavailable
This commit is contained in:
parent
ec4f1f4dc5
commit
badee1eef8
@ -18,6 +18,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@ -26,6 +27,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/rtr7/router7/internal/netconfig"
|
"github.com/rtr7/router7/internal/netconfig"
|
||||||
|
"github.com/vishvananda/netlink"
|
||||||
|
|
||||||
"github.com/andreyvit/diff"
|
"github.com/andreyvit/diff"
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
@ -200,6 +202,30 @@ const goldenDhcp6 = `
|
|||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
|
type wgLink struct{}
|
||||||
|
|
||||||
|
func (w *wgLink) Type() string { return "wireguard" }
|
||||||
|
|
||||||
|
func (w *wgLink) Attrs() *netlink.LinkAttrs {
|
||||||
|
attrs := netlink.NewLinkAttrs()
|
||||||
|
attrs.Name = "wg5"
|
||||||
|
return &attrs
|
||||||
|
}
|
||||||
|
|
||||||
|
var wireGuardAvailable = func() bool {
|
||||||
|
// ns must not collide with any namespace used in the test functions: this
|
||||||
|
// function will be called by the helper process, too.
|
||||||
|
const ns = "ns4"
|
||||||
|
add := exec.Command("ip", "netns", "add", ns)
|
||||||
|
add.Stderr = os.Stderr
|
||||||
|
if err := add.Run(); err != nil {
|
||||||
|
log.Fatalf("%v: %v", add.Args, err)
|
||||||
|
}
|
||||||
|
defer exec.Command("ip", "netns", "delete", ns).Run()
|
||||||
|
|
||||||
|
return netlink.LinkAdd(&wgLink{}) == nil
|
||||||
|
}()
|
||||||
|
|
||||||
func TestNetconfig(t *testing.T) {
|
func TestNetconfig(t *testing.T) {
|
||||||
if os.Getenv("HELPER_PROCESS") == "1" {
|
if os.Getenv("HELPER_PROCESS") == "1" {
|
||||||
tmp, err := ioutil.TempDir("", "router7")
|
tmp, err := ioutil.TempDir("", "router7")
|
||||||
@ -215,7 +241,6 @@ func TestNetconfig(t *testing.T) {
|
|||||||
{"dhcp4/wire/lease.json", goldenDhcp4},
|
{"dhcp4/wire/lease.json", goldenDhcp4},
|
||||||
{"dhcp6/wire/lease.json", goldenDhcp6},
|
{"dhcp6/wire/lease.json", goldenDhcp6},
|
||||||
{"interfaces.json", goldenInterfaces},
|
{"interfaces.json", goldenInterfaces},
|
||||||
{"wireguard.json", goldenWireguard},
|
|
||||||
{"portforwardings.json", pf},
|
{"portforwardings.json", pf},
|
||||||
} {
|
} {
|
||||||
if err := os.MkdirAll(filepath.Join(tmp, filepath.Dir(golden.filename)), 0755); err != nil {
|
if err := os.MkdirAll(filepath.Join(tmp, filepath.Dir(golden.filename)), 0755); err != nil {
|
||||||
@ -225,6 +250,11 @@ func TestNetconfig(t *testing.T) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if wireGuardAvailable {
|
||||||
|
if err := ioutil.WriteFile(filepath.Join(tmp, "wireguard.json"), []byte(goldenWireguard), 0600); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if err := os.MkdirAll(filepath.Join(tmp, "root", "etc"), 0755); err != nil {
|
if err := os.MkdirAll(filepath.Join(tmp, "root", "etc"), 0755); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
@ -332,6 +362,9 @@ func TestNetconfig(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
t.Run("VerifyWireguard", func(t *testing.T) {
|
t.Run("VerifyWireguard", func(t *testing.T) {
|
||||||
|
if !wireGuardAvailable {
|
||||||
|
t.Skipf("WireGuard not available on this machine")
|
||||||
|
}
|
||||||
var stderr bytes.Buffer
|
var stderr bytes.Buffer
|
||||||
wg := exec.Command("ip", "netns", "exec", ns, "wg", "show", "wg0")
|
wg := exec.Command("ip", "netns", "exec", ns, "wg", "show", "wg0")
|
||||||
wg.Stderr = &stderr
|
wg.Stderr = &stderr
|
||||||
|
Loading…
x
Reference in New Issue
Block a user