From: Jonathan McDowell <noodles@earth.li>
Date: Sun, 24 Apr 2011 02:28:31 +0000 (-0700)
Subject: Add basic testing infrastructure + initial tests
X-Git-Url: https://git.sommitrealweird.co.uk/onak.git/commitdiff_plain/2682946a339e46d392eebcb7597ef2073720df0d?hp=c5c516adbe4ddcf8d57e7f21317125422e0f6ed8

Add basic testing infrastructure + initial tests

  Add some simple scripts to ensure key addition, deletion and retrieval
  are at least working ok.
---

diff --git a/Makefile.in b/Makefile.in
index 4ec39da..f294acd 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -48,6 +48,9 @@ OBJS = stats.o cleankey.o $(CORE_OBJS) $(KEYDB_OBJ)
 all: .depend $(PROGS) testparse maxpath sixdegrees splitkeys onak.conf \
 	$(BACKENDS)
 
+test: onak $(BACKENDS)
+	@./runtests
+
 install: $(PROGS) onak.conf $(BACKENDS)
 	install -d $(DESTDIR)/@bindir@
 	install -d $(DESTDIR)/@libdir@/onak/backends
diff --git a/runtests b/runtests
new file mode 100755
index 0000000..968cfc0
--- /dev/null
+++ b/runtests
@@ -0,0 +1,41 @@
+#!/bin/sh
+set -e
+
+fail=0
+total=0
+
+if [ ! -e onak ]; then
+	echo "** onak binary doesn't exist, cannot run test suite" >&2
+	exit 1
+fi
+
+if [ -e t/db/ ]; then
+	rm -rf t/db/
+fi
+
+for t in libkeydb_*.so; do
+	backend=${t##libkeydb_}
+	backend=${backend%%.so}
+	if [ "`echo t/$backend-*`" != "t/$backend-*" ]; then
+		echo "* testing $backend backend"
+		(sed -e "s;DIR;`pwd`;" t/test-in.conf ; \
+			echo db_backend $backend) > t/test.conf
+		for t in t/$backend-*.t t/all-*.t; do
+			total=`expr $total + 1`
+			mkdir t/db/
+			if ! $t $backend; then
+				echo "test $t failed" >&2
+				fail=`expr $fail + 1`
+			fi
+			rm -rf t/db/
+		done
+		rm t/test.conf
+	fi
+done
+
+if [ "$fail" -gt 0 ]; then
+	echo "** failed $fail/$total tests" >&2
+	exit 1
+else
+	echo "** all tests succeeded"
+fi
diff --git a/t/all-020-get.t b/t/all-020-get.t
new file mode 100755
index 0000000..8adaa3f
--- /dev/null
+++ b/t/all-020-get.t
@@ -0,0 +1,14 @@
+#!/bin/sh
+# Check we can retrieve a key by keyid
+
+set -e
+
+cd t
+../onak -b -c test.conf add < ../keys/noodles.key
+if ! ../onak -c test.conf get 0x2DA8B985 2> /dev/null | \
+	grep -q -- '-----BEGIN PGP PUBLIC KEY BLOCK-----'; then
+	echo "* Did not correctly retrieve key by keyid."
+	exit 1
+fi
+
+exit 0
diff --git a/t/all-030-get-fail.t b/t/all-030-get-fail.t
new file mode 100755
index 0000000..0db2b28
--- /dev/null
+++ b/t/all-030-get-fail.t
@@ -0,0 +1,14 @@
+#!/bin/sh
+# Check retrieving a non existent keyid fails
+
+set -e
+
+cd t
+../onak -b -c test.conf add < ../keys/noodles.key
+if ! ../onak -c test.conf get 0x12345678 2>&1 | \
+	grep -q 'Key not found'; then
+	echo "* Did not correctly error on non-existent key"
+	exit 1
+fi
+
+exit 0
diff --git a/t/all-040-index-text.t b/t/all-040-index-text.t
new file mode 100755
index 0000000..f5b1c14
--- /dev/null
+++ b/t/all-040-index-text.t
@@ -0,0 +1,20 @@
+#!/bin/sh
+# Check we can index a key by some uid text
+
+set -e
+
+# Backends should really support this, but the file one is as simple as
+# possible, so doesn't. Skip the test for it.
+if [ "$1" = "file" ]; then
+	exit 0
+fi
+
+cd t
+../onak -b -c test.conf add < ../keys/noodles.key
+if ! ../onak -c test.conf index noodles 2> /dev/null | \
+	grep -q -- 'pub   4096R/2DA8B985 2008/06/03 Jonathan McDowell'; then
+	echo "* Did not correctly retrieve key by text"
+	exit 1
+fi
+
+exit 0
diff --git a/t/db4-000-add.t b/t/db4-000-add.t
new file mode 100755
index 0000000..c69cabb
--- /dev/null
+++ b/t/db4-000-add.t
@@ -0,0 +1,13 @@
+#!/bin/sh
+# Check we can add a key successfully with the db4 backend.
+
+set -e
+
+cd t
+../onak -b -c test.conf add < ../keys/noodles.key
+if [ ! -e db/worddb -o ! -e db/id32db -o ! -e db/keydb.0.db ]; then
+	echo Did not correctly add key using db4 backend.
+	exit 1
+fi
+
+exit 0
diff --git a/t/file-000-add.t b/t/file-000-add.t
new file mode 100755
index 0000000..cd7a4c5
--- /dev/null
+++ b/t/file-000-add.t
@@ -0,0 +1,13 @@
+#!/bin/sh
+# Check we can add a key successfully with the file backend.
+
+set -e
+
+cd t
+../onak -b -c test.conf add < ../keys/noodles.key
+if [ ! -e db/0x2DA8B985 ]; then
+	echo Did not correctly add key using file backend.
+	exit 1
+fi
+
+exit 0
diff --git a/t/file-010-del.t b/t/file-010-del.t
new file mode 100755
index 0000000..31acc5a
--- /dev/null
+++ b/t/file-010-del.t
@@ -0,0 +1,14 @@
+#!/bin/sh
+# Check we can delete a key successfully with the file backend.
+
+set -e
+
+cd t
+../onak -b -c test.conf add < ../keys/noodles.key
+../onak -b -c test.conf delete 0x2DA8B985
+if [ -e db/0x2DA8B985 ]; then
+	echo "* Did not correctly delete key using file backend"
+	exit 1
+fi
+
+exit 0
diff --git a/t/fs-000-add.t b/t/fs-000-add.t
new file mode 100755
index 0000000..c20231e
--- /dev/null
+++ b/t/fs-000-add.t
@@ -0,0 +1,13 @@
+#!/bin/sh
+# Check we can add a key successfully with the fs backend.
+
+set -e
+
+cd t
+../onak -b -c test.conf add < ../keys/noodles.key
+if [ ! -e db/key/2D/A8/2DA8B985/94FA372B2DA8B985 ]; then
+	echo Did not correctly add key using fs backend.
+	exit 1
+fi
+
+exit 0
diff --git a/t/fs-010-del.t b/t/fs-010-del.t
new file mode 100755
index 0000000..43fa7b0
--- /dev/null
+++ b/t/fs-010-del.t
@@ -0,0 +1,14 @@
+#!/bin/sh
+# Check we can delete a key successfully with the fs backend.
+
+set -e
+
+cd t
+../onak -b -c test.conf add < ../keys/noodles.key
+../onak -b -c test.conf delete 0x2DA8B985
+if [ -e db/key/2D/A8/2DA8B985/94FA372B2DA8B985 ]; then
+	echo "* Did not correctly delete key using fs backend"
+	exit 1
+fi
+
+exit 0
diff --git a/t/test-in.conf b/t/test-in.conf
new file mode 100644
index 0000000..b5309a0
--- /dev/null
+++ b/t/test-in.conf
@@ -0,0 +1,8 @@
+pks_bin_dir DIR
+backends_dir DIR
+db_dir DIR/t/db/
+logfile onak.log
+loglevel 7
+use_keyd false
+this_site pgp-public-keys@localhost
+max_reply_keys 128