veyron/examples/mdb: simple test.sh
Change-Id: I85c633ba25f8ccb3394e2a11aeaf0fc946c3a861
diff --git a/examples/mdb/Makefile b/examples/mdb/Makefile
index 88a62b3..d453a6a 100644
--- a/examples/mdb/Makefile
+++ b/examples/mdb/Makefile
@@ -1,7 +1,10 @@
build:
- ${VEYRON_ROOT}/veyron/scripts/build/go install {veyron,veyron2}/...
+ ${VEYRON_ROOT}/veyron/scripts/build/go install veyron/examples/mdb/... veyron/services/mounttable/mounttabled veyron/services/store/stored veyron/tools/identity
run: build
./run.sh
-.PHONY: build run
+test:
+ ./test.sh
+
+.PHONY: build run test
diff --git a/examples/mdb/run.sh b/examples/mdb/run.sh
index a678718..7ead48a 100755
--- a/examples/mdb/run.sh
+++ b/examples/mdb/run.sh
@@ -9,8 +9,8 @@
trap onexit INT TERM EXIT
onexit() {
- exec 2> /dev/null
- kill $(jobs -pr)
+ exec 2>/dev/null
+ kill $(jobs -p)
rm -rf "${ID_FILE}"
}
diff --git a/examples/mdb/test.sh b/examples/mdb/test.sh
new file mode 100755
index 0000000..656560f
--- /dev/null
+++ b/examples/mdb/test.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+
+# Tests the mdb example.
+#
+# Builds binaries, starts up services, waits a few seconds, then checks that the
+# store browser responds with valid data.
+
+set -e
+set -u
+
+readonly THIS_SCRIPT="$0"
+readonly WORK_DIR=$(mktemp -d)
+
+trap onexit INT TERM EXIT
+
+onexit() {
+ exec 2>/dev/null
+ kill $(jobs -p)
+ rm -rf "${WORK_DIR}"
+}
+
+fail() {
+ [[ $# -gt 0 ]] && echo "${THIS_SCRIPT} $*"
+ echo FAIL
+ exit 1
+}
+
+pass() {
+ echo PASS
+ exit 0
+}
+
+main() {
+ make build || fail "line ${LINENO}: failed to build"
+ ./run.sh >/dev/null 2>&1 &
+
+ sleep 5 # Wait for services to warm up.
+
+ URL="http://localhost:5000"
+ FILE="${WORK_DIR}/index.html"
+
+ curl 2>/dev/null "${URL}" -o "${FILE}" || fail "line ${LINENO}: failed to fetch ${URL}"
+
+ if grep -q moviesbox "${FILE}"; then
+ pass
+ else
+ cat ${FILE}
+ fail "line ${LINENO}: fetched page does not meet expectations"
+ fi
+}
+
+main "$@"