zupt/tests/test_arg_order.sh
2026-08-31 14:14:36 -03:00

82 lines
2.7 KiB
Shell
Executable file

#!/bin/bash
# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (c) 2025-2026 Cristian Cezar Moisés
# Regression test for argument order in extract/list/test commands.
# Bug #15 (v2.2.2): options after the positional archive argument were
# silently dropped. e.g. `zupt x arch.zupt -o out` ignored `-o out`.
ZUPT_BIN=${1:-./zupt}
case $ZUPT_BIN in
/*) ;;
*) ZUPT_BIN=$PWD/${ZUPT_BIN#./} ;;
esac
TMPDIR=$(mktemp -d)
trap "rm -rf $TMPDIR" EXIT
cd "$TMPDIR"
PASS=0; FAIL=0
chk() {
if [ $? -eq 0 ]; then echo "$1"; PASS=$((PASS+1))
else echo "$1"; FAIL=$((FAIL+1)); fi
}
echo " [Argument order regression — extract/list/test]"
# Setup
mkdir d
echo "secret content $(date +%s%N)" > d/file.txt
"$ZUPT_BIN" c arch.zupt d/file.txt > /dev/null 2>&1
"$ZUPT_BIN" c -p mypw arch_pw.zupt d/file.txt > /dev/null 2>&1
"$ZUPT_BIN" keygen -o k.key > /dev/null 2>&1
"$ZUPT_BIN" keygen --pub -o p.key -k k.key > /dev/null 2>&1
"$ZUPT_BIN" c --pq p.key arch_pq.zupt d/file.txt > /dev/null 2>&1
# P1: extract -o after archive
mkdir out1
"$ZUPT_BIN" x arch.zupt -o out1 > /dev/null 2>&1
[ -f out1/d/file.txt ] && diff -q d/file.txt out1/d/file.txt > /dev/null
chk "extract: -o after archive"
# P2: extract -o before archive
mkdir out2
"$ZUPT_BIN" x -o out2 arch.zupt > /dev/null 2>&1
[ -f out2/d/file.txt ] && diff -q d/file.txt out2/d/file.txt > /dev/null
chk "extract: -o before archive"
# P3: extract password options after archive
mkdir out3
"$ZUPT_BIN" x arch_pw.zupt -p mypw -o out3 > /dev/null 2>&1
[ -f out3/d/file.txt ] && diff -q d/file.txt out3/d/file.txt > /dev/null
chk "extract: -p AND -o after archive"
# P4: extract --pq after archive
mkdir out4
"$ZUPT_BIN" x arch_pq.zupt --pq k.key -o out4 > /dev/null 2>&1
[ -f out4/d/file.txt ] && diff -q d/file.txt out4/d/file.txt > /dev/null
chk "extract: --pq after archive"
# P5: list -p after archive (encrypted archive lists files)
out=$("$ZUPT_BIN" l arch_pw.zupt -p mypw 2>&1)
echo "$out" | grep -q "file.txt"
chk "list: -p after archive"
# P6: list -p before archive
out=$("$ZUPT_BIN" l -p mypw arch_pw.zupt 2>&1)
echo "$out" | grep -q "file.txt"
chk "list: -p before archive"
# P7: test -p after archive
out=$("$ZUPT_BIN" t arch_pw.zupt -p mypw 2>&1)
echo "$out" | grep -q "0 failed"
chk "test: -p after archive"
# P8: test -p before archive
out=$("$ZUPT_BIN" t -p mypw arch_pw.zupt 2>&1)
echo "$out" | grep -q "0 failed"
chk "test: -p before archive"
echo
echo " ───────────────────────────────────────"
echo " Argument order regression: $PASS passed, $FAIL failed"
echo " ───────────────────────────────────────"
[ $FAIL -eq 0 ]