Tizen_4.0 base
[platform/upstream/docker-engine.git] / integration-cli / requirements_unix_test.go
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/parsers/kernel"
12         "github.com/docker/docker/pkg/sysinfo"
13 )
14
15 var (
16         // SysInfo stores information about which features a kernel supports.
17         SysInfo *sysinfo.SysInfo
18 )
19
20 func cpuCfsPeriod() bool {
21         return SysInfo.CPUCfsPeriod
22 }
23
24 func cpuCfsQuota() bool {
25         return SysInfo.CPUCfsQuota
26 }
27
28 func cpuShare() bool {
29         return SysInfo.CPUShares
30 }
31
32 func oomControl() bool {
33         return SysInfo.OomKillDisable
34 }
35
36 func pidsLimit() bool {
37         return SysInfo.PidsLimit
38 }
39
40 func kernelMemorySupport() bool {
41         return SysInfo.KernelMemory
42 }
43
44 func memoryLimitSupport() bool {
45         return SysInfo.MemoryLimit
46 }
47
48 func memoryReservationSupport() bool {
49         return SysInfo.MemoryReservation
50 }
51
52 func swapMemorySupport() bool {
53         return SysInfo.SwapLimit
54 }
55
56 func memorySwappinessSupport() bool {
57         return SysInfo.MemorySwappiness
58 }
59
60 func blkioWeight() bool {
61         return SysInfo.BlkioWeight
62 }
63
64 func cgroupCpuset() bool {
65         return SysInfo.Cpuset
66 }
67
68 func seccompEnabled() bool {
69         return supportsSeccomp && SysInfo.Seccomp
70 }
71
72 func bridgeNfIptables() bool {
73         return !SysInfo.BridgeNFCallIPTablesDisabled
74 }
75
76 func bridgeNfIP6tables() bool {
77         return !SysInfo.BridgeNFCallIP6TablesDisabled
78 }
79
80 func unprivilegedUsernsClone() bool {
81         content, err := ioutil.ReadFile("/proc/sys/kernel/unprivileged_userns_clone")
82         return err != nil || !strings.Contains(string(content), "0")
83 }
84
85 func ambientCapabilities() bool {
86         content, err := ioutil.ReadFile("/proc/self/status")
87         return err != nil || strings.Contains(string(content), "CapAmb:")
88 }
89
90 func overlayFSSupported() bool {
91         cmd := exec.Command(dockerBinary, "run", "--rm", "busybox", "/bin/sh", "-c", "cat /proc/filesystems")
92         out, err := cmd.CombinedOutput()
93         if err != nil {
94                 return false
95         }
96         return bytes.Contains(out, []byte("overlay\n"))
97 }
98
99 func overlay2Supported() bool {
100         if !overlayFSSupported() {
101                 return false
102         }
103
104         daemonV, err := kernel.ParseRelease(testEnv.DaemonKernelVersion())
105         if err != nil {
106                 return false
107         }
108         requiredV := kernel.VersionInfo{Kernel: 4}
109         return kernel.CompareKernelVersion(*daemonV, requiredV) > -1
110
111 }
112
113 func init() {
114         SysInfo = sysinfo.New(true)
115 }