github.com/jfrazelle/docker@v1.1.2-0.20210712172922-bf78e25fe508/integration-cli/requirements_unix_test.go (about)

     1  // +build !windows
     2  
     3  package main
     4  
     5  import (
     6  	"bytes"
     7  	"io/ioutil"
     8  	"os/exec"
     9  	"strings"
    10  
    11  	"github.com/docker/docker/pkg/sysinfo"
    12  )
    13  
    14  var (
    15  	// SysInfo stores information about which features a kernel supports.
    16  	SysInfo *sysinfo.SysInfo
    17  )
    18  
    19  func cpuCfsPeriod() bool {
    20  	return testEnv.DaemonInfo.CPUCfsPeriod
    21  }
    22  
    23  func cpuCfsQuota() bool {
    24  	return testEnv.DaemonInfo.CPUCfsQuota
    25  }
    26  
    27  func cpuShare() bool {
    28  	return testEnv.DaemonInfo.CPUShares
    29  }
    30  
    31  func oomControl() bool {
    32  	return testEnv.DaemonInfo.OomKillDisable
    33  }
    34  
    35  func pidsLimit() bool {
    36  	return SysInfo.PidsLimit
    37  }
    38  
    39  func memoryLimitSupport() bool {
    40  	return testEnv.DaemonInfo.MemoryLimit
    41  }
    42  
    43  func memoryReservationSupport() bool {
    44  	return SysInfo.MemoryReservation
    45  }
    46  
    47  func swapMemorySupport() bool {
    48  	return testEnv.DaemonInfo.SwapLimit
    49  }
    50  
    51  func memorySwappinessSupport() bool {
    52  	return testEnv.IsLocalDaemon() && SysInfo.MemorySwappiness
    53  }
    54  
    55  func blkioWeight() bool {
    56  	return testEnv.IsLocalDaemon() && SysInfo.BlkioWeight
    57  }
    58  
    59  func cgroupCpuset() bool {
    60  	return testEnv.DaemonInfo.CPUSet
    61  }
    62  
    63  func seccompEnabled() bool {
    64  	return supportsSeccomp && SysInfo.Seccomp
    65  }
    66  
    67  func bridgeNfIptables() bool {
    68  	return !SysInfo.BridgeNFCallIPTablesDisabled
    69  }
    70  
    71  func unprivilegedUsernsClone() bool {
    72  	content, err := ioutil.ReadFile("/proc/sys/kernel/unprivileged_userns_clone")
    73  	return err != nil || !strings.Contains(string(content), "0")
    74  }
    75  
    76  func overlayFSSupported() bool {
    77  	cmd := exec.Command(dockerBinary, "run", "--rm", "busybox", "/bin/sh", "-c", "cat /proc/filesystems")
    78  	out, err := cmd.CombinedOutput()
    79  	if err != nil {
    80  		return false
    81  	}
    82  	return bytes.Contains(out, []byte("overlay\n"))
    83  }
    84  
    85  func init() {
    86  	if testEnv.IsLocalDaemon() {
    87  		SysInfo = sysinfo.New(true)
    88  	}
    89  }