github.com/containers/podman/v5@v5.1.0-rc1/test/system/005-info.bats (about) 1 #!/usr/bin/env bats 2 3 load helpers 4 5 @test "podman info - basic test" { 6 run_podman info 7 8 expected_keys=" 9 buildahVersion: *[0-9.]\\\+ 10 conmon:\\\s\\\+package: 11 distribution: 12 logDriver: 13 ociRuntime:\\\s\\\+name: 14 os: 15 rootless: 16 registries: 17 store: 18 graphDriverName: 19 graphRoot: 20 graphStatus: 21 imageStore:\\\s\\\+number: 1 22 runRoot: 23 cgroupManager: \\\(systemd\\\|cgroupfs\\\) 24 cgroupVersion: v[12] 25 " 26 defer-assertion-failures 27 28 while read expect; do 29 is "$output" ".*$expect" "output includes '$expect'" 30 done < <(parse_table "$expected_keys") 31 } 32 33 @test "podman info - json" { 34 run_podman info --format=json 35 36 expr_nvr="[a-z0-9-]\\\+-[a-z0-9.]\\\+-[a-z0-9]\\\+\." 37 expr_path="/[a-z0-9\\\/.-]\\\+\\\$" 38 39 # FIXME: if we're ever able to get package versions on Debian, 40 # add '-[0-9]' to all '*.package' queries below. 41 tests=" 42 host.buildahVersion | [1-9][0-9]*\.[0-9.]\\\+.* 43 host.conmon.path | $expr_path 44 host.conmon.package | .*conmon.* 45 host.cgroupManager | \\\(systemd\\\|cgroupfs\\\) 46 host.cgroupVersion | v[12] 47 host.networkBackendInfo | .*dns.*package.* 48 host.ociRuntime.path | $expr_path 49 host.pasta | .*executable.*package.* 50 host.rootlessNetworkCmd | pasta 51 store.configFile | $expr_path 52 store.graphDriverName | [a-z0-9]\\\+\\\$ 53 store.graphRoot | $expr_path 54 store.imageStore.number | 1 55 host.slirp4netns.executable | $expr_path 56 " 57 58 defer-assertion-failures 59 60 while read field expect; do 61 actual=$(echo "$output" | jq -r ".$field") 62 dprint "# actual=<$actual> expect=<$expect>" 63 is "$actual" "$expect" "jq .$field" 64 done < <(parse_table "$tests") 65 } 66 67 @test "podman info - confirm desired runtime" { 68 if [[ -z "$CI_DESIRED_RUNTIME" ]]; then 69 # When running in Cirrus, CI_DESIRED_RUNTIME *must* be defined 70 # in .cirrus.yml so we can double-check that all CI VMs are 71 # using crun/runc as desired. 72 if [[ -n "$CIRRUS_CI" ]]; then 73 die "CIRRUS_CI is set, but CI_DESIRED_RUNTIME is not! See #14912" 74 fi 75 76 # Not running under Cirrus (e.g., gating tests, or dev laptop). 77 # Totally OK to skip this test. 78 skip "CI_DESIRED_RUNTIME is unset--OK, because we're not in Cirrus" 79 fi 80 81 run_podman info --format '{{.Host.OCIRuntime.Name}}' 82 is "$output" "$CI_DESIRED_RUNTIME" "CI_DESIRED_RUNTIME (from .cirrus.yml)" 83 } 84 85 @test "podman info - confirm desired network backend" { 86 run_podman info --format '{{.Host.NetworkBackend}}' 87 is "$output" "netavark" "netavark backend" 88 } 89 90 @test "podman info - confirm desired database" { 91 # Always run this and preserve its value. We will check again in 999-*.bats 92 run_podman info --format '{{.Host.DatabaseBackend}}' 93 db_backend="$output" 94 echo "$db_backend" > $BATS_SUITE_TMPDIR/db-backend 95 96 if [[ -z "$CI_DESIRED_DATABASE" ]]; then 97 # When running in Cirrus, CI_DESIRED_DATABASE *must* be defined 98 # in .cirrus.yml so we can double-check that all CI VMs are 99 # using netavark or cni as desired. 100 if [[ -n "$CIRRUS_CI" ]]; then 101 die "CIRRUS_CI is set, but CI_DESIRED_DATABASE is not! See #16389" 102 fi 103 104 # Not running under Cirrus (e.g., gating tests, or dev laptop). 105 # Totally OK to skip this test. 106 skip "CI_DESIRED_DATABASE is unset--OK, because we're not in Cirrus" 107 fi 108 109 is "$db_backend" "$CI_DESIRED_DATABASE" "CI_DESIRED_DATABASE (from .cirrus.yml)" 110 } 111 112 @test "podman info - confirm desired storage driver" { 113 if [[ -z "$CI_DESIRED_STORAGE" ]]; then 114 # When running in Cirrus, CI_DESIRED_STORAGE *must* be defined 115 # in .cirrus.yml so we can double-check that all CI VMs are 116 # using overlay or vfs as desired. 117 if [[ -n "$CIRRUS_CI" ]]; then 118 die "CIRRUS_CI is set, but CI_DESIRED_STORAGE is not! See #20161" 119 fi 120 121 # Not running under Cirrus (e.g., gating tests, or dev laptop). 122 # Totally OK to skip this test. 123 skip "CI_DESIRED_STORAGE is unset--OK, because we're not in Cirrus" 124 fi 125 126 is "$(podman_storage_driver)" "$CI_DESIRED_STORAGE" "podman storage driver is not CI_DESIRED_STORAGE (from .cirrus.yml)" 127 } 128 129 # 2021-04-06 discussed in watercooler: RHEL must never use crun, even if 130 # using cgroups v2. 131 @test "podman info - RHEL8 must use runc" { 132 local osrelease=/etc/os-release 133 test -e $osrelease || skip "Not a RHEL system (no $osrelease)" 134 135 local osname=$(source $osrelease; echo $NAME) 136 if [[ $osname =~ Red.Hat || $osname =~ CentOS ]]; then 137 # Version can include minor; strip off first dot an all beyond it 138 local osver=$(source $osrelease; echo $VERSION_ID) 139 test ${osver%%.*} -le 8 || skip "$osname $osver > RHEL8" 140 141 # RHEL or CentOS 8. 142 # FIXME: what does 'CentOS 8' even mean? What is $VERSION_ID in CentOS? 143 is "$(podman_runtime)" "runc" "$osname only supports OCI Runtime = runc" 144 else 145 skip "only applicable on RHEL, this is $osname" 146 fi 147 } 148 149 @test "podman info --storage-opt='' " { 150 skip_if_remote "--storage-opt flag is not supported for remote" 151 skip_if_rootless "storage opts are required for rootless running" 152 run_podman --storage-opt='' info 153 # Note this will not work in rootless mode, unless you specify 154 # storage-driver=vfs, until we have kernels that support rootless overlay 155 # mounts. 156 is "$output" ".*graphOptions: {}" "output includes graphOptions: {}" 157 } 158 159 @test "podman info netavark " { 160 # Confirm netavark in use when explicitly required by execution environment. 161 if [[ "$NETWORK_BACKEND" == "netavark" ]]; then 162 if ! is_netavark; then 163 # Assume is_netavark() will provide debugging feedback. 164 die "Netavark driver testing required, but not in use by podman." 165 fi 166 else 167 skip "Netavark testing not requested (\$NETWORK_BACKEND='$NETWORK_BACKEND')" 168 fi 169 } 170 171 @test "podman --root PATH info - basic output" { 172 if ! is_remote; then 173 run_podman --storage-driver=vfs --root ${PODMAN_TMPDIR}/nothing-here-move-along info --format '{{ .Store.GraphOptions }}' 174 is "$output" "map\[\]" "'podman --root should reset GraphOptions to []" 175 fi 176 } 177 178 @test "rootless podman with symlinked $HOME" { 179 # This is only needed as rootless, but we don't have a skip_if_root 180 # And it will not hurt to run as root. 181 skip_if_remote "path validation is only done in libpod, does not effect remote" 182 183 new_home=$PODMAN_TMPDIR/home 184 185 ln -s /home $new_home 186 187 # Just need the command to run cleanly 188 HOME=$PODMAN_TMPDIR/$HOME run_podman info 189 190 rm $new_home 191 } 192 193 @test "podman --root PATH --volumepath info - basic output" { 194 volumePath=${PODMAN_TMPDIR}/volumesGoHere 195 if ! is_remote; then 196 run_podman --storage-driver=vfs --root ${PODMAN_TMPDIR}/nothing-here-move-along --volumepath ${volumePath} info --format '{{ .Store.VolumePath }}' 197 is "$output" "${volumePath}" "'podman --volumepath should reset VolumePath" 198 fi 199 } 200 201 @test "CONTAINERS_CONF_OVERRIDE" { 202 skip_if_remote "remote does not support CONTAINERS_CONF*" 203 204 # Need to include runtime because it's runc in debian CI, 205 # and crun 1.11.1 barfs with "read from sync socket" 206 containersConf=$PODMAN_TMPDIR/containers.conf 207 cat >$containersConf <<EOF 208 [engine] 209 runtime="$(podman_runtime)" 210 211 [containers] 212 env = [ "CONF1=conf1" ] 213 214 [engine.volume_plugins] 215 volplugin1 = "This is not actually used or seen anywhere" 216 EOF 217 218 overrideConf=$PODMAN_TMPDIR/override.conf 219 cat >$overrideConf <<EOF 220 [containers] 221 env = [ "CONF2=conf2" ] 222 223 [engine.volume_plugins] 224 volplugin2 = "This is not actually used or seen anywhere, either" 225 EOF 226 227 CONTAINERS_CONF="$containersConf" run_podman 1 run --rm $IMAGE printenv CONF1 CONF2 228 is "$output" "conf1" "with CONTAINERS_CONF only" 229 230 CONTAINERS_CONF_OVERRIDE=$overrideConf run_podman 1 run --rm $IMAGE printenv CONF1 CONF2 231 is "$output" "conf2" "with CONTAINERS_CONF_OVERRIDE only" 232 233 # CONTAINERS_CONF will be overridden by _OVERRIDE. env is overridden, not merged. 234 CONTAINERS_CONF=$containersConf CONTAINERS_CONF_OVERRIDE=$overrideConf run_podman 1 run --rm $IMAGE printenv CONF1 CONF2 235 is "$output" "conf2" "with both CONTAINERS_CONF and CONTAINERS_CONF_OVERRIDE" 236 237 # Merge test: each of those conf files defines a distinct volume plugin. 238 # Confirm that we see both. 'info' outputs in random order, so we need to 239 # do two tests. 240 CONTAINERS_CONF=$containersConf CONTAINERS_CONF_OVERRIDE=$overrideConf run_podman info --format '{{.Plugins.Volume}}' 241 assert "$output" =~ "volplugin1" "CONTAINERS_CONF_OVERRIDE does not clobber volume_plugins from CONTAINERS_CONF" 242 assert "$output" =~ "volplugin2" "volume_plugins seen from CONTAINERS_CONF_OVERRIDE" 243 244 } 245 246 @test "podman - BoltDB cannot create new databases" { 247 skip_if_remote "DB checks only work for local Podman" 248 249 safe_opts=$(podman_isolation_opts ${PODMAN_TMPDIR}) 250 251 CI_DESIRED_DATABASE= run_podman 125 $safe_opts --db-backend=boltdb info 252 assert "$output" =~ "deprecated, no new BoltDB databases can be created" \ 253 "without CI_DESIRED_DATABASE" 254 255 CI_DESIRED_DATABASE=boltdb run_podman $safe_opts --log-level=debug --db-backend=boltdb info 256 assert "$output" =~ "Allowing deprecated database backend" \ 257 "with CI_DESIRED_DATABASE" 258 259 run_podman $safe_opts system reset --force 260 } 261 262 # vim: filetype=sh