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