Files
2026-10-10 10:37:53 +02:00

136 lines
4.4 KiB
Bash

#!/usr/bin/env bats
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2026 Bryan Joshua Pedini
# Backend detection (pacman > apt > dnf (else yum) > zypper), --backend override, labels, banner.
# each @test runs in its own subshell: per-test exports are intended
# shellcheck disable=SC2030,SC2031
load test_helper
setup() { common_setup; }
@test "pacman wins over apt, dnf and zypper" {
use_fakes pacman apt dnf zypper rpm
export SKEPTICAL_UPDATER_OS_RELEASE=$FAKE_DATA/os-release-arch
run skup list --no-refresh
assert_success
assert_line --index 0 'Backend: pacman (Arch Linux)'
log_has 'pacman -Qu'
log_lacks '^(apt-get|dnf|zypper) '
}
@test "apt wins over dnf and zypper" {
use_fakes zypper dnf apt rpm
run skup list --no-refresh
assert_success
assert_line --index 0 'Backend: apt (Debian GNU/Linux 12 (bookworm))'
log_has 'apt-get -s --with-new-pkgs upgrade'
}
@test "dnf wins over zypper" {
use_fakes zypper dnf rpm
export SKEPTICAL_UPDATER_OS_RELEASE=$FAKE_DATA/os-release-alma9
run skup list --no-refresh
assert_success
assert_line --index 0 'Backend: dnf (AlmaLinux 9.8 (Olive Jaguar))'
log_has 'dnf -q check-update --setopt=skip_if_unavailable=0'
}
@test "yum is used when dnf is missing" {
use_fakes zypper yum rpm
run skup list --no-refresh
assert_success
assert_line --index 0 'Backend: yum (Debian GNU/Linux 12 (bookworm))'
log_has 'yum -q check-update --setopt=skip_if_unavailable=0'
}
@test "zypper comes last" {
use_fakes zypper rpm
export SKEPTICAL_UPDATER_OS_RELEASE=$FAKE_DATA/os-release-tumbleweed
run skup list --no-refresh
assert_success
assert_line --index 0 'Backend: zypper (openSUSE Tumbleweed)'
log_has 'zypper --non-interactive --no-refresh --xmlout dist-upgrade --dry-run'
}
@test "pman in PATH: label pman, the commands stay pacman" {
use_fakes pman pacman
export SKEPTICAL_UPDATER_OS_RELEASE=$FAKE_DATA/os-release-arch
run skup list
assert_success
assert_line --index 0 'Backend: pman (Arch Linux)'
log_matches '^pacman -Sy --dbpath /tmp/skeptical-updater-db\.[0-9]+\.[A-Za-z0-9]+ --logfile /dev/null$'
log_matches '^pacman --dbpath /tmp/skeptical-updater-db\.[0-9]+\.[A-Za-z0-9]+ -Qu$'
}
@test "--backend overrides the detection" {
use_fakes pacman apt
run skup --backend=apt list --no-refresh
assert_success
assert_line --index 0 'Backend: apt (Debian GNU/Linux 12 (bookworm))'
log_lacks '^pacman '
}
@test "--backend=pman and --backend=yum are aliases of pacman and dnf" {
use_fakes pacman apt dnf rpm
run skup --backend=pman list --no-refresh
assert_success
assert_line --index 0 --partial 'Backend: pacman'
run skup --backend=yum list --no-refresh
assert_success
assert_line --index 0 --partial 'Backend: dnf'
}
@test "the statefile backend column is the backend, not the label" {
use_fakes pman pacman
run skup trust su-dummy-c
assert_success
run cat "$STATE_FILE"
assert_line --regexp "^pacman${T}su-dummy-c${T}user${T}${DATE_RE}\$"
}
@test "no supported package manager: exit 1" {
use_fakes
run skup list --no-refresh
assert_failure 1
assert_output --partial 'no supported package manager found in PATH (pacman, apt-get, dnf/yum, zypper)'
}
@test "a forced backend whose tool is missing: exit 1" {
use_fakes apt
run skup --backend=zypper list --no-refresh
assert_failure 1
assert_output --partial 'zypper backend: zypper not found in PATH'
run skup --backend=pacman list --no-refresh
assert_failure 1
assert_output --partial 'pacman backend: pacman not found in PATH'
run skup --backend=dnf list --no-refresh
assert_failure 1
assert_output --partial 'dnf backend: neither dnf nor yum found in PATH'
}
@test "the banner uses PRETTY_NAME, quoted or not" {
printf "NAME=x\nPRETTY_NAME='Single Quoted 1.0'\n" >"$BATS_TEST_TMPDIR/osr"
SKEPTICAL_UPDATER_OS_RELEASE=$BATS_TEST_TMPDIR/osr run skup list --no-refresh
assert_line --index 0 'Backend: apt (Single Quoted 1.0)'
printf 'PRETTY_NAME=Plain\n' >"$BATS_TEST_TMPDIR/osr"
SKEPTICAL_UPDATER_OS_RELEASE=$BATS_TEST_TMPDIR/osr run skup list --no-refresh
assert_line --index 0 'Backend: apt (Plain)'
}
@test "the banner without os-release shows just the backend" {
SKEPTICAL_UPDATER_OS_RELEASE=$BATS_TEST_TMPDIR/missing run skup list --no-refresh
assert_success
assert_line --index 0 'Backend: apt'
}
@test "trusted needs no package manager at all" {
use_fakes
write_state "$HEADER" "apt${T}x${T}user${T}2026-10-09T09:40:12Z"
run skup trusted
assert_success
assert_line "apt${T}x${T}user${T}2026-10-09T09:40:12Z"
}