| #!/bin/bash -e |
| |
| function pids_of() { |
| local pids="" |
| for p in `ps axuwww|grep $1|awk '{print $2}'`; do |
| if [ -x /proc/$p/cwd ] && [ "$(realpath /proc/$p/cwd)" == "$D" ]; then |
| pids="$pids $p" |
| fi |
| done |
| echo $pids |
| } |
| |
| function kill_all_of() { |
| # Suppress bash's Killed message |
| exec 3>&2 |
| exec 2>/dev/null |
| while [ ! -z "$(pids_of $1)" ]; do |
| kill $(pids_of $1) |
| done |
| exec 2>&3 |
| exec 3>&- |
| } |
| |
| function cleanup() { |
| kill_all_of c[h]rome |
| kill_all_of X[v]fb |
| |
| rm -rf $D |
| } |
| trap cleanup EXIT |
| |
| cd $(dirname $0) |
| WEBPAGE="file://${PWD}/turn-prober.html" |
| export D=$(mktemp -d) |
| cd $D |
| |
| CHROME_LOG_FILE="${D}/chrome_debug.log" |
| touch $CHROME_LOG_FILE |
| |
| XVFB="xvfb-run -a -e $CHROME_LOG_FILE -f $D/xauth -s '-screen 0 1024x768x24'" |
| if [ -n "$DISPLAY" ]; then |
| XVFB="" |
| fi |
| |
| # "eval" below is required by $XVFB containing a quoted argument. |
| eval $XVFB google-chrome \ |
| --enable-logging=stderr \ |
| --no-first-run \ |
| --disable-web-security \ |
| --user-data-dir=$D \ |
| --vmodule="*media/*=3,*turn*=3" \ |
| $WEBPAGE > $CHROME_LOG_FILE 2>&1 & |
| CHROME_PID=$! |
| |
| while ! grep -q DONE $CHROME_LOG_FILE && pids_of c[h]rome|grep -q .; do |
| sleep 0.1 |
| done |
| |
| kill_all_of c[h]rome |
| |
| DONE=$(grep DONE $CHROME_LOG_FILE) |
| EXIT_CODE=0 |
| if ! grep -q "DONE: PASS" $CHROME_LOG_FILE; then |
| cat $CHROME_LOG_FILE |
| EXIT_CODE=1 |
| fi |
| |
| exit $EXIT_CODE |