open-nomad/client/testutil/driver_compatible.go

90 lines
1.9 KiB
Go
Raw Normal View History

2015-09-23 00:10:03 +00:00
package testutil
import (
2015-10-07 22:24:16 +00:00
"os/exec"
2015-09-23 00:10:03 +00:00
"runtime"
"sync"
2015-09-23 00:10:03 +00:00
"syscall"
"testing"
2018-05-30 17:02:30 +00:00
"github.com/hashicorp/nomad/client/fingerprint"
2015-09-23 00:10:03 +00:00
)
// RequireRoot skips tests unless running on a Unix as root.
func RequireRoot(t *testing.T) {
if syscall.Geteuid() != 0 {
t.Skip("Must run as root on Unix")
}
}
// RequireConsul skips tests unless a Consul binary is available on $PATH.
func RequireConsul(t *testing.T) {
_, err := exec.Command("consul", "version").CombinedOutput()
if err != nil {
t.Skipf("Test requires Consul: %v", err)
}
}
2015-09-23 00:10:03 +00:00
func ExecCompatible(t *testing.T) {
if runtime.GOOS != "linux" || syscall.Geteuid() != 0 {
t.Skip("Test only available running as root on linux")
2015-09-23 00:10:03 +00:00
}
2018-05-30 17:02:30 +00:00
CgroupCompatible(t)
2015-09-23 00:10:03 +00:00
}
func JavaCompatible(t *testing.T) {
if runtime.GOOS == "linux" && syscall.Geteuid() != 0 {
t.Skip("Test only available when running as root on linux")
2015-09-23 00:10:03 +00:00
}
}
2015-09-25 23:49:14 +00:00
func QemuCompatible(t *testing.T) {
// Check if qemu exists
bin := "qemu-system-x86_64"
if runtime.GOOS == "windows" {
bin = "qemu-img"
}
_, err := exec.Command(bin, "--version").CombinedOutput()
if err != nil {
t.Skip("Must have Qemu installed for Qemu specific tests to run")
2015-09-25 23:49:14 +00:00
}
}
2018-05-30 17:02:30 +00:00
func CgroupCompatible(t *testing.T) {
mount, err := fingerprint.FindCgroupMountpointDir()
if err != nil || mount == "" {
t.Skipf("Failed to find cgroup mount: %v %v", mount, err)
}
}
var rktExists bool
var rktOnce sync.Once
func RktCompatible(t *testing.T) {
if runtime.GOOS != "linux" || syscall.Geteuid() != 0 {
t.Skip("Must be root on Linux to run test")
2015-10-07 22:24:16 +00:00
}
2015-10-07 22:24:16 +00:00
// else see if rkt exists
rktOnce.Do(func() {
_, err := exec.Command("rkt", "version").CombinedOutput()
if err == nil {
rktExists = true
}
})
if !rktExists {
2015-10-07 22:24:16 +00:00
t.Skip("Must have rkt installed for rkt specific tests to run")
}
2015-09-29 22:33:25 +00:00
}
func MountCompatible(t *testing.T) {
if runtime.GOOS == "windows" {
t.Skip("Windows does not support mount")
}
if syscall.Geteuid() != 0 {
t.Skip("Must be root to run test")
}
}