#!/bin/sh . tests/shlib/common.sh enter_suite awesome make_test_root TEST_PATH="$TEST_ROOT/path" TEST_STATIC_ROOT="$ROOT/tests/test_awesome" cp -r "$TEST_STATIC_ROOT/path" "$TEST_ROOT" cp -r "$TEST_STATIC_ROOT/powerline" "$TEST_ROOT" export PYTHONPATH="$ROOT${PYTHONPATH:+:}$PYTHONPATH" ln -s "$(command -v "${PYTHON}")" "$TEST_PATH"/python ln -s "$(command -v cat)" "$TEST_PATH" ln -s "$(command -v sh)" "$TEST_PATH" ln -s "$(command -v env)" "$TEST_PATH" if command -v socat ; then ln -s "$(command -v socat)" "$TEST_PATH" fi for pexe in powerline powerline.sh powerline.py ; do if test -e scripts/$pexe ; then ln -s "$PWD/scripts/$pexe" $TEST_ROOT/path elif test -e client/$pexe ; then ln -s "$PWD/client/$pexe" $TEST_ROOT/path elif command -v $pexe ; then ln -s "$(command -v $pexe)" $TEST_ROOT/path else continue fi if test "$pexe" != 'powerline.sh' || test -e "$TEST_PATH/socat" ; then POWERLINE_COMMAND="$pexe" break fi done DEPRECATED_SCRIPT="$ROOT/powerline/bindings/awesome/powerline-awesome.py" POWERLINE_DAEMON="scripts/powerline-daemon" run() { env -i \ LANG=C \ PATH="$TEST_PATH" \ XDG_CONFIG_HOME="$TEST_ROOT" \ XDG_CONFIG_DIRS="$TEST_ROOT/dummy" \ PYTHONPATH="$PYTHONPATH" \ TEST_ROOT="$TEST_ROOT" \ LD_LIBRARY_PATH="$LD_LIBRARY_PATH" \ "$@" || true } display_log() { local log_file="$1" echo "$log_file:" echo '============================================================' cat -v "$log_file" echo echo '____________________________________________________________' } check_log() { local args_file="$TEST_ROOT/results/args" local log_file="$TEST_ROOT/results/requests" local line="$(head -n1 "$log_file")" local linenum="$(cat "$log_file" | wc -l)" echo "Number of runs: $linenum (expected approx 5 / 0.5 = 10 runs)" if test $linenum -lt 5 ; then fail "log:lt" F "Script was run not enough times: $linenum < 5" return 1 elif test $linenum -gt 15 ; then fail "log:gt" E "Script was run too many times: $linenum > 15" return 1 fi local expline="powerline_widget:set_markup(' default-right ')" if test "$expline" != "$line" ; then echo "Line: '$line'" echo "Expected: '$expline'" fail "log:line" F "Unexpected line" return 1 fi local ret=0 while test $linenum -gt 0 ; do echo "$line" >> "$TEST_ROOT/ok" linenum=$(( linenum - 1 )) done if ! diff "$TEST_ROOT/ok" "$log_file" ; then fail "log:diff" F "Unexpected output" ret=1 fi rm "$TEST_ROOT/ok" return $ret } killscript() { kill -KILL $1 || true } if ! test -e "$DEPRECATED_SCRIPT" ; then # TODO: uncomment when skip is available # skip "deprecated" "Missing deprecated bar bindings script" : else enter_suite "deprecated" final for args in "" "0.5"; do rm -rf "$TEST_ROOT/results" mkdir "$TEST_ROOT/results" DEPRECATED_LOG="$TEST_ROOT/deprecated.log" run env \ DEPRECATED_SCRIPT="$DEPRECATED_SCRIPT" \ args="$args" \ DEPRECATED_LOG="$DEPRECATED_LOG" \ TEST_ROOT="$TEST_ROOT" \ sh -c ' echo $$ > "$TEST_ROOT/$args-pid" exec "$DEPRECATED_SCRIPT" $args > "$DEPRECATED_LOG" 2>&1 ' & sleep 5 killscript "$(cat "$TEST_ROOT/$args-pid")" rm "$TEST_ROOT/$args-pid" if test -n "$(cat "$DEPRECATED_LOG")" ; then display_log "$DEPRECATED_LOG" fail "output" E "Nonempty $DEPRECATED_SCRIPT output" fi rm "$DEPRECATED_LOG" if ! check_log ; then display_log "$TEST_ROOT/results/args" fail "log" F "Checking log failed" fi done exit_suite --continue fi enter_suite "awesome" final ADDRESS="powerline-ipc-test-$$" echo "Powerline address: $ADDRESS" rm -rf "$TEST_ROOT/results" mkdir "$TEST_ROOT/results" run env \ POWERLINE_DAEMON="$POWERLINE_DAEMON" \ TEST_ROOT="$TEST_ROOT" \ ADDRESS="$ADDRESS" \ sh -c ' echo $$ > "$TEST_ROOT/dpid" exec python "$POWERLINE_DAEMON" --socket $ADDRESS --foreground > "$TEST_ROOT/daemon.log" 2>&1 ' & DPID=$! sleep 2 run "$POWERLINE_COMMAND" --socket $ADDRESS wm.awesome > "$TEST_ROOT/output.log.1" 2>&1 run "$POWERLINE_COMMAND" --socket $ADDRESS wm.awesome > "$TEST_ROOT/output.log.2" 2>&1 run "$POWERLINE_COMMAND" --socket $ADDRESS wm.awesome > "$TEST_ROOT/output.log.3" 2>&1 run "$POWERLINE_COMMAND" --socket $ADDRESS wm.awesome > "$TEST_ROOT/output.log.4" 2>&1 run "$POWERLINE_COMMAND" --socket $ADDRESS wm.awesome > "$TEST_ROOT/output.log.5" 2>&1 for log_file in "$TEST_ROOT"/output.log.* ; do if test -n "$(cat "$log_file")" ; then display_log "$log_file" fail "output" E "Nonempty $POWERLINE_COMMAND output at run ${log_file#*.}" fi rm "$log_file" done sleep 5 run python "$POWERLINE_DAEMON" --socket $ADDRESS --quiet --kill > "$TEST_ROOT/kill.log" 2>&1 if test -n "$(cat "$TEST_ROOT/kill.log")" ; then display_log "$TEST_ROOT/kill.log" fail "daemonlog" E "Nonempty kill log" fi rm "$TEST_ROOT/kill.log" wait $DPID if test -n "$(cat "$TEST_ROOT/daemon.log")" ; then display_log "$TEST_ROOT/daemon.log" fail "daemonlog" E "Nonempty daemon log" fi rm "$TEST_ROOT/daemon.log" if ! check_log ; then display_log "$TEST_ROOT/results/args" fail "log" F "Checking log failed" fi exit_suite --continue if ! powerline-lint \ -p "$ROOT/powerline/config_files" \ -p "$TEST_STATIC_ROOT/powerline" then fail "lint" F "Checking test config failed" fi exit_suite