xref: /openbmc/obmc-console/test/test-multiple-consoles (revision 97e7e51e3da9bcfb6c7c17b4e218ce65257aad74)
1*97e7e51eSAlexander Hansen#!/usr/bin/sh
2*97e7e51eSAlexander Hansen
3*97e7e51eSAlexander Hansenset -eux
4*97e7e51eSAlexander Hansen
5*97e7e51eSAlexander HansenSOCAT="$1"
6*97e7e51eSAlexander HansenSERVER="$2"
7*97e7e51eSAlexander Hansen
8*97e7e51eSAlexander Hansen# Meet DBus bus and path name constraints, append own PID for parallel runs
9*97e7e51eSAlexander HansenTEST_NAME="$(basename "$0" | tr '-' '_')"_${$}
10*97e7e51eSAlexander HansenTEST_DIR="$(mktemp --tmpdir --directory "${TEST_NAME}.XXXXXX")"
11*97e7e51eSAlexander HansenPTYS_PID=""
12*97e7e51eSAlexander HansenSERVER_PID=""
13*97e7e51eSAlexander HansenSUN_PID=""
14*97e7e51eSAlexander Hansen
15*97e7e51eSAlexander Hansencd "$TEST_DIR"
16*97e7e51eSAlexander Hansen
17*97e7e51eSAlexander Hansencleanup()
18*97e7e51eSAlexander Hansen{
19*97e7e51eSAlexander Hansen  [ -z "$SUN_PID" ] || kill "$SUN_PID"
20*97e7e51eSAlexander Hansen  [ -z "$SERVER_PID" ] || kill "$SERVER_PID"
21*97e7e51eSAlexander Hansen  [ -z "$PTYS_PID" ] || kill "$PTYS_PID"
22*97e7e51eSAlexander Hansen  wait
23*97e7e51eSAlexander Hansen  cd -
24*97e7e51eSAlexander Hansen  rm -rf "$TEST_DIR"
25*97e7e51eSAlexander Hansen}
26*97e7e51eSAlexander Hansen
27*97e7e51eSAlexander Hansentrap cleanup EXIT
28*97e7e51eSAlexander Hansen
29*97e7e51eSAlexander HansenTEST_CONF="${TEST_NAME}.conf"
30*97e7e51eSAlexander Hansen
31*97e7e51eSAlexander HansenTEST_A_NAME="${TEST_NAME}_a"
32*97e7e51eSAlexander HansenTEST_A_LOG="${TEST_A_NAME}.log"
33*97e7e51eSAlexander Hansen
34*97e7e51eSAlexander HansenTEST_B_NAME="${TEST_NAME}_b"
35*97e7e51eSAlexander HansenTEST_B_LOG="${TEST_B_NAME}.log"
36*97e7e51eSAlexander Hansen
37*97e7e51eSAlexander Hansencat <<EOF > "$TEST_CONF"
38*97e7e51eSAlexander Hansenactive-console = $TEST_A_NAME
39*97e7e51eSAlexander Hansen[$TEST_A_NAME]
40*97e7e51eSAlexander Hansenlogfile = $TEST_A_LOG
41*97e7e51eSAlexander Hansenconsole-id = $TEST_A_NAME
42*97e7e51eSAlexander Hansen[$TEST_B_NAME]
43*97e7e51eSAlexander Hansenlogfile = $TEST_B_LOG
44*97e7e51eSAlexander Hansenconsole-id = $TEST_B_NAME
45*97e7e51eSAlexander HansenEOF
46*97e7e51eSAlexander Hansen
47*97e7e51eSAlexander Hansen"$SOCAT" -u PTY,raw,echo=0,link=remote PTY,raw,echo=0,wait-slave,link=local &
48*97e7e51eSAlexander HansenPTYS_PID="$!"
49*97e7e51eSAlexander Hansenwhile ! [ -e remote ] || ! [ -e local ]; do sleep 1; done
50*97e7e51eSAlexander Hansen
51*97e7e51eSAlexander Hansen"$SERVER" --config "$TEST_CONF" "$(realpath local)" &
52*97e7e51eSAlexander HansenSERVER_PID="$!"
53*97e7e51eSAlexander Hansenwhile ! busctl status --user xyz.openbmc_project.Console."${TEST_A_NAME}"; do sleep 1; done
54*97e7e51eSAlexander Hansen
55*97e7e51eSAlexander Hansenecho log-for-console-a > remote
56*97e7e51eSAlexander Hansen
57*97e7e51eSAlexander Hansensleep 1
58*97e7e51eSAlexander Hansen
59*97e7e51eSAlexander Hansengrep -LF log-for-console-a "$TEST_A_LOG"
60*97e7e51eSAlexander Hansen! grep -F log-for-console-a "$TEST_B_LOG" || exit 1
61*97e7e51eSAlexander Hansen
62*97e7e51eSAlexander Hansen# change the active console
63*97e7e51eSAlexander Hansensocat -u "ABSTRACT:obmc-console.${TEST_B_NAME}" SYSTEM:'cat > /dev/null' &
64*97e7e51eSAlexander HansenSUN_PID="$!"
65*97e7e51eSAlexander Hansen
66*97e7e51eSAlexander Hansensleep 1
67*97e7e51eSAlexander Hansen
68*97e7e51eSAlexander Hansenecho log-for-console-b > remote
69*97e7e51eSAlexander Hansen
70*97e7e51eSAlexander Hansensleep 1
71*97e7e51eSAlexander Hansen
72*97e7e51eSAlexander Hansengrep -LF log-for-console-b "$TEST_B_LOG"
73*97e7e51eSAlexander Hansen! grep -F log-for-console-b "$TEST_A_LOG" || exit 1
74