xref: /openbmc/obmc-console/test/test-console-client-can-read (revision 12bf483bee582d2feed71e6ef345195ef62d53d4)
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