first commit
This commit is contained in:
commit
1354db6c39
90 files changed
+13123
No files matched your search
@@ -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
|
||||
}
|
||||
Reference in new issue
Block a user