lockbox

password manager
Log | Files | Refs | README | LICENSE

commit bcbda9cab420e85bca5a3b30a796523b53904251
parent 707dfa7c7e977830801259c097823ccfb0aee5b0
Author: Sean Enck <sean@ttypty.com>
Date:   Thu, 21 Mar 2024 18:30:42 -0400

migrate off of bash for test script

Diffstat:
M.github/workflows/build.yml | 2+-
Mtests/run.sh | 251+++++++++++++++++++++++++++++++++++--------------------------------------------
2 files changed, 111 insertions(+), 142 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml @@ -21,7 +21,7 @@ jobs: display: ubuntu - name: ubuntu-latest image: alpine:latest - deps: "apk add make git bash tar" + deps: "apk add make git" display: alpine - name: macos-latest image: null diff --git a/tests/run.sh b/tests/run.sh @@ -10,8 +10,54 @@ PASS_TEST="password" KEYF_TEST="keyfile" BOTH_TEST="both" -_execute() { - local oldmode oldkey +_unset() { + unset $(env | grep '^LOCKBOX' | cut -d "=" -f 1) +} + +if [ -z "$1" ]; then + CODE=0 + for TEST_RUN in "$PASS_TEST" "$KEYF_TEST" "$BOTH_TEST"; do + if ! "$0" "$TEST_RUN"; then + CODE=1 + fi + done + exit $CODE +fi + +_unset +export LOCKBOX_ENV="none" +if [ ! -x "${LB_BINARY}" ]; then + echo "binary missing?" + exit 1 +fi +if ! ${LB_BINARY} help >/dev/null; then + echo "help unavailable by default...fatal" + exit 1 +fi +mkdir -p "$DATA" +find "$DATA" -type f -delete + +export LOCKBOX_KEYFILE="" +export LOCKBOX_KEY="" +VALID=0 +if [ "$1" == "$PASS_TEST" ] || [ "$1" == "$BOTH_TEST" ]; then + VALID=1 + export LOCKBOX_KEY="testingkey" +fi +if [ "$1" == "$KEYF_TEST" ] || [ "$1" == "$BOTH_TEST" ]; then + VALID=1 + KEYFILE="$DATA/test.key" + echo "thisisatest" > "$KEYFILE" + export LOCKBOX_KEYFILE="$KEYFILE" +fi +if [ "$VALID" -eq 0 ]; then + echo "invalid test" + exit 1 +fi + +LOGFILE="$DATA/actual.log" +printf "%-10s ... " "$1" +{ export LOCKBOX_HOOKDIR="" export LOCKBOX_STORE="${DATA}/passwords.kdbx" export LOCKBOX_TOTP=totp @@ -24,20 +70,20 @@ _execute() { fi export LOCKBOX_JSON_DATA_HASH_LENGTH=0 echo test2 |${LB_BINARY} insert keys/k/one2 - oldmode="$LOCKBOX_KEYMODE" - oldkey="$LOCKBOX_KEY" - if [ "$oldkey" != "" ]; then + OLDMODE="$LOCKBOX_KEYMODE" + OLDKEY="$LOCKBOX_KEY" + if [ "$OLDKEY" != "" ]; then export LOCKBOX_INTERACTIVE=yes export LOCKBOX_KEYMODE=ask export LOCKBOX_KEY="" else printf "password: " fi - echo "$oldkey" | ${LB_BINARY} ls 2>/dev/null - if [ "$oldkey" != "" ]; then + echo "$OLDKEY" | ${LB_BINARY} ls 2>/dev/null + if [ "$OLDKEY" != "" ]; then export LOCKBOX_INTERACTIVE=no - export LOCKBOX_KEYMODE="$oldmode" - export LOCKBOX_KEY="$oldkey" + export LOCKBOX_KEYMODE="$OLDMODE" + export LOCKBOX_KEY="$OLDKEY" fi echo test |${LB_BINARY} insert keys/k/one echo test |${LB_BINARY} insert key/a/one @@ -105,66 +151,15 @@ _execute() { echo ${LB_BINARY} ls echo - _rekey 1 - _clipboard - _invalid - _config -} - -_unset() { - local i - for i in $(env | grep '^LOCKBOX' | cut -d "=" -f 1); do - unset "$i" - done -} - -_config() { - { - echo "PLAINTEXT=text" - env | grep '^LOCKBOX' | sed 's/plaintext/$LOCKBOX_FAKE_TEST$PLAINTEXT/g' - } > "$ENV" - _unset - export LOCKBOX_FAKE_TEST=plain - export LOCKBOX_ENV="none" - ${LB_BINARY} ls - export LOCKBOX_ENV="$ENV" - ${LB_BINARY} ls -} - -_invalid() { - local keyfile oldkey oldkeyfile oldmode - oldkey="$LOCKBOX_KEY" - oldmode="$LOCKBOX_KEYMODE" - oldkeyfile="$LOCKBOX_KEYFILE" - if [ -n "$LOCKBOX_KEYFILE" ]; then - export LOCKBOX_KEYFILE="" - if [ -z "$LOCKBOX_KEY" ]; then - export LOCKBOX_KEY="garbage" - fi - else - keyfile="$DATA/invalid.key" - echo "invalid" > "$keyfile" - export LOCKBOX_KEYFILE="$keyfile" - fi - if [ "$oldmode" == "none" ]; then - export LOCKBOX_KEYMODE="plaintext" - fi - ${LB_BINARY} ls - export LOCKBOX_KEYFILE="$oldkeyfile" - export LOCKBOX_KEY="$oldkey" - export LOCKBOX_KEYMODE="$oldmode" -} - -_rekey() { - local rekey rekeyFile - rekey="$LOCKBOX_STORE.rekey.kdbx" - rekeyFile="" + # rekeying + REKEY="$LOCKBOX_STORE.rekey.kdbx" + REKEYFILE="" export LOCKBOX_HOOKDIR="" if [ -n "$LOCKBOX_KEYFILE" ]; then - rekeyFile="$DATA/newkeyfile" - echo "thisisanewkey" > "$rekeyFile" + REKEYFILE="$DATA/newkeyfile" + echo "thisisanewkey" > "$REKEYFILE" fi - echo y |${LB_BINARY} rekey -store="$rekey" -key="newkey$1" -keymode="plaintext" -keyfile="$rekeyFile" + echo y |${LB_BINARY} rekey -store="$REKEY" -key="newkey$1" -keymode="plaintext" -keyfile="$REKEYFILE" echo ${LB_BINARY} ls ${LB_BINARY} show keys/k/one2 @@ -175,89 +170,63 @@ _rekey() { export LOCKBOX_JSON_DATA=hash export LOCKBOX_JSON_DATA_HASH_LENGTH=3 ${LB_BINARY} json k -} - -_clipboard() { - local clipTries + # clipboard export LOCKBOX_CLIP_COPY="touch $CLIP_COPY" export LOCKBOX_CLIP_PASTE="touch $CLIP_PASTE" export LOCKBOX_CLIP_MAX=5 ${LB_BINARY} clip keys/k/one2 - clipTries="$CLIP_TRIES" - while [ "$clipTries" -gt 0 ] ; do + CLIP_PASSED=0 + while [ "$CLIP_TRIES" -gt 0 ] ; do if [ -e "$CLIP_COPY" ] && [ -e "$CLIP_PASTE" ]; then - return + CLIP_PASSED=1 + break fi sleep "$CLIP_WAIT" - clipTries=$((clipTries-1)) + CLIP_TRIES=$((CLIP_TRIES-1)) done - echo "clipboard test failed" -} - -_logtest() { - _execute 2>&1 | \ - sed 's/"modtime": "[0-9].*$/"modtime": "XXXX-XX-XX",/g' | \ - sed 's/^[0-9][0-9][0-9][0-9][0-9][0-9]$/XXXXXX/g' -} - -_evaluate() { - local logfile state result - logfile="$DATA/actual.log" - printf "%-10s ... " "$1" - _logtest > "$logfile" - state=0 - result="passed" - if ! diff -u "$logfile" "expected.log"; then - result="failed" - state=1 + if [ $CLIP_PASSED -eq 0 ]; then + echo "clipboard test failed" fi - printf "[%s]\n" "$result" - exit "$state" -} - -_runall() { - local t code - code=0 - for t in "$PASS_TEST" "$KEYF_TEST" "$BOTH_TEST"; do - if ! "$0" "$t"; then - code=1 + # invalid settings + OLDKEY="$LOCKBOX_KEY" + OLDMODE="$LOCKBOX_KEYMODE" + OLDKEYFILE="$LOCKBOX_KEYFILE" + if [ -n "$LOCKBOX_KEYFILE" ]; then + export LOCKBOX_KEYFILE="" + if [ -z "$LOCKBOX_KEY" ]; then + export LOCKBOX_KEY="garbage" fi - done - exit "$code" -} - -if [ -z "$1" ]; then - _runall -fi - -_unset -export LOCKBOX_ENV="none" -if [ ! -x "${LB_BINARY}" ]; then - echo "binary missing?" - exit 1 -fi -if ! ${LB_BINARY} help >/dev/null; then - echo "help unavailable by default...fatal" - exit 1 -fi -mkdir -p "$DATA" -find "$DATA" -type f -delete - -export LOCKBOX_KEYFILE="" -export LOCKBOX_KEY="" -VALID=0 -if [ "$1" == "$PASS_TEST" ] || [ "$1" == "$BOTH_TEST" ]; then - VALID=1 - export LOCKBOX_KEY="testingkey" -fi -if [ "$1" == "$KEYF_TEST" ] || [ "$1" == "$BOTH_TEST" ]; then - VALID=1 - KEYFILE="$DATA/test.key" - echo "thisisatest" > "$KEYFILE" - export LOCKBOX_KEYFILE="$KEYFILE" -fi -if [ "$VALID" -eq 0 ]; then - echo "invalid test" - exit 1 + else + KEYFILE="$DATA/invalid.key" + echo "invalid" > "$KEYFILE" + export LOCKBOX_KEYFILE="$KEYFILE" + fi + if [ "$OLDMODE" == "none" ]; then + export LOCKBOX_KEYMODE="plaintext" + fi + ${LB_BINARY} ls + export LOCKBOX_KEYFILE="$OLDKEYFILE" + export LOCKBOX_KEY="$OLDKEY" + export LOCKBOX_KEYMODE="$OLDMODE" + # configuration + { + echo "PLAINTEXT=text" + env | grep '^LOCKBOX' | sed 's/plaintext/$LOCKBOX_FAKE_TEST$PLAINTEXT/g' + } > "$ENV" + _unset + export LOCKBOX_FAKE_TEST=plain + export LOCKBOX_ENV="none" + ${LB_BINARY} ls + export LOCKBOX_ENV="$ENV" + ${LB_BINARY} ls +} 2>&1 | \ + sed 's/"modtime": "[0-9].*$/"modtime": "XXXX-XX-XX",/g' | \ + sed 's/^[0-9][0-9][0-9][0-9][0-9][0-9]$/XXXXXX/g' > "$LOGFILE" +STATE=0 +RESULT="passed" +if ! diff -u "$LOGFILE" "expected.log"; then + RESULT="failed" + STATE=1 fi -_evaluate "$1" +printf "[%s]\n" "$RESULT" +exit "$STATE"