1*12bf483bSAlexander Hansen#!/usr/bin/sh 2*12bf483bSAlexander Hansen 3*12bf483bSAlexander Hansenset -eux 4*12bf483bSAlexander Hansen 5*12bf483bSAlexander HansenSOCAT="$1" 6*12bf483bSAlexander HansenSERVER="$2" 7*12bf483bSAlexander HansenCLIENT="$3" 8*12bf483bSAlexander Hansen 9*12bf483bSAlexander Hansen# Meet DBus bus and path name constraints, append own PID for parallel runs 10*12bf483bSAlexander HansenTEST_NAME="$(basename "$0" | tr '-' '_')"_${$} 11*12bf483bSAlexander HansenTEST_DIR="$(mktemp --tmpdir --directory "${TEST_NAME}.XXXXXX")" 12*12bf483bSAlexander HansenPTYS_PID="" 13*12bf483bSAlexander HansenSERVER_PID="" 14*12bf483bSAlexander HansenCLIENT_PID="" 15*12bf483bSAlexander Hansen 16*12bf483bSAlexander Hansencd "$TEST_DIR" 17*12bf483bSAlexander Hansen 18*12bf483bSAlexander Hansencleanup() 19*12bf483bSAlexander Hansen{ 20*12bf483bSAlexander Hansen [ -z "$CLIENT_PID" ] || kill "$CLIENT_PID" 21*12bf483bSAlexander Hansen [ -z "$SERVER_PID" ] || kill "$SERVER_PID" 22*12bf483bSAlexander Hansen [ -z "$PTYS_PID" ] || kill "$PTYS_PID" 23*12bf483bSAlexander Hansen wait 24*12bf483bSAlexander Hansen cd - 25*12bf483bSAlexander Hansen rm -rf "$TEST_DIR" 26*12bf483bSAlexander Hansen} 27*12bf483bSAlexander Hansen 28*12bf483bSAlexander Hansentrap cleanup EXIT 29*12bf483bSAlexander Hansen 30*12bf483bSAlexander HansenTEST_CONF="${TEST_NAME}.conf" 31*12bf483bSAlexander HansenTEST_LOG="${TEST_NAME}.log" 32*12bf483bSAlexander Hansen 33*12bf483bSAlexander Hansencat <<EOF > "$TEST_CONF" 34*12bf483bSAlexander Hansenactive-console = $TEST_NAME 35*12bf483bSAlexander Hansen[$TEST_NAME] 36*12bf483bSAlexander Hansenconsole-id = $TEST_NAME 37*12bf483bSAlexander Hansenlogfile = $TEST_LOG 38*12bf483bSAlexander HansenEOF 39*12bf483bSAlexander Hansen 40*12bf483bSAlexander Hansen"$SOCAT" -u PTY,raw,echo=0,link=remote PTY,raw,echo=0,wait-slave,link=local & 41*12bf483bSAlexander HansenPTYS_PID="$!" 42*12bf483bSAlexander Hansenwhile ! [ -e remote ] || ! [ -e local ]; do sleep 1; done 43*12bf483bSAlexander Hansen 44*12bf483bSAlexander Hansen"$SERVER" --config "$TEST_CONF" "$(realpath local)" & 45*12bf483bSAlexander HansenSERVER_PID="$!" 46*12bf483bSAlexander Hansenwhile ! busctl status --user xyz.openbmc_project.Console."${TEST_NAME}"; do sleep 1; done 47*12bf483bSAlexander Hansen 48*12bf483bSAlexander Hansen$SOCAT EXEC:"$CLIENT -i $TEST_NAME" EXEC:'grep -m1 -qF client-reads-this' & 49*12bf483bSAlexander HansenCLIENT_PID="$!" 50*12bf483bSAlexander Hansen 51*12bf483bSAlexander Hansensleep 1 52*12bf483bSAlexander Hansen 53*12bf483bSAlexander Hansenecho client-reads-this > remote 54*12bf483bSAlexander Hansen 55*12bf483bSAlexander Hansensleep 1 56*12bf483bSAlexander Hansen 57*12bf483bSAlexander Hansen# If we can signal the process, the test has failed. 58*12bf483bSAlexander Hansen# The 'grep -m1' should have ended the process when the message was read. 59*12bf483bSAlexander Hansenkill -0 "$CLIENT_PID" && exit 1 60*12bf483bSAlexander HansenCLIENT_PID="" 61