shlist

share and manage lists between multiple people
Log | Files | Refs

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:
Mrun_tests.sh | 71+++++++++++++++++++++--------------------------------------------------
Msl | 11++++++-----
Mtests/test.mk | 4++++
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: