mirror of
https://github.com/containers/podman.git
synced 2025-05-17 15:18:43 +08:00
Fix HealthCheck log destination, count, and size defaults
GoLang sets unset values to the default value of the type. This means that the destination of the log is an empty string and the count and size are set to 0. However, this means that size and count are unbounded, and this is not the default behavior. Fixes: https://github.com/containers/podman/issues/25473 Fixes: https://issues.redhat.com/browse/RHEL-83262 Signed-off-by: Jan Rodák <hony.com@seznam.cz>
This commit is contained in:

committed by
openshift-cherrypick-robot

parent
61d703ba85
commit
64e2b91ab4
@ -199,7 +199,10 @@ t GET libpod/containers/${cid}/json 200 \
|
||||
.State.Running=false \
|
||||
.State.ExitCode=0 \
|
||||
.Config.Umask=0022 \
|
||||
.Config.CreateCommand=null
|
||||
.Config.CreateCommand=null \
|
||||
.Config.HealthLogDestination=local \
|
||||
.Config.HealthcheckMaxLogCount=5 \
|
||||
.Config.HealthcheckMaxLogSize=500
|
||||
t DELETE libpod/containers/$cid 200 .[0].Id=$cid
|
||||
|
||||
CNAME=myfoo
|
||||
|
@ -316,107 +316,59 @@ function _check_health_log {
|
||||
assert "$count" $comparison $expect_count "Number of matching health log messages"
|
||||
}
|
||||
|
||||
@test "podman healthcheck --health-max-log-count default value (5)" {
|
||||
local msg="healthmsg-$(random_string)"
|
||||
local ctrname="c-h-$(safename)"
|
||||
_create_container_with_health_log_settings $ctrname $msg "{{.Config.HealthMaxLogCount}}" "" "5" "HealthMaxLogCount is the expected default"
|
||||
@test "podman healthcheck --health-max-log-count values" {
|
||||
# flag | expected value | op | log count
|
||||
test="
|
||||
| 5 | -eq | 5
|
||||
--health-max-log-count 0 | 0 | -ge | 11
|
||||
--health-max-log-count=0 | 0 | -ge | 11
|
||||
--health-max-log-count 10 | 10 | -eq | 10
|
||||
--health-max-log-count=10 | 10 | -eq | 10
|
||||
"
|
||||
|
||||
for i in $(seq 1 10);
|
||||
do
|
||||
run_podman healthcheck run $ctrname
|
||||
is "$output" "" "unexpected output from podman healthcheck run (pass $i)"
|
||||
done
|
||||
while read flag value op logs_count ; do
|
||||
local msg="healthmsg-$(random_string)"
|
||||
local ctrname="c-h-$(safename)"
|
||||
_create_container_with_health_log_settings $ctrname $msg "{{.Config.HealthMaxLogCount}}" $flag $value "HealthMaxLogCount"
|
||||
|
||||
_check_health_log $ctrname $msg -eq 5
|
||||
for i in $(seq 1 $((logs_count + 5)));
|
||||
do
|
||||
run_podman healthcheck run $ctrname
|
||||
is "$output" "" "unexpected output from podman healthcheck run (pass $i)"
|
||||
done
|
||||
|
||||
run_podman rm -t 0 -f $ctrname
|
||||
_check_health_log $ctrname $msg $op $logs_count
|
||||
|
||||
run_podman rm -t 0 -f $ctrname
|
||||
done < <(parse_table "$tests")
|
||||
}
|
||||
|
||||
@test "podman healthcheck --health-max-log-count infinite value (0)" {
|
||||
local repeat_count=10
|
||||
local msg="healthmsg-$(random_string)"
|
||||
local ctrname="c-h-$(safename)"
|
||||
_create_container_with_health_log_settings $ctrname $msg "{{.Config.HealthMaxLogCount}}" "--health-max-log-count 0" "0" "HealthMaxLogCount"
|
||||
|
||||
# This is run one more time than repeat_count to check that the cap is working.
|
||||
for i in $(seq 1 $(($repeat_count + 1)));
|
||||
do
|
||||
run_podman healthcheck run $ctrname
|
||||
is "$output" "" "unexpected output from podman healthcheck run (pass $i)"
|
||||
done
|
||||
|
||||
# The healthcheck is triggered by the podman when the container is started, but its execution depends on systemd.
|
||||
# And since `run_podman healthcheck run` is also run manually, it will result in two runs.
|
||||
_check_health_log $ctrname $msg -ge 11
|
||||
|
||||
run_podman rm -t 0 -f $ctrname
|
||||
}
|
||||
|
||||
|
||||
@test "podman healthcheck --health-max-log-count 10" {
|
||||
local repeat_count=10
|
||||
local msg="healthmsg-$(random_string)"
|
||||
local ctrname="c-h-$(safename)"
|
||||
_create_container_with_health_log_settings $ctrname $msg "{{.Config.HealthMaxLogCount}}" "--health-max-log-count $repeat_count" "$repeat_count" "HealthMaxLogCount"
|
||||
|
||||
# This is run one more time than repeat_count to check that the cap is working.
|
||||
for i in $(seq 1 $(($repeat_count + 1)));
|
||||
do
|
||||
run_podman healthcheck run $ctrname
|
||||
is "$output" "" "unexpected output from podman healthcheck run (pass $i)"
|
||||
done
|
||||
|
||||
_check_health_log $ctrname $msg -eq $repeat_count
|
||||
|
||||
run_podman rm -t 0 -f $ctrname
|
||||
}
|
||||
|
||||
@test "podman healthcheck --health-max-log-size 10" {
|
||||
local msg="healthmsg-$(random_string)"
|
||||
local ctrname="c-h-$(safename)"
|
||||
_create_container_with_health_log_settings $ctrname $msg "{{.Config.HealthMaxLogSize}}" "--health-max-log-size 10" "10" "HealthMaxLogSize"
|
||||
|
||||
run_podman healthcheck run $ctrname
|
||||
is "$output" "" "output from 'podman healthcheck run'"
|
||||
|
||||
local substr=${msg:0:10}
|
||||
_check_health_log $ctrname "$substr}]\$" -eq 1
|
||||
|
||||
run_podman rm -t 0 -f $ctrname
|
||||
}
|
||||
|
||||
@test "podman healthcheck --health-max-log-size infinite value (0)" {
|
||||
@test "podman healthcheck --health-max-log-size values" {
|
||||
local s=$(printf "healthmsg-%1000s")
|
||||
local long_msg=${s// /$(random_string)}
|
||||
local ctrname="c-h-$(safename)"
|
||||
_create_container_with_health_log_settings $ctrname $long_msg "{{.Config.HealthMaxLogSize}}" "--health-max-log-size 0" "0" "HealthMaxLogSize"
|
||||
|
||||
run_podman healthcheck run $ctrname
|
||||
is "$output" "" "output from 'podman healthcheck run'"
|
||||
# flag | expected value | exp_msg
|
||||
test="
|
||||
| 500 | ${long_msg:0:500}}]\$
|
||||
--health-max-log-size 0 | 0 | $long_msg}]\$
|
||||
--health-max-log-size=0 | 0 | $long_msg}]\$
|
||||
--health-max-log-size 10 | 10 | ${long_msg:0:10}}]\$
|
||||
--health-max-log-size=10 | 10 | ${long_msg:0:10}}]\$
|
||||
"
|
||||
|
||||
# The healthcheck is triggered by the podman when the container is started, but its execution depends on systemd.
|
||||
# And since `run_podman healthcheck run` is also run manually, it will result in two runs.
|
||||
_check_health_log $ctrname "$long_msg" -ge 1
|
||||
while read flag value exp_msg ; do
|
||||
local ctrname="c-h-$(safename)"
|
||||
_create_container_with_health_log_settings $ctrname $long_msg "{{.Config.HealthMaxLogSize}}" $flag $value "HealthMaxLogSize"
|
||||
|
||||
run_podman rm -t 0 -f $ctrname
|
||||
run_podman healthcheck run $ctrname
|
||||
is "$output" "" "output from 'podman healthcheck run'"
|
||||
|
||||
_check_health_log $ctrname $exp_msg -eq 1
|
||||
|
||||
run_podman rm -t 0 -f $ctrname
|
||||
done < <(parse_table "$tests")
|
||||
}
|
||||
|
||||
@test "podman healthcheck --health-max-log-size default value (500)" {
|
||||
local s=$(printf "healthmsg-%1000s")
|
||||
local long_msg=${s// /$(random_string)}
|
||||
local ctrname="c-h-$(safename)"
|
||||
_create_container_with_health_log_settings $ctrname $long_msg "{{.Config.HealthMaxLogSize}}" "" "500" "HealthMaxLogSize is the expected default"
|
||||
|
||||
run_podman healthcheck run $ctrname
|
||||
is "$output" "" "output from 'podman healthcheck run'"
|
||||
|
||||
local expect_msg="${long_msg:0:500}"
|
||||
_check_health_log $ctrname "$expect_msg}]\$" -eq 1
|
||||
|
||||
run_podman rm -t 0 -f $ctrname
|
||||
}
|
||||
|
||||
|
||||
@test "podman healthcheck --health-log-destination file" {
|
||||
local TMP_DIR_HEALTHCHECK="$PODMAN_TMPDIR/healthcheck"
|
||||
mkdir $TMP_DIR_HEALTHCHECK
|
||||
|
@ -274,6 +274,11 @@ failed | exited | 17
|
||||
done < <(parse_table "$tests")
|
||||
}
|
||||
|
||||
@test "inspect - HealthCheck Defaults" {
|
||||
run_podman inspect --format '{{.Config.HealthMaxLogSize}}--{{.Config.HealthMaxLogCount}}--{{.Config.HealthLogDestination}}' myrunningcontainer
|
||||
assert "$output" == "500--5--local" "HealthCheck Default values of Log size, count and destination"
|
||||
}
|
||||
|
||||
@test "network - curl" {
|
||||
run -0 curl --max-time 3 -s 127.0.0.1:$HOST_PORT/index.txt
|
||||
is "$output" "$RANDOM_STRING_1" "curl on running container"
|
||||
|
Reference in New Issue
Block a user