#!/usr/bin/env bash # SPDX-License-Identifier: GPL-2.0-or-later # Copyright (C) 2026 Bryan Joshua Pedini # fake dpkg-query (unit tests): the dpkg database dump used for dependency closures, # `-W -f '${db:Status-Abbrev}' NAME` (the status of one package; purged = unknown to dpkg) and # `-s NAME` (dpkg's record: data/apt/status/NAME; none or purged = not installed) # shellcheck source=../fakelib.bash . "${BASH_SOURCE[0]%/*}/../fakelib.bash" fake_log "$@" # FAKE_STATE_APPEND / FAKE_STATE_SED: simulate another process writing the statefile meanwhile st=${SKEPTICAL_UPDATER_STATE_DIR:-}/trusted.tsv if [[ -n ${FAKE_STATE_APPEND:-} ]]; then printf '%s\n' "$FAKE_STATE_APPEND" >>"$st"; fi if [[ -n ${FAKE_STATE_SED:-} ]]; then sed -i "$FAKE_STATE_SED" "$st"; fi args=" $* " names=() while (($#)); do case $1 in -f) shift ;; -*) ;; *) names+=("$1") ;; esac shift done if [[ $args == *' -s '* ]]; then n=${names[0]%:amd64} if [[ ! -f $FAKE_DATA/apt/status/$n ]] || fake_purged "$n"; then echo "dpkg-query: package '$n' is not installed and no information is available" >&2 exit 1 fi cat "$FAKE_DATA/apt/status/$n" exit 0 fi if ((${#names[@]})); then rc=0 for n in "${names[@]}"; do st=$(awk -F'\t' -v n="${n%:amd64}" '$2 == n { print $1; exit }' "$FAKE_DATA/apt/dpkg-status.tsv") if [[ -z $st ]] || fake_purged "${n%:amd64}"; then echo "dpkg-query: no packages found matching $n" >&2 rc=1 continue fi printf '%s' "$st" done exit "$rc" fi case $args in *' -W '*) cat "$FAKE_DATA/apt/dpkg-status.tsv" ;; *) echo "fake dpkg-query: unhandled: $*" >&2 exit 99 ;; esac