82 lines
2.7 KiB
Shell
Executable file
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 ]
|