| 1 | # Library to turn a shell file into a "BYO test server"
 | 
| 2 | #
 | 
| 3 | # Usage:
 | 
| 4 | #
 | 
| 5 | #   # from both bash and OSH
 | 
| 6 | #   if test -z "$LIB_OSH"; then LIB_OSH=stdlib/osh; fi
 | 
| 7 | #   source $LIB_OSH/byo-server-lib.sh
 | 
| 8 | #
 | 
| 9 | # The client creates a clean process state and directory state for each tests.
 | 
| 10 | #
 | 
| 11 | # (This file requires compgen -A, and maybe declare -f, so it's not POSIX
 | 
| 12 | # shell.)
 | 
| 13 | 
 | 
| 14 | # TODO: How do I get stdlib/two.sh
 | 
| 15 | log() {
 | 
| 16 |   echo "$@" >& 2
 | 
| 17 | }
 | 
| 18 | 
 | 
| 19 | die() {
 | 
| 20 |   log "$0: fatal: $@"
 | 
| 21 |   exit 1
 | 
| 22 | }
 | 
| 23 | 
 | 
| 24 | byo-maybe-run() {
 | 
| 25 |   local command=${BYO_COMMAND:-}
 | 
| 26 | 
 | 
| 27 |   case $command in
 | 
| 28 |     '')
 | 
| 29 |       # Do nothing if it's not specified
 | 
| 30 |       return 
 | 
| 31 |       ;;
 | 
| 32 | 
 | 
| 33 |     detect)
 | 
| 34 |       # all the commands supported, except 'detect'
 | 
| 35 |       echo list-tests
 | 
| 36 |       echo run-test
 | 
| 37 | 
 | 
| 38 |       exit 66  # ASCII code for 'B' - what the protocol specifies
 | 
| 39 |       ;;
 | 
| 40 | 
 | 
| 41 |     list-tests)
 | 
| 42 |       # bash extension that OSH also implements
 | 
| 43 |       compgen -A function | grep '^test-'
 | 
| 44 |       exit 0
 | 
| 45 |       ;;
 | 
| 46 | 
 | 
| 47 |     run-test)
 | 
| 48 |       local test_name=${BYO_ARG:-}
 | 
| 49 |       if test -z "$test_name"; then
 | 
| 50 |         die "BYO run-test: Expected BYO_ARG"
 | 
| 51 |       fi
 | 
| 52 | 
 | 
| 53 |       # Shell convention: we name functions test-*
 | 
| 54 |       $test_name
 | 
| 55 | 
 | 
| 56 |       # Only run if not set -e.  Either way it's equivalent
 | 
| 57 |       exit $?
 | 
| 58 |       ;;
 | 
| 59 | 
 | 
| 60 |     *)
 | 
| 61 |       die "Invalid BYO command '$command'"
 | 
| 62 |       ;;
 | 
| 63 |   esac
 | 
| 64 | 
 | 
| 65 |   # Do nothing if BYO_COMMAND is not set.
 | 
| 66 |   # The program continues to its "main".
 | 
| 67 | }
 | 
| 68 | 
 | 
| 69 | byo-must-run() {
 | 
| 70 |   local command=${BYO_COMMAND:-}
 | 
| 71 |   if test -z "$command"; then
 | 
| 72 |     die "Expected BYO_COMMAND= in environment"
 | 
| 73 |   fi
 | 
| 74 | 
 | 
| 75 |   byo-maybe-run
 | 
| 76 | }
 |