rsyslog/tests/omfile-read-only.sh
Andre Lorbach cd85debac0 ci: extend GitHub Actions for ARM (armhf QEMU, arm64 native)
Why:
Enable CI validation on ARM architectures so platform-specific regressions
are caught before merge. arm64 uses native GitHub runners; armhf uses QEMU
because GitHub does not offer 32-bit ARM runners. Network namespace tests may
fail under QEMU where the mount syscall is not properly emulated.

Impact:
- New arm_CI job runs on armhf and arm64 when relevant files change.
- arm64 uses native ubuntu-24.04-arm runner; armhf uses QEMU on x64.
- Netns tests skip gracefully (exit 77) if ip netns add fails.

Before:
- No ARM CI; netns tests could fail with cryptic errors under QEMU.

After:
- arm_CI: armhf (QEMU, reduced test set) and arm64 (native, expanded tests, ASan).
- require_netns_capable() in diag.sh; netns tests call it and skip when unavailable.
- ratelimit double-free fixed in ratelimit.c.
- skip_ASAN() in diag.sh; empty-hostname, omfile-read-only* skip when ASan enabled
  (LD_PRELOAD/read-only behavior conflicts).

Technical Overview:
- Add arm_CI job to run_checks.yml: matrix over armhf/arm64. armhf:
  runs-on ubuntu-24.04, QEMU + Docker Buildx, reduced configure (disable-default-tests,
  many modules disabled). arm64: runs-on ubuntu-24.04-arm (native), expanded
  configure (default tests, gnutls, relp, imfile, etc.). Conditional QEMU
  setup only for armhf.
- Add devtools/ci/Dockerfile.arm: Ubuntu 24.04 with build tools, gnutls,
  libestr, libfastjson, zlib, iproute2, libgcrypt, librelp, uuid, libyaml
  (for arm64 expanded build).
- Add require_netns_capable() to diag.sh; use in imtcp-netns.sh,
  uxsock_multiple_netns.sh, tcp_forwarding_ns_tpl.sh.
- Add skip_ASAN() to diag.sh; use in empty-hostname.sh, omfile-read-only.sh,
  omfile-read-only-errmsg.sh.
- Add devtools/ci/Dockerfile.arm to arm_CI changed-files filter.
- Quote $GITHUB_OUTPUT and $GITHUB_STEP_SUMMARY in clang static analyzer steps.
- Fix double-free in ratelimit.c: shared->name is the hashtable key, freed by
  hashtable_destroy; remove redundant free(shared->name) in ratelimitFreeShared.
2026-02-12 22:31:56 +01:00

37 lines
1.3 KiB
Bash
Executable File

#!/bin/bash
# addd 2016-06-16 by RGerhards, released under ASL 2.0
. ${srcdir:=.}/diag.sh init
skip_ASAN "omfile read-only suspend behavior differs under ASan"
messages=20000 # how many messages to inject?
# Note: we need to inject a somewhat larger number of messages in order
# to ensure that we receive some messages in the actual output file,
# as batching can (validly) cause a larger loss in the non-writable
# file
generate_conf
add_conf '
template(name="outfmt" type="string" string="%msg:F,58:2%\n")
:msg, contains, "msgnum:" {
action(type="omfile" template="outfmt" file="'$RSYSLOG2_OUT_LOG'")
action(type="omfile" template="outfmt" file="'$RSYSLOG_OUT_LOG'"
action.execOnlyWhenPreviousIsSuspended="on"
)
}
'
touch ${RSYSLOG2_OUT_LOG}
chmod 0400 ${RSYSLOG2_OUT_LOG}
ls -l rsyslog.ou*
startup
injectmsg 0 $messages
shutdown_when_empty
wait_shutdown
# we know that the output file is missing some messages, but it
# MUST have some more, and these be in sequence. So we now read
# the first message number and calculate based on it what must be
# present in the output file.
presort
let firstnum=$((10#$($RS_HEADCMD -n1 $RSYSLOG_DYNNAME.presort)))
echo "info: first message expected to be number $firstnum, using that value."
seq_check $firstnum $((messages-1))
exit_test