blob: c7037c2865c3e43f0d1c8e85a8c1671a13bca956 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
#!/usr/bin/env bats -*- bats -*-
#
# Tests for podman update
#
load helpers
LOOPDEVICE=
function teardown() {
if [[ -n "$LOOPDEVICE" ]]; then
losetup -d $LOOPDEVICE
LOOPDEVICE=
fi
basic_teardown
}
@test "podman update - test all options" {
local cgv=1
if is_cgroupsv2; then
cgv=2;
fi
# Need a block device for blkio-weight-device testing
local pass_loop_device=
if ! is_rootless; then
if is_cgroupsv2; then
lofile=${PODMAN_TMPDIR}/disk.img
fallocate -l 1k ${lofile}
LOOPDEVICE=$(losetup --show -f $lofile)
pass_loop_device="--device $LOOPDEVICE"
# Get maj:min (tr needed because losetup seems to use %2d)
lomajmin=$(losetup -l --noheadings --output MAJ:MIN $LOOPDEVICE | tr -d ' ')
fi
fi
# Shortcuts to make the table narrower
local -a gig=(0 1073741824 2147483648 3221225472)
local devicemax="1:5 rbps=10485760 wbps=31457280 riops=2000 wiops=4000"
local mm=memory/memory
# Format:
# --<option> = <value> | rootless? | check: cgroups v1 | check: cgroups v2
#
# Requires very wide window to read. Sorry.
#
# FIXMEs:
# cpu-rt-period (cgv1 only, on cpu/cpu.rt_period_us) works on RHEL8 but not on Ubuntu
# cpu-rt-runtime (cgv1 only, on cpu/cpu.rt_runtime_us) fails: error setting cgroup config for procHooks ...
tests="
cpu-shares = 512 | - | cpu/cpu.shares = 512 | cpu.weight = 20
cpus = 5 | - | cpu/cpu.cfs_quota_us = 500000 | cpu.max = 500000 100000
cpuset-cpus = 0 | - | cpuset/cpuset.cpus = 0 | cpuset.cpus = 0
cpuset-mems = 0 | - | cpuset/cpuset.mems = 0 | cpuset.mems = 0
memory = 1G | 2 | $mm.limit_in_bytes = ${gig[1]} | memory.max = ${gig[1]}
memory-swap = 3G | 2 | $mm.memsw.limit_in_bytes = ${gig[3]} | memory.swap.max = ${gig[2]}
memory-reservation = 400M | 2 | $mm.soft_limit_in_bytes = 419430400 | memory.low = 419430400
blkio-weight = 321 | - | - | io.bfq.weight = default 321 $lomajmin 98
blkio-weight-device = $LOOPDEVICE:98 | - | - | io.bfq.weight = default 321 $lomajmin 98
device-read-bps = /dev/zero:10mb | - | - | io.max = $devicemax
device-read-iops = /dev/zero:2000 | - | - | io.max = $devicemax
device-write-bps = /dev/zero:30mb | - | - | io.max = $devicemax
device-write-iops = /dev/zero:4000 | - | - | io.max = $devicemax
"
# Run a container
run_podman run ${pass_loop_device} -d $IMAGE sleep infinity
cid="$output"
# Pass 1: read the table above, gather up the options applicable
# to this test environment (root/rootless, cgroups v1/v2)
local -a opts
local -A check
while read opt works_rootless cgv1 cgv2; do
if is_rootless; then
local skipping="skipping --$opt : does not work rootless"
if [[ $works_rootless = '-' ]]; then
echo "[ $skipping ]"
continue
fi
if [[ ! $works_rootless =~ $cgv ]]; then
echo "[ $skipping on cgroups v$cgv ]"
continue
fi
fi
tuple=$cgv1
if is_cgroupsv2; then
tuple=$cgv2
fi
if [[ $tuple = '-' ]]; then
echo "[ skipping --$opt : N/A on cgroups v$cgv ]"
continue
fi
# OK: setting is applicable. Preserve it. (First removing whitespace)
opt=${opt// /}
opts+=("--$opt")
check["--$opt"]=$tuple
done < <(parse_table "$tests")
# Now do the update in one fell swoop
run_podman update "${opts[@]}" $cid
# ...and check one by one
for opt in "${opts[@]}"; do
read path op expect <<<"${check[$opt]}"
run_podman exec $cid cat /sys/fs/cgroup/$path
# Magic echo of unquoted-output converts newlines to spaces;
# important for otherwise multiline blkio file.
updated="$(echo $output)"
assert "$updated" $op "$expect" "$opt ($path)"
done
# Clean up
run_podman rm -f -t0 $cid
if [[ -n "$LOOPDEVICE" ]]; then
losetup -d $LOOPDEVICE
LOOPDEVICE=
fi
}
# vim: filetype=sh
|