commit 56185547fdbd48e18d2d355b2bc0a739e55d3370
parent a532dd94d71149f8589ea1c50434b59d947b5b61
Author: kyle <kyle@getaddrinfo.net>
Date: Fri, 20 Nov 2015 21:05:48 -0700
run_tests: simplify
- start up a server for each test, instead of a single server for entire suite
- this simplifies things significantly
- use an in memory database that never uses a file
- delete sigint handler as there's no temporary files to clean up
- no need to scrub the database between runs either
- move sed functionality into tests/test.mk, closer to where it's result is used
Diffstat:
3 files changed, 31 insertions(+), 55 deletions(-)
diff --git a/run_tests.sh b/run_tests.sh
@@ -1,24 +1,7 @@
#!/bin/sh
-# try not to connect to a real production instance with this script!
+# try not to connect to a production instance with this script!
export PORT=4729
-temp_db=`mktemp`
-
-# start server with temp db, non standard port, and in the background
-perl sl -p $PORT -d $temp_db > server.log &
-server_pid=$!
-
-sleep 0.1
-
-# clean up on ctrl-c
-trap sigint_handler int
-
-sigint_handler() {
- # remove temp db, and kill this process group
- rm $temp_db
- rm server.log
- kill 0
-}
if which tput > /dev/null; then
red=`tput setaf 1 0 0`
@@ -26,58 +9,51 @@ if which tput > /dev/null; then
reset=`tput sgr0`
fi
-cleanup() {
- > server.log
-
- # clean up the database between runs
- sqlite3 ${1} "delete from devices; delete from lists;
- delete from list_members; delete from list_data;
- delete from friends_map; delete from mutual_friends;"
+fail() {
+ printf "%3s %s: %s%s%s\n" $count $1 $red "$2" $reset
+ failed=`expr $failed + 1`
}
passed=0
failed=0
count=0
for t in `ls tests/*/Makefile`; do
- count=$((count + 1))
+ count=`expr $count + 1`
test_dir=`dirname ${t}`
make -s -C $test_dir clean
+ perl sl -p $PORT -t > $test_dir/server.log &
+ server_pid=$!
+ sleep 0.1
+
# run test, complain if failed
if ! make -s -C $test_dir "test"; then
- printf "%3s %s: %s%s%s\n" $count $test_dir $red "test failed" $reset
- failed=$((failed + 1))
- cleanup $temp_db
+ fail $test_dir "test failed"
+ kill $server_pid
+ wait
continue
fi
# make sure the server is still running
if ! kill -0 $server_pid; then
- printf "%3s %s: %s%s%s\n" $count $test_dir $red "test killed server" $reset
- +cat server.log
- rm $temp_db
- exit 1
+ fail $test_dir "test killed server"
+ continue
fi
- # remove header, phone numbers, and base64 strings from server.log
- sed -e "s/.*: //" -e "s/'[0-9]*'/<phone_num>/g" \
- -e "s/'[a-zA-Z0-9/+]*'/<base64>/g" \
- < server.log > $test_dir/server.log
- # truncate server log, don't delete it as it won't be recreated
- > server.log
+ # kill the server and wait for it to shut down
+ kill $server_pid
+ wait
if ! make -s -C $test_dir diff; then
- printf "%3s %s: %s%s%s\n" $count $test_dir $red "diff failed" $reset
- failed=$((failed + 1))
- cleanup $temp_db
+ fail $test_dir "diff failed"
continue
fi
printf "%3s %s: %s%s%s\n" $count $test_dir $green "ok" $reset
- passed=$((passed + 1))
- cleanup $temp_db
+ passed=`expr $passed + 1`
make -s -C $test_dir clean
done
+
printf "\n"
if [ $passed -ne 0 ]; then
printf "%i %sok%s " $passed $green $reset
@@ -85,11 +61,6 @@ fi
if [ $failed -ne 0 ]; then
printf "%i %sfailed%s " $failed $red $reset
fi
-# magic shell variable $SECONDS contains number of seconds since script start
-printf "(%i min %i sec)\n" $((SECONDS/60)) $((SECONDS%60))
-
-kill $server_pid
-rm $temp_db
-rm server.log
+printf "(%i min %i sec)\n" $((SECONDS / 60)) $((SECONDS % 60))
exit $failed;
diff --git a/sl b/sl
@@ -1,5 +1,4 @@
#!/usr/bin/perl -w
-$| = 1;
use warnings;
use strict;
@@ -22,7 +21,7 @@ my $LOG_LEVEL = $LOG_LEVEL_INFO;
my %args;
# -p is port, -d is database file
-getopts("p:d:", \%args);
+getopts("p:t", \%args);
my $sock = new IO::Socket::INET (
LocalHost => '0.0.0.0',
@@ -36,10 +35,12 @@ die "Could not create socket: $!\n" unless $sock;
my $local_addr_port = inet_ntoa($sock->sockaddr) . ":" .$sock->sockport();
my $db_file = "db";
-if ($args{d}) {
- $db_file = $args{d};
+if ($args{t}) {
+ $db_file = ":memory:";
+}
+elsif (! -e $db_file) {
+ print "info: creating new database '$db_file'\n";
}
-print "info: creating new database '$db_file'\n" unless (-e $db_file);
my $parent_dbh = DBI->connect(
"dbi:SQLite:dbname=$db_file",
diff --git a/tests/test.mk b/tests/test.mk
@@ -1,4 +1,8 @@
diff:
+ # remove header, phone numbers and base64 strings from server.log
+ sed -i -e "s/.*: //" -e "s/'[0-9]*'/<phone_num>/g" \
+ -e "s/'[a-zA-Z0-9/+]*'/<base64>/g" \
+ server.log
diff -u server.log.good server.log
clean: