mirror of
https://github.com/containers/podman.git
synced 2025-05-17 06:59:07 +08:00
60 lines
1.9 KiB
Bash
60 lines
1.9 KiB
Bash
#!/usr/bin/env bats -*- bats -*-
|
|
#
|
|
# Tests for the namespace options
|
|
#
|
|
|
|
load helpers
|
|
|
|
# bats test_tags=distro-integration, ci:parallel
|
|
@test "podman test all namespaces" {
|
|
# format is nsname | option name
|
|
tests="
|
|
cgroup | cgroupns
|
|
ipc | ipc
|
|
net | network
|
|
pid | pid
|
|
uts | uts
|
|
"
|
|
|
|
for nstype in private host; do
|
|
while read name option; do
|
|
local cname="c-${name}-$(safename)"
|
|
# ipc is special, private does not allow joining from another container.
|
|
# Instead we must use "shareable".
|
|
local type=$nstype
|
|
if [ "$name" = "ipc" ] && [ "$type" = "private" ]; then
|
|
type="shareable"
|
|
fi
|
|
|
|
run_podman run --name $cname --$option $type -d $IMAGE sh -c \
|
|
"readlink /proc/self/ns/$name; sleep inf"
|
|
|
|
run_podman run --rm --$option container:$cname $IMAGE readlink /proc/self/ns/$name
|
|
con2_ns="$output"
|
|
|
|
run readlink /proc/self/ns/$name
|
|
host_ns="$output"
|
|
|
|
run_podman logs $cname
|
|
con1_ns="$output"
|
|
|
|
if [[ "$option" = "pid" ]] && is_rootless && ! is_remote && [[ "$(podman_runtime)" = "runc" ]]; then
|
|
# Replace "pid:[1234567]" with "pid:\[1234567\]"
|
|
con1_ns_esc="${con1_ns//[\[\]]/\\&}"
|
|
assert "$con2_ns" =~ "${con1_ns_esc}.*warning .*" "($name) namespace matches (type: $type)"
|
|
else
|
|
assert "$con1_ns" == "$con2_ns" "($name) namespace matches (type: $type)"
|
|
fi
|
|
local matcher="=="
|
|
if [[ "$type" != "host" ]]; then
|
|
matcher="!="
|
|
fi
|
|
assert "$con1_ns" $matcher "$host_ns" "expected host namespace to ($matcher) (type: $type)"
|
|
|
|
run_podman rm -f -t0 $cname
|
|
done < <(parse_table "$tests")
|
|
done
|
|
}
|
|
|
|
# vim: filetype=sh
|