aboutsummaryrefslogtreecommitdiffstats
path: root/mailing-list-test/test.sh
diff options
context:
space:
mode:
Diffstat (limited to 'mailing-list-test/test.sh')
-rwxr-xr-xmailing-list-test/test.sh238
1 files changed, 238 insertions, 0 deletions
diff --git a/mailing-list-test/test.sh b/mailing-list-test/test.sh
new file mode 100755
index 000000000..fbe1cddd8
--- /dev/null
+++ b/mailing-list-test/test.sh
@@ -0,0 +1,238 @@
+#! /bin/bash
+
+set -e
+# set -x
+
+if ! test -e mailing-list
+then
+ echo "Are you sure you are in the right directory?"
+ exit 1
+fi
+
+set +e
+TEMP=$(getopt \
+ --longoptions verbose \
+ -o v \
+ -n "${0##*/}" -- "$@")
+EC=$?
+set -e
+if test $EC != 0
+then
+ echo "Try \`$0 --help' for more information."
+ exit 1
+fi
+eval set -- "$TEMP"
+
+VERBOSE=0
+while true
+do
+ case "$1" in
+ --verbose|-v) VERBOSE=1; shift;;
+ --) shift; break;;
+ *) echo 'Internal error!'; exit 1;;
+ esac
+done
+
+banner() {
+ echo
+ echo "***************"
+ echo -e "$@"
+ echo "***************"
+}
+
+GPG() {
+ # valgrind gpg2 "$@"
+ if test x"$VERBOSE" = x1
+ then
+ gpg2 --no-permission-warning "$@"
+ else
+ gpg2 --no-permission-warning "$@" 2>/dev/null
+ fi
+}
+
+GPGU() {
+ GNUPGHOME=`pwd`/user GPG "$@"
+}
+
+SETPASSWD() {
+ keyids=$(gpg2 --no-permission-warning -K --with-keygrip --with-colons 2>/dev/null \
+ | gawk -F: '/^grp/ { print $10; }')
+ if test x$KEYID != x
+ then
+ for keygrip in $keyids
+ do
+ /usr/lib/gnupg2/gpg-preset-passphrase \
+ --preset -P a "$keygrip"
+ done
+ fi
+}
+
+TEST()
+{
+ TEXT="$1"
+ shift
+ banner "$TEXT\n Running: gpg2 $@"
+
+ if GPG "$@"
+ then
+ :
+ else
+ EC=$?
+ echo "FAIL! (exit code: $EC)"
+ exit $EC
+ fi
+}
+
+XTEST()
+{
+ TEXT="$1"
+ shift
+ banner "$TEXT\n Running: gpg2 $@"
+
+ if GPG "$@"
+ then
+ echo "UNEXPECTEDLY PASSED!"
+ exit 1
+ fi
+}
+
+# Be sure to clean up.
+cleanup() {
+ rm -f "mailing-list/subs-expected.$KEYID" "mailing-list/subs-have.$KEYID"
+}
+trap cleanup EXIT
+
+CHECKLIST() {
+ for x in $@
+ do
+ echo $x
+ done | sort > "mailing-list/subs-expected.$KEYID"
+
+ if ! cmp "mailing-list/subs-have.$KEYID" \
+ "mailing-list/subs-expected.$KEYID"
+ then
+ echo "Current subscriber list does not match expected subscriber list!"
+ diff -u "mailing-list/subs-expected.$KEYID" \
+ "mailing-list/subs-have.$KEYID"
+ exit 1
+ fi
+}
+
+CHECKSUBS() {
+ GPG --mailing-list-subs $KEYID | grep -v subscribers \
+ | sort > "mailing-list/subs-have.$KEYID"
+
+ CHECKLIST "$@"
+}
+
+export GNUPGHOME=`pwd`/mailing-list
+unset KEYID
+
+# Kill any running agent.
+gpgconf --kill gpg-agent
+
+# Rebuild the directory.
+rm -rf mailing-list
+mkdir mailing-list
+
+cat >$GNUPGHOME/gpg-agent.conf <<EOF
+pinentry-program /home/us/neal/work/gpg/build/pinentry/gtk+-2/pinentry-gtk-2
+allow-preset-passphrase
+min-passphrase-len 1
+min-passphrase-nonalpha 0
+EOF
+
+cat >$GNUPGHOME/gpg.conf <<EOF
+EOF
+
+rm -rf user
+cp -r mailing-list user
+
+banner "Generating a user key (use a password of 'a')."
+GPGU --batch --quick-gen-key 'Some User <[email protected]>'
+
+UKEYID=$(GPGU -K --with-colons | gawk -F: '/^sec/ { print $5 }')
+if test "x$UKEYID" = x
+then
+ echo "Failed to figure out the keyid of the user's primary key."
+ exit 1
+fi
+# We need the short keyid.
+UEKEYID=$(GPGU -K --with-colons | gawk -F: '/^ssb/ { print $5 }' \
+ | sed 's/^.\{8\}//')
+if test "x$UKEYID" = x
+then
+ echo "Failed to figure out the keyid of the user's encryption key."
+ exit 1
+fi
+
+
+# CFEFE77F (encryption subkey: 2B6E7103)
+# A9316686 (95A0BEEA)
+# E29FC3CC (117E1AFB)
+# 5C1A4468 (94244910)
+# F462B6B1 (AA45C71F)
+TEST "Importing some public keys." --batch --import keys.gpg
+GPGU --batch --export $UKEYID | GPG --batch --import
+
+banner "Set the password to 'a'"
+TEST "Creating mailing list." \
+ --batch --quick-gen-mailing-list-key "gnupg-devel <[email protected]>"
+
+KEYID=$(GPG -K --with-colons | gawk -F: '/^sec/ { print $5 }')
+if test "x$KEYID" = x
+then
+ echo "Failed to figure out the keyid of the ML's primary key."
+ exit 1
+fi
+SETPASSWD
+
+TEST "Adding a subscriber." --mailing-list-add-sub $KEYID CFEFE77F
+CHECKSUBS 2B6E7103
+
+XTEST "Adding the same subscriber." --mailing-list-add-sub $KEYID CFEFE77F
+
+TEST "Adding two subscribers." --mailing-list-add-sub $KEYID A9316686 E29FC3CC
+CHECKSUBS 117E1AFB 2B6E7103 95A0BEEA
+
+TEST "Removing a subscriber." --mailing-list-rm-sub $KEYID 117E1AFB
+# We need to wait a second, otherwise the key may not yet be
+# recognized as expired.
+sleep 1
+CHECKSUBS 2B6E7103 95A0BEEA
+
+TEST "Adding a subscriber." --mailing-list-add-sub $KEYID 5C1A4468
+GPG --mailing-list-subs $KEYID | grep -v subscribers | sort > subs
+CHECKSUBS 2B6E7103 94244910 95A0BEEA
+
+TEST "Removing a subscriber." --mailing-list-rm-sub $KEYID 2B6E7103
+sleep 1
+CHECKSUBS 94244910 95A0BEEA
+
+TEST "Adding a subscriber." --mailing-list-add-sub $KEYID F462B6B1
+CHECKSUBS AA45C71F 94244910 95A0BEEA
+
+TEST "Adding a subscriber." --mailing-list-add-sub $KEYID $UKEYID
+CHECKSUBS AA45C71F 94244910 95A0BEEA $UEKEYID
+
+GPG --batch --export $KEYID | GPGU --batch --import
+
+GNUPGHOME=`pwd`/user SETPASSWD
+
+banner "Using subscriber's key to list subscribers"
+GPGU --try-secret-key $UKEYID --mailing-list-subs $KEYID \
+ | grep -v subscribers | sort > mailing-list/subs-have.$KEYID
+CHECKLIST AA45C71F 94244910 95A0BEEA $UEKEYID
+
+banner "Using subscriber's key to send a message"
+# Note: --list-packets uses long keyids.
+echo | GPGU --trust-model=always --try-secret-key $UKEYID -r $KEYID -e \
+ | GPGU --list-packets \
+ | gawk '/pubkey enc packet/ { print $9 }' \
+ | sed 's/^.\{8\}//' \
+ | sort > mailing-list/subs-have.$KEYID
+CHECKLIST AA45C71F 94244910 95A0BEEA $UEKEYID
+
+echo "All tests passed!"
+
+exit 0