mirror of https://github.com/containers/podman.git
CI: make 090-events parallel-safe
...or at least as much as possible. Some tests cannot be run in parallel due to #23750: "--events-backend=file" does not actually work the way a naïve user would intuit. Stop/die events are asynchronous, and can be gathered by *ANY OTHER* podman process running after it, and if that process has the default events-backend=journal, that's where the event will be logged. See #23987 for further discussion. Signed-off-by: Ed Santiago <santiago@redhat.com>
This commit is contained in:
parent
62c101651f
commit
5468718f22
|
@ -6,11 +6,11 @@
|
||||||
load helpers
|
load helpers
|
||||||
load helpers.network
|
load helpers.network
|
||||||
|
|
||||||
# bats test_tags=distro-integration
|
# bats test_tags=distro-integration, ci:parallel
|
||||||
@test "events with a filter by label and --no-trunc option" {
|
@test "events with a filter by label and --no-trunc option" {
|
||||||
cname=test-$(random_string 30 | tr A-Z a-z)
|
cname=test-$(safename)
|
||||||
labelname=$(random_string 10)
|
labelname=labelname-$(safename)
|
||||||
labelvalue=$(random_string 15)
|
labelvalue=labelvalue-$(safename)-$(random_string 15)
|
||||||
|
|
||||||
before=$(date --iso-8601=seconds)
|
before=$(date --iso-8601=seconds)
|
||||||
run_podman run -d --label $labelname=$labelvalue --name $cname --rm $IMAGE true
|
run_podman run -d --label $labelname=$labelvalue --name $cname --rm $IMAGE true
|
||||||
|
@ -33,11 +33,18 @@ load helpers.network
|
||||||
run_podman events --since "$before" --filter container=$cname --filter event=start --stream=false --no-trunc=false
|
run_podman events --since "$before" --filter container=$cname --filter event=start --stream=false --no-trunc=false
|
||||||
is "$output" ".* $truncID " "filtering by container name trunc id"
|
is "$output" ".* $truncID " "filtering by container name trunc id"
|
||||||
|
|
||||||
|
# Wait for container to truly be gone.
|
||||||
|
# 99% of the time this will return immediately with a "no such container" error,
|
||||||
|
# which is fine. Under heavy load, it might actually catch the container while
|
||||||
|
# it's being cleaned up. Either way, this guarantees the "died" event is logged.
|
||||||
|
PODMAN_TIMEOUT=4 run_podman '?' wait $id
|
||||||
|
|
||||||
# --no-trunc does not affect --format; we always get the full ID
|
# --no-trunc does not affect --format; we always get the full ID
|
||||||
run_podman events --since "$before" --filter container=$cname --filter event=died --stream=false --format='{{.ID}}--{{.Image}}' --no-trunc=false
|
run_podman events --since "$before" --filter container=$cname --filter event=died --stream=false --format='{{.ID}}--{{.Image}}' --no-trunc=false
|
||||||
assert "$output" = "${id}--${IMAGE}"
|
assert "$output" = "${id}--${IMAGE}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# CANNOT BE PARALLELIZED: depends on consecutive events, also, #23750
|
||||||
@test "image events" {
|
@test "image events" {
|
||||||
skip_if_remote "remote does not support --events-backend"
|
skip_if_remote "remote does not support --events-backend"
|
||||||
pushedDir=$PODMAN_TMPDIR/dir
|
pushedDir=$PODMAN_TMPDIR/dir
|
||||||
|
@ -49,7 +56,7 @@ load helpers.network
|
||||||
imageID="$output"
|
imageID="$output"
|
||||||
|
|
||||||
t0=$(date --iso-8601=seconds)
|
t0=$(date --iso-8601=seconds)
|
||||||
tag=registry.com/$(random_string 10 | tr A-Z a-z)
|
tag=registry.com/img-$(safename)
|
||||||
|
|
||||||
bogus_image="localhost:$(random_free_port)/bogus"
|
bogus_image="localhost:$(random_free_port)/bogus"
|
||||||
|
|
||||||
|
@ -104,44 +111,53 @@ load helpers.network
|
||||||
function _events_disjunctive_filters() {
|
function _events_disjunctive_filters() {
|
||||||
local backend=$1
|
local backend=$1
|
||||||
|
|
||||||
|
c1=c1-$(safename)
|
||||||
|
c2=c2-$(safename)
|
||||||
|
|
||||||
# Regression test for #10507: make sure that filters with the same key are
|
# Regression test for #10507: make sure that filters with the same key are
|
||||||
# applied in disjunction.
|
# applied in disjunction.
|
||||||
t0=$(date --iso-8601=seconds)
|
t0=$(date --iso-8601=seconds)
|
||||||
run_podman $backend run --name foo --rm $IMAGE ls
|
run_podman $backend run --name $c1 --rm $IMAGE ls
|
||||||
run_podman $backend run --name bar --rm $IMAGE ls
|
run_podman $backend run --name $c2 --rm $IMAGE ls
|
||||||
run_podman $backend events --stream=false --since=$t0 --filter container=foo --filter container=bar --filter event=start
|
run_podman $backend events --stream=false --since=$t0 --filter container=$c1 --filter container=$c2 --filter event=start
|
||||||
is "$output" ".* container start .* name=foo.*
|
is "$output" ".* container start .* name=${c1}.*
|
||||||
.* container start .* name=bar.*"
|
.* container start .* name=${c2}.*"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# CANNOT BE PARALLELIZED - #23750, events-backend=file cannot coexist with journal
|
||||||
@test "events with disjunctive filters - file" {
|
@test "events with disjunctive filters - file" {
|
||||||
skip_if_remote "remote does not support --events-backend"
|
skip_if_remote "remote does not support --events-backend"
|
||||||
_events_disjunctive_filters --events-backend=file
|
_events_disjunctive_filters --events-backend=file
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# bats test_tags=ci:parallel
|
||||||
@test "events with disjunctive filters - journald" {
|
@test "events with disjunctive filters - journald" {
|
||||||
skip_if_remote "remote does not support --events-backend"
|
skip_if_remote "remote does not support --events-backend"
|
||||||
skip_if_journald_unavailable "system does not support journald events"
|
skip_if_journald_unavailable "system does not support journald events"
|
||||||
_events_disjunctive_filters --events-backend=journald
|
_events_disjunctive_filters --events-backend=journald
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# CANNOT BE PARALLELIZED - #23750, events-backend=file cannot coexist with journal
|
||||||
@test "events with file backend and journald logdriver with --follow failure" {
|
@test "events with file backend and journald logdriver with --follow failure" {
|
||||||
skip_if_remote "remote does not support --events-backend"
|
skip_if_remote "remote does not support --events-backend"
|
||||||
skip_if_journald_unavailable "system does not support journald events"
|
skip_if_journald_unavailable "system does not support journald events"
|
||||||
run_podman --events-backend=file run --log-driver=journald --name=test $IMAGE echo hi
|
|
||||||
|
cname=c-$(safename)
|
||||||
|
run_podman --events-backend=file run --log-driver=journald --name=$cname $IMAGE echo hi
|
||||||
is "$output" "hi" "Should support events-backend=file"
|
is "$output" "hi" "Should support events-backend=file"
|
||||||
|
|
||||||
run_podman 125 --events-backend=file logs --follow test
|
run_podman 125 --events-backend=file logs --follow $cname
|
||||||
is "$output" "Error: using --follow with the journald --log-driver but without the journald --events-backend (file) is not supported" \
|
is "$output" "Error: using --follow with the journald --log-driver but without the journald --events-backend (file) is not supported" \
|
||||||
"Should fail with reasonable error message when events-backend and events-logger do not match"
|
"Should fail with reasonable error message when events-backend and events-logger do not match"
|
||||||
run_podman rm test
|
run_podman rm $cname
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# bats test_tags=ci:parallel
|
||||||
@test "events with disjunctive filters - default" {
|
@test "events with disjunctive filters - default" {
|
||||||
_events_disjunctive_filters ""
|
_events_disjunctive_filters ""
|
||||||
}
|
}
|
||||||
|
|
||||||
# bats test_tags=distro-integration
|
# bats test_tags=distro-integration, ci:parallel
|
||||||
@test "events with events_logfile_path in containers.conf" {
|
@test "events with events_logfile_path in containers.conf" {
|
||||||
skip_if_remote "remote does not support --events-backend"
|
skip_if_remote "remote does not support --events-backend"
|
||||||
events_file=$PODMAN_TMPDIR/events.log
|
events_file=$PODMAN_TMPDIR/events.log
|
||||||
|
@ -163,7 +179,7 @@ function _populate_events_file() {
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
# bats test_tags=distro-integration
|
# bats test_tags=distro-integration, ci:parallel
|
||||||
@test "events log-file rotation" {
|
@test "events log-file rotation" {
|
||||||
skip_if_remote "setting CONTAINERS_CONF_OVERRIDE logger options does not affect remote client"
|
skip_if_remote "setting CONTAINERS_CONF_OVERRIDE logger options does not affect remote client"
|
||||||
|
|
||||||
|
@ -227,6 +243,7 @@ EOF
|
||||||
is "${lines[-1]}" "{\"ID\":\"$ctrID\",\"Image\":\"$IMAGE\",\"Name\":\".*\",\"Status\":\"remove\",\"time\":[0-9]\+,\"timeNano\":[0-9]\+,\"Type\":\"container\",\"Attributes\":{.*}}"
|
is "${lines[-1]}" "{\"ID\":\"$ctrID\",\"Image\":\"$IMAGE\",\"Name\":\".*\",\"Status\":\"remove\",\"time\":[0-9]\+,\"timeNano\":[0-9]\+,\"Type\":\"container\",\"Attributes\":{.*}}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# bats test_tags=ci:parallel
|
||||||
@test "events log-file no duplicates" {
|
@test "events log-file no duplicates" {
|
||||||
skip_if_remote "setting CONTAINERS_CONF_OVERRIDE logger options does not affect remote client"
|
skip_if_remote "setting CONTAINERS_CONF_OVERRIDE logger options does not affect remote client"
|
||||||
|
|
||||||
|
@ -298,11 +315,12 @@ EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
# Prior to #15633, container labels would not appear in 'die' log events
|
# Prior to #15633, container labels would not appear in 'die' log events
|
||||||
|
# CANNOT BE PARALLELIZED - #23750, events-backend=file cannot coexist with journal
|
||||||
@test "events - labels included in container die" {
|
@test "events - labels included in container die" {
|
||||||
skip_if_remote "remote does not support --events-backend"
|
skip_if_remote "remote does not support --events-backend"
|
||||||
local cname=c$(random_string 15)
|
local cname=c-$(safename)
|
||||||
local lname=l$(random_string 10)
|
local lname=label$(safename | tr -d -)
|
||||||
local lvalue="v$(random_string 10) $(random_string 5)"
|
local lvalue="labelvalue-$(safename) $(random_string 5)"
|
||||||
|
|
||||||
run_podman 17 --events-backend=file run --rm \
|
run_podman 17 --events-backend=file run --rm \
|
||||||
--name=$cname \
|
--name=$cname \
|
||||||
|
@ -316,6 +334,7 @@ EOF
|
||||||
assert "$output" = "$lvalue" "podman-events output includes container label"
|
assert "$output" = "$lvalue" "podman-events output includes container label"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# bats test_tags=ci:parallel
|
||||||
@test "events - backend none should error" {
|
@test "events - backend none should error" {
|
||||||
skip_if_remote "remote does not support --events-backend"
|
skip_if_remote "remote does not support --events-backend"
|
||||||
|
|
||||||
|
@ -333,7 +352,7 @@ events_logger="$1"
|
||||||
events_container_create_inspect_data=true
|
events_container_create_inspect_data=true
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
local cname=c$(random_string 15)
|
local cname=c-$1-$(safename)
|
||||||
t0=$(date --iso-8601=seconds)
|
t0=$(date --iso-8601=seconds)
|
||||||
|
|
||||||
CONTAINERS_CONF_OVERRIDE=$containersConf run_podman create --name=$cname $IMAGE
|
CONTAINERS_CONF_OVERRIDE=$containersConf run_podman create --name=$cname $IMAGE
|
||||||
|
@ -362,6 +381,7 @@ EOF
|
||||||
run_podman rm $cname
|
run_podman rm $cname
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# bats test_tags=ci:parallel
|
||||||
@test "events - container inspect data - journald" {
|
@test "events - container inspect data - journald" {
|
||||||
skip_if_remote "remote does not support --events-backend"
|
skip_if_remote "remote does not support --events-backend"
|
||||||
skip_if_journald_unavailable
|
skip_if_journald_unavailable
|
||||||
|
@ -369,26 +389,29 @@ EOF
|
||||||
_events_container_create_inspect_data journald
|
_events_container_create_inspect_data journald
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# CANNOT BE PARALLELIZED - #23750, events-backend=file cannot coexist with journal
|
||||||
@test "events - container inspect data - file" {
|
@test "events - container inspect data - file" {
|
||||||
skip_if_remote "remote does not support --events-backend"
|
skip_if_remote "remote does not support --events-backend"
|
||||||
|
|
||||||
_events_container_create_inspect_data file
|
_events_container_create_inspect_data file
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# bats test_tags=ci:parallel
|
||||||
@test "events - docker compat" {
|
@test "events - docker compat" {
|
||||||
local cname=c$(random_string 15)
|
local cname=c-$(safename)
|
||||||
t0=$(date --iso-8601=seconds)
|
t0=$(date --iso-8601=ns)
|
||||||
run_podman run --name=$cname --rm $IMAGE true
|
run_podman run --name=$cname --rm $IMAGE true
|
||||||
run_podman events \
|
run_podman events \
|
||||||
--since="$t0" \
|
--since="$t0" \
|
||||||
--filter=status=$cname \
|
--filter=container=$cname \
|
||||||
--filter=status=die \
|
--filter=status=die \
|
||||||
--stream=false
|
--stream=false
|
||||||
is "${lines[0]}" ".* container died .* (image=$IMAGE, name=$cname, .*)"
|
assert "${lines[0]}" =~ ".* container died [0-9a-f]+ \(image=$IMAGE, name=$cname, .*\)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# bats test_tags=ci:parallel
|
||||||
@test "events - volume events" {
|
@test "events - volume events" {
|
||||||
local vname=v$(random_string 10)
|
local vname=v-$(safename)
|
||||||
run_podman volume create $vname
|
run_podman volume create $vname
|
||||||
run_podman volume rm $vname
|
run_podman volume rm $vname
|
||||||
|
|
||||||
|
@ -398,10 +421,11 @@ EOF
|
||||||
assert "${lines[1]}" =~ ".* volume remove $vname"
|
assert "${lines[1]}" =~ ".* volume remove $vname"
|
||||||
|
|
||||||
# Prefix test
|
# Prefix test
|
||||||
run_podman events --since=1m --stream=false --filter volume=${vname:0:5}
|
run_podman events --since=1m --stream=false --filter volume=${vname:0:9}
|
||||||
assert "$output" = "$notrunc_results"
|
assert "$output" = "$notrunc_results"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# bats test_tags=ci:parallel
|
||||||
@test "events - invalid filter" {
|
@test "events - invalid filter" {
|
||||||
run_podman 125 events --since="the dawn of time...ish"
|
run_podman 125 events --since="the dawn of time...ish"
|
||||||
assert "$output" =~ "failed to parse event filters"
|
assert "$output" =~ "failed to parse event filters"
|
||||||
|
|
Loading…
Reference in New Issue