mirror of
https://github.com/vishvananda/netlink
synced 2025-01-19 05:31:33 +00:00
58c32ae2d7
Signed-off-by: Wataru Ishida <ishida.wataru@lab.ntt.co.jp>
84 lines
1.7 KiB
Go
84 lines
1.7 KiB
Go
package netlink
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
"runtime"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/vishvananda/netns"
|
|
)
|
|
|
|
type tearDownNetlinkTest func()
|
|
|
|
func skipUnlessRoot(t *testing.T) {
|
|
if os.Getuid() != 0 {
|
|
msg := "Skipped test because it requires root privileges."
|
|
log.Printf(msg)
|
|
t.Skip(msg)
|
|
}
|
|
}
|
|
|
|
func setUpNetlinkTest(t *testing.T) tearDownNetlinkTest {
|
|
skipUnlessRoot(t)
|
|
|
|
// new temporary namespace so we don't pollute the host
|
|
// lock thread since the namespace is thread local
|
|
runtime.LockOSThread()
|
|
var err error
|
|
ns, err := netns.New()
|
|
if err != nil {
|
|
t.Fatal("Failed to create newns", ns)
|
|
}
|
|
|
|
return func() {
|
|
ns.Close()
|
|
runtime.UnlockOSThread()
|
|
}
|
|
}
|
|
|
|
func setUpMPLSNetlinkTest(t *testing.T) tearDownNetlinkTest {
|
|
if _, err := os.Stat("/proc/sys/net/mpls/platform_labels"); err != nil {
|
|
msg := "Skipped test because it requires MPLS support."
|
|
log.Printf(msg)
|
|
t.Skip(msg)
|
|
}
|
|
f := setUpNetlinkTest(t)
|
|
setUpF := func(path, value string) {
|
|
file, err := os.Create(path)
|
|
defer file.Close()
|
|
if err != nil {
|
|
t.Fatalf("Failed to open %s: %s", path, err)
|
|
}
|
|
file.WriteString(value)
|
|
}
|
|
setUpF("/proc/sys/net/mpls/platform_labels", "1024")
|
|
setUpF("/proc/sys/net/mpls/conf/lo/input", "1")
|
|
return f
|
|
}
|
|
|
|
func setUpNetlinkTestWithKModule(t *testing.T, name string) tearDownNetlinkTest {
|
|
file, err := ioutil.ReadFile("/proc/modules")
|
|
if err != nil {
|
|
t.Fatal("Failed to open /proc/modules", err)
|
|
}
|
|
found := false
|
|
for _, line := range strings.Split(string(file), "\n") {
|
|
n := strings.Split(line, " ")[0]
|
|
if n == name {
|
|
found = true
|
|
break
|
|
}
|
|
|
|
}
|
|
if !found {
|
|
msg := fmt.Sprintf("Skipped test because it requres kmodule %s.", name)
|
|
log.Println(msg)
|
|
t.Skip(msg)
|
|
}
|
|
return setUpNetlinkTest(t)
|
|
}
|