123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- package sysinfo // import "github.com/docker/docker/pkg/sysinfo"
- import (
- "io/ioutil"
- "os"
- "path"
- "path/filepath"
- "testing"
- "golang.org/x/sys/unix"
- "gotest.tools/assert"
- )
- func TestReadProcBool(t *testing.T) {
- tmpDir, err := ioutil.TempDir("", "test-sysinfo-proc")
- assert.NilError(t, err)
- defer os.RemoveAll(tmpDir)
- procFile := filepath.Join(tmpDir, "read-proc-bool")
- err = ioutil.WriteFile(procFile, []byte("1"), 0644)
- assert.NilError(t, err)
- if !readProcBool(procFile) {
- t.Fatal("expected proc bool to be true, got false")
- }
- if err := ioutil.WriteFile(procFile, []byte("0"), 0644); err != nil {
- t.Fatal(err)
- }
- if readProcBool(procFile) {
- t.Fatal("expected proc bool to be false, got true")
- }
- if readProcBool(path.Join(tmpDir, "no-exist")) {
- t.Fatal("should be false for non-existent entry")
- }
- }
- func TestCgroupEnabled(t *testing.T) {
- cgroupDir, err := ioutil.TempDir("", "cgroup-test")
- assert.NilError(t, err)
- defer os.RemoveAll(cgroupDir)
- if cgroupEnabled(cgroupDir, "test") {
- t.Fatal("cgroupEnabled should be false")
- }
- err = ioutil.WriteFile(path.Join(cgroupDir, "test"), []byte{}, 0644)
- assert.NilError(t, err)
- if !cgroupEnabled(cgroupDir, "test") {
- t.Fatal("cgroupEnabled should be true")
- }
- }
- func TestNew(t *testing.T) {
- sysInfo := New(false)
- assert.Assert(t, sysInfo != nil)
- checkSysInfo(t, sysInfo)
- sysInfo = New(true)
- assert.Assert(t, sysInfo != nil)
- checkSysInfo(t, sysInfo)
- }
- func checkSysInfo(t *testing.T, sysInfo *SysInfo) {
- // Check if Seccomp is supported, via CONFIG_SECCOMP.then sysInfo.Seccomp must be TRUE , else FALSE
- if err := unix.Prctl(unix.PR_GET_SECCOMP, 0, 0, 0, 0); err != unix.EINVAL {
- // Make sure the kernel has CONFIG_SECCOMP_FILTER.
- if err := unix.Prctl(unix.PR_SET_SECCOMP, unix.SECCOMP_MODE_FILTER, 0, 0, 0); err != unix.EINVAL {
- assert.Assert(t, sysInfo.Seccomp)
- }
- } else {
- assert.Assert(t, !sysInfo.Seccomp)
- }
- }
- func TestNewAppArmorEnabled(t *testing.T) {
- // Check if AppArmor is supported. then it must be TRUE , else FALSE
- if _, err := os.Stat("/sys/kernel/security/apparmor"); err != nil {
- t.Skip("App Armor Must be Enabled")
- }
- sysInfo := New(true)
- assert.Assert(t, sysInfo.AppArmor)
- }
- func TestNewAppArmorDisabled(t *testing.T) {
- // Check if AppArmor is supported. then it must be TRUE , else FALSE
- if _, err := os.Stat("/sys/kernel/security/apparmor"); !os.IsNotExist(err) {
- t.Skip("App Armor Must be Disabled")
- }
- sysInfo := New(true)
- assert.Assert(t, !sysInfo.AppArmor)
- }
- func TestNewCgroupNamespacesEnabled(t *testing.T) {
- // If cgroup namespaces are supported in the kernel, then sysInfo.CgroupNamespaces should be TRUE
- if _, err := os.Stat("/proc/self/ns/cgroup"); err != nil {
- t.Skip("cgroup namespaces must be enabled")
- }
- sysInfo := New(true)
- assert.Assert(t, sysInfo.CgroupNamespaces)
- }
- func TestNewCgroupNamespacesDisabled(t *testing.T) {
- // If cgroup namespaces are *not* supported in the kernel, then sysInfo.CgroupNamespaces should be FALSE
- if _, err := os.Stat("/proc/self/ns/cgroup"); !os.IsNotExist(err) {
- t.Skip("cgroup namespaces must be disabled")
- }
- sysInfo := New(true)
- assert.Assert(t, !sysInfo.CgroupNamespaces)
- }
- func TestNumCPU(t *testing.T) {
- cpuNumbers := NumCPU()
- if cpuNumbers <= 0 {
- t.Fatal("CPU returned must be greater than zero")
- }
- }
|