1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/bin/sh
#
# test - a pa test script
failures=0
fail() {
printf "%s\n" "$*"
failures=$((failures + 1))
}
export PA_DIR=/tmp/pa-test
# clean up previous run
# (the previous state is left around
# intentionally, in case the dev
# wants to poke around)
# that's why we don't clean up on exit
rm -rf /tmp/pa-test
# pa welcomes you
./pa | grep -q "a simple password manager" ||
fail "pa should print a welcome message"
# generate pa dirs/identityfile/recipientfile
./pa list
# pa auto-generated files are correct
test -s "$PA_DIR/identities" ||
fail "an identities file should exist"
test -s "$PA_DIR/recipients" ||
fail "a recipients file should exist"
test -d "$PA_DIR/passwords/.git" ||
fail "git dir should exist"
# TODO: ensure git author/email are set correctly, etc
# pa add
printf 'y' | ./pa add test 2>&1 >/dev/null ||
fail "pa add should be capable of adding a test password"
test "$(printf y | ./pa add nested/password 2>&1)" = "\
generate a password? [y/N]: y
saved 'nested/password' to the store." ||
fail "pa add should say it stored nested/password"
test -s "$PA_DIR/passwords/nested/password.age" ||
fail "pa add should create an encrypted password file"
# pa list
./pa list | grep -q test ||
fail "pa list should list the test password"
test "$(./pa list)" = "nested/password
test" ||
fail "pa list output should match example"
# ensure git commits are working
git -C "$PA_DIR/passwords" log | grep -q "add 'nested/password'" ||
fail "git log should have line: add 'nested/password'"
# print info & exit w/ correct status
printf "\ntotal failures: %d\n" "$failures"
test "$failures" -eq 0