mirror of
https://github.com/containers/podman.git
synced 2025-06-26 12:56:45 +08:00
Merge pull request #7110 from edsantiago/bats
System tests: add environment, volume tests
This commit is contained in:
@ -1411,9 +1411,9 @@ required for VPN, without it containers need to be run with the **--network=host
|
|||||||
Environment variables within containers can be set using multiple different options,
|
Environment variables within containers can be set using multiple different options,
|
||||||
in the following order of precedence (later entries override earlier entries):
|
in the following order of precedence (later entries override earlier entries):
|
||||||
|
|
||||||
- **--env-host**: Host environment of the process executing Podman is added.
|
|
||||||
- **--http-proxy**: By default, several environment variables will be passed in from the host, such as **http_proxy** and **no_proxy**. See **--http-proxy** for details.
|
|
||||||
- Container image: Any environment variables specified in the container image.
|
- Container image: Any environment variables specified in the container image.
|
||||||
|
- **--http-proxy**: By default, several environment variables will be passed in from the host, such as **http_proxy** and **no_proxy**. See **--http-proxy** for details.
|
||||||
|
- **--env-host**: Host environment of the process executing Podman is added.
|
||||||
- **--env-file**: Any environment variables specified via env-files. If multiple files specified, then they override each other in order of entry.
|
- **--env-file**: Any environment variables specified via env-files. If multiple files specified, then they override each other in order of entry.
|
||||||
- **--env**: Any environment variables specified will override previous settings.
|
- **--env**: Any environment variables specified will override previous settings.
|
||||||
|
|
||||||
|
@ -109,6 +109,7 @@ EOF
|
|||||||
s_env1=$(random_string 20)
|
s_env1=$(random_string 20)
|
||||||
s_env2=$(random_string 25)
|
s_env2=$(random_string 25)
|
||||||
s_env3=$(random_string 30)
|
s_env3=$(random_string 30)
|
||||||
|
s_env4=$(random_string 40)
|
||||||
|
|
||||||
# Label name: make sure it begins with a letter! jq barfs if you
|
# Label name: make sure it begins with a letter! jq barfs if you
|
||||||
# try to ask it for '.foo.<N>xyz', i.e. any string beginning with digit
|
# try to ask it for '.foo.<N>xyz', i.e. any string beginning with digit
|
||||||
@ -118,11 +119,17 @@ EOF
|
|||||||
# Command to run on container startup with no args
|
# Command to run on container startup with no args
|
||||||
cat >$tmpdir/mycmd <<EOF
|
cat >$tmpdir/mycmd <<EOF
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
PATH=/usr/bin:/bin
|
||||||
pwd
|
pwd
|
||||||
echo "\$1"
|
echo "\$1"
|
||||||
echo "\$MYENV1"
|
printenv | grep MYENV | sort | sed -e 's/^MYENV.=//'
|
||||||
echo "\$MYENV2"
|
EOF
|
||||||
echo "\$MYENV3"
|
|
||||||
|
# For overridding with --env-file
|
||||||
|
cat >$PODMAN_TMPDIR/env-file <<EOF
|
||||||
|
MYENV3=$s_env3
|
||||||
|
http_proxy=http-proxy-in-env-file
|
||||||
|
https_proxy=https-proxy-in-env-file
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat >$tmpdir/Containerfile <<EOF
|
cat >$tmpdir/Containerfile <<EOF
|
||||||
@ -130,11 +137,25 @@ FROM $IMAGE
|
|||||||
LABEL $label_name=$label_value
|
LABEL $label_name=$label_value
|
||||||
RUN mkdir $workdir
|
RUN mkdir $workdir
|
||||||
WORKDIR $workdir
|
WORKDIR $workdir
|
||||||
|
|
||||||
|
# Test for #7094 - chowning of invalid symlinks
|
||||||
|
RUN mkdir -p /a/b/c
|
||||||
|
RUN ln -s /no/such/nonesuch /a/b/c/badsymlink
|
||||||
|
RUN ln -s /bin/mydefaultcmd /a/b/c/goodsymlink
|
||||||
|
RUN touch /a/b/c/myfile
|
||||||
|
RUN chown -h 1:2 /a/b/c/badsymlink /a/b/c/goodsymlink /a/b/c/myfile
|
||||||
|
VOLUME /a/b/c
|
||||||
|
|
||||||
|
# Test for environment passing and override
|
||||||
ENV MYENV1=$s_env1
|
ENV MYENV1=$s_env1
|
||||||
ENV MYENV2 $s_env2
|
ENV MYENV2 this-should-be-overridden-by-env-host
|
||||||
ENV MYENV3 this-should-be-overridden
|
ENV MYENV3 this-should-be-overridden-by-env-file
|
||||||
|
ENV MYENV4 this-should-be-overridden-by-cmdline
|
||||||
|
ENV http_proxy http-proxy-in-image
|
||||||
|
ENV ftp_proxy ftp-proxy-in-image
|
||||||
ADD mycmd /bin/mydefaultcmd
|
ADD mycmd /bin/mydefaultcmd
|
||||||
RUN chmod 755 /bin/mydefaultcmd
|
RUN chmod 755 /bin/mydefaultcmd
|
||||||
|
RUN chown 2:3 /bin/mydefaultcmd
|
||||||
CMD ["/bin/mydefaultcmd","$s_echo"]
|
CMD ["/bin/mydefaultcmd","$s_echo"]
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
@ -143,12 +164,28 @@ EOF
|
|||||||
run_podman build -t build_test -f build-test/Containerfile build-test
|
run_podman build -t build_test -f build-test/Containerfile build-test
|
||||||
|
|
||||||
# Run without args - should run the above script. Verify its output.
|
# Run without args - should run the above script. Verify its output.
|
||||||
run_podman run --rm -e MYENV3="$s_env3" build_test
|
export MYENV2="$s_env2"
|
||||||
|
export MYENV3="env-file-should-override-env-host!"
|
||||||
|
run_podman run --rm \
|
||||||
|
--env-file=$PODMAN_TMPDIR/env-file \
|
||||||
|
--env-host \
|
||||||
|
-e MYENV4="$s_env4" \
|
||||||
|
build_test
|
||||||
is "${lines[0]}" "$workdir" "container default command: pwd"
|
is "${lines[0]}" "$workdir" "container default command: pwd"
|
||||||
is "${lines[1]}" "$s_echo" "container default command: output from echo"
|
is "${lines[1]}" "$s_echo" "container default command: output from echo"
|
||||||
is "${lines[2]}" "$s_env1" "container default command: env1"
|
is "${lines[2]}" "$s_env1" "container default command: env1"
|
||||||
is "${lines[3]}" "$s_env2" "container default command: env2"
|
is "${lines[3]}" "$s_env2" "container default command: env2"
|
||||||
is "${lines[4]}" "$s_env3" "container default command: env3 (from cmdline)"
|
is "${lines[4]}" "$s_env3" "container default command: env3 (from envfile)"
|
||||||
|
is "${lines[5]}" "$s_env4" "container default command: env4 (from cmdline)"
|
||||||
|
|
||||||
|
# Proxies - environment should override container, but not env-file
|
||||||
|
http_proxy=http-proxy-from-env ftp_proxy=ftp-proxy-from-env \
|
||||||
|
run_podman run --rm --env-file=$PODMAN_TMPDIR/env-file \
|
||||||
|
build_test \
|
||||||
|
printenv http_proxy https_proxy ftp_proxy
|
||||||
|
is "${lines[0]}" "http-proxy-in-env-file" "env-file overrides env"
|
||||||
|
is "${lines[1]}" "https-proxy-in-env-file" "env-file sets proxy var"
|
||||||
|
is "${lines[2]}" "ftp-proxy-from-env" "ftp-proxy is passed through"
|
||||||
|
|
||||||
# test that workdir is set for command-line commands also
|
# test that workdir is set for command-line commands also
|
||||||
run_podman run --rm build_test pwd
|
run_podman run --rm build_test pwd
|
||||||
@ -159,8 +196,9 @@ EOF
|
|||||||
run_podman image inspect build_test
|
run_podman image inspect build_test
|
||||||
tests="
|
tests="
|
||||||
Env[1] | MYENV1=$s_env1
|
Env[1] | MYENV1=$s_env1
|
||||||
Env[2] | MYENV2=$s_env2
|
Env[2] | MYENV2=this-should-be-overridden-by-env-host
|
||||||
Env[3] | MYENV3=this-should-be-overridden
|
Env[3] | MYENV3=this-should-be-overridden-by-env-file
|
||||||
|
Env[4] | MYENV4=this-should-be-overridden-by-cmdline
|
||||||
Cmd[0] | /bin/mydefaultcmd
|
Cmd[0] | /bin/mydefaultcmd
|
||||||
Cmd[1] | $s_echo
|
Cmd[1] | $s_echo
|
||||||
WorkingDir | $workdir
|
WorkingDir | $workdir
|
||||||
@ -173,6 +211,24 @@ Labels.$label_name | $label_value
|
|||||||
is "$actual" "$expect" "jq .Config.$field"
|
is "$actual" "$expect" "jq .Config.$field"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Bad symlink in volume. Prior to #7094, well, we wouldn't actually
|
||||||
|
# get here because any 'podman run' on a volume that had symlinks,
|
||||||
|
# be they dangling or valid, would barf with
|
||||||
|
# Error: chown <mountpath>/_data/symlink: ENOENT
|
||||||
|
run_podman run --rm build_test stat -c'%u:%g:%N' /a/b/c/badsymlink
|
||||||
|
is "$output" "0:0:'/a/b/c/badsymlink' -> '/no/such/nonesuch'" \
|
||||||
|
"bad symlink to nonexistent file is chowned and preserved"
|
||||||
|
|
||||||
|
run_podman run --rm build_test stat -c'%u:%g:%N' /a/b/c/goodsymlink
|
||||||
|
is "$output" "0:0:'/a/b/c/goodsymlink' -> '/bin/mydefaultcmd'" \
|
||||||
|
"good symlink to existing file is chowned and preserved"
|
||||||
|
|
||||||
|
run_podman run --rm build_test stat -c'%u:%g' /bin/mydefaultcmd
|
||||||
|
is "$output" "2:3" "target of symlink is not chowned"
|
||||||
|
|
||||||
|
run_podman run --rm build_test stat -c'%u:%g:%N' /a/b/c/myfile
|
||||||
|
is "$output" "0:0:/a/b/c/myfile" "file in volume is chowned to root"
|
||||||
|
|
||||||
# Clean up
|
# Clean up
|
||||||
run_podman rmi -f build_test
|
run_podman rmi -f build_test
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
# anything if we have to mess with them.
|
# anything if we have to mess with them.
|
||||||
#
|
#
|
||||||
|
|
||||||
source $(dirname $0)/helpers.bash
|
source "$(dirname $0)"/helpers.bash
|
||||||
|
|
||||||
die() {
|
die() {
|
||||||
echo "$(basename $0): $*" >&2
|
echo "$(basename $0): $*" >&2
|
||||||
|
Reference in New Issue
Block a user