first commit
This commit is contained in:
commit
1354db6c39
90 files changed
+13123
No files matched your search
@@ -0,0 +1,122 @@
|
||||
#!/usr/bin/env bats
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2026 Bryan Joshua Pedini
|
||||
|
||||
# --dry-run: mutating commands (upgrade, purge, hold/unhold, lock files, statefile writes)
|
||||
# are printed as "+ <cmd>" instead of executed; read-only queries and (as root) the
|
||||
# metadata refresh still run.
|
||||
|
||||
load test_helper
|
||||
|
||||
setup() { common_setup; }
|
||||
|
||||
APT_UPGRADE='apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold -o DPkg::Lock::Timeout=60 --with-new-pkgs upgrade'
|
||||
|
||||
@test "apt: refresh runs, hold/upgrade/unhold are printed, nothing mutating is executed" {
|
||||
run skup --dry-run <<<$'2-\n'
|
||||
assert_success
|
||||
assert_line 'Refreshing package lists... done.'
|
||||
log_has 'apt-get update -qq -o APT::Update::Error-Mode=any'
|
||||
assert_line '+ apt-mark hold su-dummy-b'
|
||||
assert_line "+ $APT_UPGRADE"
|
||||
assert_line '+ apt-mark unhold su-dummy-b'
|
||||
assert_line 'Dry run: nothing was changed.'
|
||||
log_lacks '^apt-get -y'
|
||||
log_lacks '^apt-mark (un)?hold'
|
||||
run cat "$FAKE_DIR/holds"
|
||||
assert_output ''
|
||||
[[ ! -e $STATE ]]
|
||||
}
|
||||
|
||||
@test "apt: a package the admin already held is not printed as held" {
|
||||
echo su-dummy-c >"$FAKE_DIR/holds"
|
||||
FAKE_APT_SIM=held run skup --dry-run --no-refresh <<<$'3-\n'
|
||||
assert_success
|
||||
refute_line --partial 'apt-mark hold'
|
||||
refute_line --partial 'apt-mark unhold'
|
||||
assert_line "+ $APT_UPGRADE"
|
||||
}
|
||||
|
||||
@test "N+ prints the statefile changes and writes nothing; the rows still leave the list" {
|
||||
run skup --dry-run --no-refresh <<<$'1+\nl\nq'
|
||||
assert_success
|
||||
assert_line "+ mkdir -p -m 0755 $STATE"
|
||||
assert_line "+ $STATE_FILE add: apt su-dummy-a user"
|
||||
assert_line "+ $STATE_FILE add: apt su-dummy-b dep:su-dummy-a"
|
||||
assert_line '3 upgradable, 2 trusted (hidden, use --all to show), 1 to review:'
|
||||
[[ ! -e $STATE ]]
|
||||
}
|
||||
|
||||
@test "Nx prints the purge commands and drops the row" {
|
||||
run skup --dry-run --no-refresh <<<$'3x\ny\nl\nq'
|
||||
assert_success
|
||||
assert_line '+ apt-get -y purge su-dummy-c'
|
||||
refute_output --partial 'autoremove'
|
||||
assert_line '2 upgradable, 0 trusted (hidden, use --all to show), 2 to review:'
|
||||
log_lacks '^apt-get -y'
|
||||
}
|
||||
|
||||
@test "trust, untrust and refresh print their statefile changes and write nothing" {
|
||||
write_state "$HEADER" "apt${T}su-dummy-c${T}user${T}2026-01-01T00:00:00Z"
|
||||
before=$(cat "$STATE_FILE")
|
||||
run skup --dry-run trust su-dummy-a
|
||||
assert_success
|
||||
assert_line 'trusted su-dummy-a (+1 dependency: su-dummy-b)'
|
||||
assert_line "+ $STATE_FILE add: apt su-dummy-a user"
|
||||
assert_line "+ $STATE_FILE add: apt su-dummy-b dep:su-dummy-a"
|
||||
run skup --dry-run untrust su-dummy-c
|
||||
assert_success
|
||||
assert_line "+ $STATE_FILE remove: apt su-dummy-c user"
|
||||
write_state "$HEADER" "apt${T}su-dummy-w${T}user${T}2026-01-01T00:00:00Z"
|
||||
before=$(cat "$STATE_FILE")
|
||||
run skup --dry-run refresh
|
||||
assert_success
|
||||
assert_line "+ $STATE_FILE add: apt su-dummy-v dep:su-dummy-w"
|
||||
[[ $(cat "$STATE_FILE") == "$before" ]]
|
||||
}
|
||||
|
||||
@test "pacman: -Su --ignore and -Rns are printed" {
|
||||
use_fakes pacman
|
||||
run skup --dry-run --no-refresh <<<$'3x\ny\n2-\n'
|
||||
assert_success
|
||||
assert_line '+ pacman -Rns --noconfirm -- su-dummy-c'
|
||||
assert_line '+ pacman -Su --noconfirm --ignore su-dummy-b'
|
||||
log_lacks '^pacman -(Su|Syu|Rns) '
|
||||
}
|
||||
|
||||
@test "dnf: upgrade --exclude and remove are printed" {
|
||||
use_fakes dnf rpm
|
||||
export FAKE_RPM_NO_D=1
|
||||
run skup --dry-run --no-refresh <<<$'5x\ny\n4-\n'
|
||||
assert_success
|
||||
assert_line '+ dnf -y remove su-dummy-c'
|
||||
assert_line '+ dnf -y --setopt=skip_if_unavailable=0 --setopt=\*.metadata_expire=-1 upgrade --exclude=su-dummy-b'
|
||||
log_lacks '^dnf -y'
|
||||
}
|
||||
|
||||
@test "zypper: the private-lock commands are printed, no lock file is written" {
|
||||
use_fakes zypper rpm
|
||||
export SKEPTICAL_UPDATER_OS_RELEASE=$FAKE_DATA/os-release-leap
|
||||
mkdir -p "$BATS_TEST_TMPDIR/etc"
|
||||
printf '[main]\nlocksfile.path = %s\n' "$BATS_TEST_TMPDIR/etc/locks" >"$BATS_TEST_TMPDIR/etc/zypp.conf"
|
||||
export ZYPP_CONF=$BATS_TEST_TMPDIR/etc/zypp.conf
|
||||
run skup --dry-run --no-refresh <<<$'2-\n'
|
||||
assert_success
|
||||
assert_line "+ # private $BATS_TEST_TMPDIR/skeptical-updater.XXXXXX/zypp.conf: $BATS_TEST_TMPDIR/etc/zypp.conf with locksfile.path = $BATS_TEST_TMPDIR/skeptical-updater.XXXXXX/locks (a copy of $BATS_TEST_TMPDIR/etc/locks)"
|
||||
assert_line "+ env ZYPP_CONF=$BATS_TEST_TMPDIR/skeptical-updater.XXXXXX/zypp.conf zypper --non-interactive --quiet addlock su-dummy-b"
|
||||
assert_line "+ env ZYPP_CONF=$BATS_TEST_TMPDIR/skeptical-updater.XXXXXX/zypp.conf zypper --non-interactive --no-refresh update"
|
||||
log_lacks 'addlock| update$'
|
||||
[[ ! -e $BATS_TEST_TMPDIR/etc/locks ]]
|
||||
run ls "$BATS_TEST_TMPDIR"
|
||||
refute_output --partial 'skeptical-updater.'
|
||||
}
|
||||
|
||||
@test "as root the refresh really runs; as non-root it is printed" {
|
||||
run skup --dry-run list
|
||||
log_has 'apt-get update -qq -o APT::Update::Error-Mode=any'
|
||||
: >"$FAKE_LOG"
|
||||
SKEPTICAL_UPDATER_EUID=1000 run skup --dry-run list
|
||||
assert_success
|
||||
assert_line '+ apt-get update -qq -o APT::Update::Error-Mode=any'
|
||||
log_lacks '^apt-get update'
|
||||
}
|
||||
Reference in new issue
Block a user