Add a libvirt/KVM test environment and fix the gcc-12 warning it found
The VM harness (tests/vm/) builds and exercises the tools on real Debian and Alpine guests, driving the serial console (no sshd/cloud-init dependency). Results on Debian 12 (glibc 2.36, gcc 12.2): 12/12 checks pass, 0 warnings with -Wall -Wextra, including a real 128M -> 256M resize and the rollback save/restore/reject paths. Results on Alpine 3.20 (musl 1.2.5): the build cannot start. configure stops at "reiserfsprogs requires a method to add printf modifiers" because reiserfscore/prints.c depends on glibc's register_printf_specifier(3) and <printf.h>, which musl does not provide. This is pre-existing and out of scope here; measured at 341 use sites across 20+ files, all routed through reiserfs_warning()/reiserfs_info(). Documented in tests/vm/RESULTS.md. Fix the one real defect the harness surfaced: fsck/semantic_check.c: check_check_regular_file() is called with NULL for new_ih (line 466), so the block that would fill *new_ih is unreachable and check_semantic_pass() never returns RELOCATED through that path. The "case RELOCATED:" arm still reads relocated_ih.ih_key, which gcc 12.2 reports as "may be used uninitialized" (-Wmaybe-uninitialized); gcc 16 does not, because it proves the path dead. Zero-initialise the struct and say why. Verified: 0 warnings on gcc 12.2 after the change, and the Debian battery stays at 12/12.
This commit is contained in:
1 parent
293e6a7280
commit
5a7382185b
8 files changed
+628
-1
No files matched your search
Executable
+51
@@ -0,0 +1,51 @@
|
||||
#!/bin/sh
|
||||
# Envia o codigo-fonte e o script de teste para dentro de uma VM e executa.
|
||||
#
|
||||
# Uso: run_in_vm.sh <dominio>
|
||||
# Requer: guestcmd.py (mesmo diretorio), mkisofs, libvirt.
|
||||
set -e
|
||||
|
||||
DOMAIN=${1:?uso: run_in_vm.sh <dominio>}
|
||||
HERE=$(cd "$(dirname "$0")" && pwd)
|
||||
REPO=$(cd "$HERE/../.." && pwd)
|
||||
WORK=${WORK:-/var/tmp/vmtest}
|
||||
|
||||
echo "== empacotando o codigo-fonte =="
|
||||
tar czf "$WORK/rfs-src.tar.gz" -C "$REPO" \
|
||||
--exclude=.git --exclude='*.o' --exclude='*.lo' --exclude='*.la' \
|
||||
--exclude='.libs' --exclude=build-aux --exclude=m4 \
|
||||
--exclude=autom4te.cache --exclude=config.h --exclude=config.log \
|
||||
--exclude=config.status --exclude=libtool \
|
||||
--exclude='Makefile' --exclude='Makefile.in' --exclude=configure \
|
||||
--exclude=aclocal.m4 --exclude='*.8' \
|
||||
.
|
||||
|
||||
echo "== montando o disco de dados =="
|
||||
rm -rf /tmp/vmdata.$$ && mkdir -p /tmp/vmdata.$$
|
||||
sudo mount -o loop "$WORK/data.img" /tmp/vmdata.$$
|
||||
sudo cp "$WORK/rfs-src.tar.gz" "$HERE/run_tests.sh" /tmp/vmdata.$$
|
||||
sudo umount /tmp/vmdata.$$ && rmdir /tmp/vmdata.$$
|
||||
|
||||
echo "== transferindo para $DOMAIN =="
|
||||
ATTACH=/tmp/vdb.$$.xml
|
||||
cat > "$ATTACH" <<EOF
|
||||
<disk type='file' device='disk'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
<source file='$WORK/data.img'/>
|
||||
<target dev='vdb' bus='virtio'/>
|
||||
</disk>
|
||||
EOF
|
||||
virsh attach-device "$DOMAIN" "$ATTACH" --live >/dev/null 2>&1 || true
|
||||
rm -f "$ATTACH"
|
||||
|
||||
echo "== extraindo e rodando os testes =="
|
||||
"$HERE/guestcmd.py" "$DOMAIN" '
|
||||
set -e
|
||||
mkdir -p /mnt/data
|
||||
mountpoint -q /mnt/data || mount -o ro /dev/vdb /mnt/data
|
||||
mkdir -p /root/rfs
|
||||
tar xzf /mnt/data/rfs-src.tar.gz -C /root/rfs
|
||||
cp /mnt/data/run_tests.sh /root/run_tests.sh
|
||||
chmod +x /root/run_tests.sh
|
||||
SRC=/root/rfs sh /root/run_tests.sh
|
||||
' 900
|
||||
Reference in new issue
Block a user