first commit

This commit is contained in:
bryanpedini committed 2026-10-10 10:37:53 +02:00
commit 1354db6c39
90 files changed
+13123

No files matched your search

+86
View File
@@ -0,0 +1,86 @@
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2026 Bryan Joshua Pedini
# tests/unit/test_helper.bash - common setup for the unit tests (sourced via `load test_helper`).
# The applet runs with a hermetic PATH: fake package managers (tests/unit/fakes/<dir>) in front
# of a directory with symlinks to the few system tools it needs. No root, no network, no real
# package manager; everything is written under $BATS_TEST_TMPDIR.
# shellcheck shell=bash
load '../vendor/bats-support/load'
load '../vendor/bats-assert/load'
SU_BIN=$(cd "$BATS_TEST_DIRNAME/../.." && pwd)/skeptical-updater
FAKES=$BATS_TEST_DIRNAME/fakes
export FAKE_DATA=$BATS_TEST_DIRNAME/data
SYS_TOOLS=(bash env cat sort sed grep tr cut join awk mktemp mv mkdir chmod rm cp ln date ls head tail wc touch sleep kill flock readlink timeout stat sha256sum)
common_setup() {
SYSBIN=$BATS_TEST_TMPDIR/sysbin
mkdir -p "$SYSBIN"
local t p
for t in "${SYS_TOOLS[@]}"; do
p=$(type -P "$t") || continue
ln -sf "$p" "$SYSBIN/$t"
done
export FAKE_DIR=$BATS_TEST_TMPDIR/fake
mkdir -p "$FAKE_DIR"
: >"$FAKE_DIR/holds"
export FAKE_LOG=$FAKE_DIR/log
: >"$FAKE_LOG"
export STATE=$BATS_TEST_TMPDIR/state
export STATE_FILE=$STATE/trusted.tsv
export SKEPTICAL_UPDATER_STATE_DIR=$STATE
export SKEPTICAL_UPDATER_EUID=0
export SKEPTICAL_UPDATER_OS_RELEASE=$FAKE_DATA/os-release-debian12
export TMPDIR=$BATS_TEST_TMPDIR
export FAKE_PACMAN_DBPATH=$FAKE_DIR/pacman-db
mkdir -p "$FAKE_PACMAN_DBPATH/sync" "$FAKE_PACMAN_DBPATH/local"
unset NO_COLOR ZYPP_CONF COLUMNS SKEPTICAL_UPDATER_LOCK_WAIT
use_fakes apt
}
# use_fakes DIR...: the applet sees only these fake dirs + the system tools
use_fakes() {
local d p=
for d in "$@"; do p+=$FAKES/$d:; done
TEST_PATH=$p$SYSBIN
}
# skup ARGS...: run the applet (use as `run skup ...`, stdin is passed through)
skup() { env PATH="$TEST_PATH" "$SU_BIN" "$@"; }
# shellcheck disable=SC2034 # used by the .bats files
HEADER='# skeptical-updater trusted packages. Columns: backend package reason added(UTC ISO-8601)'
# shellcheck disable=SC2034
DATE_RE='[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z'
# shellcheck disable=SC2034
T=$'\t'
# write_state LINE...: create the statefile with exactly these lines
write_state() {
mkdir -p "$STATE"
printf '%s\n' "$@" >"$STATE_FILE"
}
# log_has LINE: the fake log contains exactly this line
log_has() {
grep -qxF -- "$1" "$FAKE_LOG" || {
printf 'expected log line: %s\n--- fake log:\n%s\n' "$1" "$(cat "$FAKE_LOG")" >&2
return 1
}
}
# log_matches REGEX: some fake log line matches
log_matches() {
grep -qE -- "$1" "$FAKE_LOG" || {
printf 'expected a log line matching: %s\n--- fake log:\n%s\n' "$1" "$(cat "$FAKE_LOG")" >&2
return 1
}
}
# log_lacks REGEX: no fake log line matches
log_lacks() {
if grep -qE -- "$1" "$FAKE_LOG"; then
printf 'unexpected log line matching: %s\n--- fake log:\n%s\n' "$1" "$(cat "$FAKE_LOG")" >&2
return 1
fi
}