857 lines
24 KiB
Bash
Executable file
857 lines
24 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
function tick() { # command to pause input
|
|
sleep $ticktime
|
|
}
|
|
|
|
function server_spawn () {
|
|
server="${tid}-serv" # set server name
|
|
server_out="${server}.${valg}out" # set server output name
|
|
if [ ! "$valg" = "" ]; then
|
|
outfiles+=("$server_out")
|
|
fi
|
|
$valg ${valg_opts} ./bin/bl-server $server >& ${server_out} & server_pid=$!
|
|
}
|
|
|
|
function server_close () {
|
|
kill $server_pid
|
|
wait $server_pid
|
|
}
|
|
|
|
function client_spawn () {
|
|
client=$1
|
|
# echo spawning "$client"
|
|
client_out="${tid}-${client}.${valg}out"
|
|
client_fifo="${tid}-${client}.fifo"
|
|
outfiles+=("$client_out")
|
|
rm -f ${client_fifo}
|
|
mkfifo ${client_fifo}
|
|
./cat-sig.sh <> $client_fifo > \
|
|
>($valg ${valg_opts} ./bin/bl-client $server $client |& ./normalize.awk >& \
|
|
${client_out} ) & pid=$!
|
|
eval ${client}_pid=$pid
|
|
# echo client "$client $pid" spawned
|
|
}
|
|
|
|
function client_print () {
|
|
client=$1
|
|
mesg="$2"
|
|
echo -e "$mesg" > ${tid}-${client}.fifo
|
|
# echo -e "$mesg" ${tid}-${client}.fifo
|
|
# printf "%s\n" "$mesg" > ${client}.fifo
|
|
}
|
|
|
|
function client_close () {
|
|
client=$1
|
|
# echo closing "$client"
|
|
client_pid="${client}_pid"
|
|
# echo "$client_pid" ${!client_pid}
|
|
kill "${!client_pid}"
|
|
wait "${!client_pid}"
|
|
rm -f ${tid}-${client}.fifo
|
|
# echo client "$client" closed
|
|
}
|
|
|
|
|
|
T=0 # global test number
|
|
|
|
# Server start/stop
|
|
((T++))
|
|
tnames[T]="server-only"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
tick
|
|
tick
|
|
server_close
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
EOF
|
|
|
|
# Server and single client, no messages
|
|
((T++))
|
|
tnames[T]="1client-1"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn Bruce
|
|
client_close Bruce
|
|
server_close
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- Bruce JOINED --
|
|
Bruce>>
|
|
EOF
|
|
|
|
# # Server and single client, single message
|
|
# ((T++))
|
|
# tnames[T]="1client-2"
|
|
# read -r -d '' setup[$T] <<"EOF"
|
|
# EOF
|
|
# read -r -d '' actions[$T] <<"EOF"
|
|
# server_spawn
|
|
# client_spawn Bruce
|
|
# client_print Bruce "This is a test\n"
|
|
# client_close Bruce
|
|
# server_close
|
|
# EOF
|
|
# read -r -d '' teardown[$T] <<"EOF"
|
|
# EOF
|
|
# read -r -d '' expect_outs[$T] <<"EOF"
|
|
# -- Bruce JOINED --
|
|
# [Bruce] : This is a test
|
|
# Bruce>>
|
|
# EOF
|
|
|
|
# Server and single client, multiple messages
|
|
((T++))
|
|
tnames[T]="1client-2"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn Bruce
|
|
client_print Bruce "This is a test\n"
|
|
client_print Bruce "Is anyone there\n"
|
|
client_print Bruce "Alfreeeed!\n"
|
|
client_close Bruce
|
|
server_close
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- Bruce JOINED --
|
|
[Bruce] : This is a test
|
|
[Bruce] : Is anyone there
|
|
[Bruce] : Alfreeeed!
|
|
Bruce>>
|
|
EOF
|
|
|
|
# Server and two clients, no messages
|
|
((T++))
|
|
tnames[T]="2client-1"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn Bruce
|
|
client_spawn Clark
|
|
client_close Bruce
|
|
client_close Clark
|
|
server_close
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- Bruce JOINED -- -- Clark JOINED --
|
|
-- Clark JOINED -- -- Bruce DEPARTED --
|
|
Bruce>> Clark>>
|
|
EOF
|
|
|
|
# Server and two clients, single message
|
|
((T++))
|
|
tnames[T]="2client-2"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn Bruce
|
|
client_spawn Clark
|
|
client_print Bruce "Hey big guy\n"
|
|
client_close Bruce
|
|
client_close Clark
|
|
server_close
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- Bruce JOINED -- -- Clark JOINED --
|
|
-- Clark JOINED -- [Bruce] : Hey big guy
|
|
[Bruce] : Hey big guy -- Bruce DEPARTED --
|
|
Bruce>> Clark>>
|
|
EOF
|
|
|
|
# Server and two clients, multiple messages
|
|
((T++))
|
|
tnames[T]="2client-3"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn Bruce
|
|
client_spawn Clark
|
|
client_print Bruce "Hey big guy\n"
|
|
client_print Bruce "What's happen'?\n"
|
|
client_print Clark "Not much, how about you?\n"
|
|
client_print Bruce "Hangin' out..."
|
|
client_print Bruce "In the BATCAVE"
|
|
client_print Clark "I figured..."
|
|
client_print Clark "I'm out"
|
|
client_close Clark
|
|
client_close Bruce
|
|
server_close
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- Bruce JOINED -- -- Clark JOINED --
|
|
-- Clark JOINED -- [Bruce] : Hey big guy
|
|
[Bruce] : Hey big guy [Bruce] : What's happen'?
|
|
[Bruce] : What's happen'? [Clark] : Not much, how about you?
|
|
[Clark] : Not much, how about you? [Bruce] : Hangin' out...
|
|
[Bruce] : Hangin' out... [Bruce] : In the BATCAVE
|
|
[Bruce] : In the BATCAVE [Clark] : I figured...
|
|
[Clark] : I figured... [Clark] : I'm out
|
|
[Clark] : I'm out Clark>>
|
|
-- Clark DEPARTED --
|
|
Bruce>>
|
|
EOF
|
|
|
|
# Server and two clients, multiple messages, one client remains
|
|
((T++))
|
|
tnames[T]="2client-4"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn Bruce
|
|
client_spawn Clark
|
|
client_print Bruce "Hello\n"
|
|
client_print Clark "Yo\n"
|
|
client_print Bruce "bye\n"
|
|
client_close Bruce
|
|
client_print Clark "guess I'm all alone\n"
|
|
client_print Clark "this is lame\n"
|
|
client_close Clark
|
|
server_close
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- Bruce JOINED -- -- Clark JOINED --
|
|
-- Clark JOINED -- [Bruce] : Hello
|
|
[Bruce] : Hello [Clark] : Yo
|
|
[Clark] : Yo [Bruce] : bye
|
|
[Bruce] : bye -- Bruce DEPARTED --
|
|
Bruce>> [Clark] : guess I'm all alone
|
|
[Clark] : this is lame
|
|
Clark>>
|
|
EOF
|
|
|
|
|
|
# Server and two clients, multiple messages, one client remains
|
|
((T++))
|
|
tnames[T]="2client-5"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn Bruce
|
|
client_spawn Clark
|
|
client_print Bruce "Hello\n"
|
|
client_print Clark "Yo\n"
|
|
client_print Bruce "bye\n"
|
|
client_print Clark "No\n"
|
|
client_print Bruce "Yep\n"
|
|
client_print Clark "Wrong\n"
|
|
client_print Bruce "Hah\n"
|
|
client_close Clark
|
|
client_print Bruce "grrr\n"
|
|
client_print Bruce "grrr\n"
|
|
client_close Bruce
|
|
server_close
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- Bruce JOINED -- -- Clark JOINED --
|
|
-- Clark JOINED -- [Bruce] : Hello
|
|
[Bruce] : Hello [Clark] : Yo
|
|
[Clark] : Yo [Bruce] : bye
|
|
[Bruce] : bye [Clark] : No
|
|
[Clark] : No [Bruce] : Yep
|
|
[Bruce] : Yep [Clark] : Wrong
|
|
[Clark] : Wrong [Bruce] : Hah
|
|
[Bruce] : Hah Clark>>
|
|
-- Clark DEPARTED --
|
|
[Bruce] : grrr
|
|
[Bruce] : grrr
|
|
Bruce>>
|
|
EOF
|
|
|
|
# Server and two clients, multiple messages, one client remains
|
|
((T++))
|
|
tnames[T]="2client-6"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn Bruce
|
|
client_spawn Clark
|
|
client_print Bruce "Hello\n"
|
|
client_print Clark "Yo\n"
|
|
client_print Bruce "bye\n"
|
|
client_print Clark "No\n"
|
|
client_print Bruce "Yep\n"
|
|
client_print Clark "Wrong\n"
|
|
client_print Bruce "Hah\n"
|
|
client_print Bruce "grrr\n"
|
|
client_print Bruce "grrr\n"
|
|
client_close Bruce
|
|
client_print Clark "Ugh\n"
|
|
client_print Clark "Ugh\n"
|
|
client_print Clark "sigh..\n"
|
|
client_close Clark
|
|
server_close
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- Bruce JOINED -- -- Clark JOINED --
|
|
-- Clark JOINED -- [Bruce] : Hello
|
|
[Bruce] : Hello [Clark] : Yo
|
|
[Clark] : Yo [Bruce] : bye
|
|
[Bruce] : bye [Clark] : No
|
|
[Clark] : No [Bruce] : Yep
|
|
[Bruce] : Yep [Clark] : Wrong
|
|
[Clark] : Wrong [Bruce] : Hah
|
|
[Bruce] : Hah [Bruce] : grrr
|
|
[Bruce] : grrr [Bruce] : grrr
|
|
[Bruce] : grrr -- Bruce DEPARTED --
|
|
Bruce>> [Clark] : Ugh
|
|
[Clark] : Ugh
|
|
[Clark] : sigh..
|
|
Clark>>
|
|
EOF
|
|
|
|
# Server and two clients, multiple messages, one client rejoins
|
|
((T++))
|
|
tnames[T]="2client-rejoin1"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn Bruce
|
|
client_spawn Clark
|
|
client_print Bruce "Hello\n"
|
|
client_print Clark "Yo\n"
|
|
client_print Bruce "bye\n"
|
|
client_close Bruce
|
|
client_print Clark "Ugh\n"
|
|
client_spawn Bruce
|
|
client_print Bruce "back\n"
|
|
client_print Clark "great\n"
|
|
client_print Clark "gone\n"
|
|
client_print Bruce "ack\n"
|
|
client_close Clark
|
|
client_print Bruce "alone\n"
|
|
client_close Bruce
|
|
server_close
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- Bruce JOINED -- -- Clark JOINED -- -- Bruce JOINED --
|
|
[Bruce] : back [Bruce] : Hello [Bruce] : back
|
|
[Clark] : great [Clark] : Yo [Clark] : great
|
|
[Clark] : gone [Bruce] : bye [Clark] : gone
|
|
[Bruce] : ack -- Bruce DEPARTED -- [Bruce] : ack
|
|
-- Clark DEPARTED -- [Clark] : Ugh -- Clark DEPARTED --
|
|
[Bruce] : alone -- Bruce JOINED -- [Bruce] : alone
|
|
Bruce>> [Bruce] : back Bruce>>
|
|
[Clark] : great
|
|
[Clark] : gone
|
|
[Bruce] : ack
|
|
Clark>>
|
|
EOF
|
|
|
|
# # Server and two clients, multiple messages, two clients rejoins
|
|
# ((T++))
|
|
# tnames[T]="2client-rejoin2"
|
|
# read -r -d '' setup[$T] <<"EOF"
|
|
# EOF
|
|
# read -r -d '' actions[$T] <<"EOF"
|
|
# server_spawn
|
|
# client_spawn Bruce
|
|
# client_print Bruce "alone\n"
|
|
# client_spawn Clark
|
|
# client_print Bruce "Hello\n"
|
|
# client_print Clark "Yo\n"
|
|
# client_print Bruce "bye\n"
|
|
# client_close Bruce
|
|
# client_print Clark "Ugh\n"
|
|
# client_spawn Bruce
|
|
# client_print Bruce "back\n"
|
|
# client_print Clark "great\n"
|
|
# client_print Clark "gone\n"
|
|
# client_print Bruce "ack\n"
|
|
# client_close Clark
|
|
# client_print Bruce "alone\n"
|
|
# client_spawn Clark
|
|
# client_print Bruce "joy\n"
|
|
# client_close Bruce
|
|
# client_close Clark
|
|
# server_close
|
|
# EOF
|
|
# read -r -d '' teardown[$T] <<"EOF"
|
|
# EOF
|
|
# read -r -d '' expect_outs[$T] <<"EOF"
|
|
# -- Bruce JOINED -- -- Clark JOINED -- -- Bruce JOINED -- -- Clark JOINED --
|
|
# [Bruce] : back [Bruce] : joy [Bruce] : back [Bruce] : joy
|
|
# [Clark] : great -- Bruce DEPARTED -- [Clark] : great -- Bruce DEPARTED --
|
|
# [Clark] : gone Clark>> [Clark] : gone Clark>>
|
|
# [Bruce] : ack [Bruce] : ack
|
|
# -- Clark DEPARTED -- -- Clark DEPARTED --
|
|
# [Bruce] : alone [Bruce] : alone
|
|
# -- Clark JOINED -- -- Clark JOINED --
|
|
# [Bruce] : joy [Bruce] : joy
|
|
# Bruce>> Bruce>>
|
|
# EOF
|
|
|
|
# Three clients, no messages
|
|
((T++))
|
|
tnames[T]="3clients-1"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn Clark
|
|
client_spawn Bruce
|
|
client_spawn Lois
|
|
client_close Bruce
|
|
client_close Lois
|
|
client_close Clark
|
|
server_close
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- Clark JOINED -- -- Bruce JOINED -- -- Lois JOINED --
|
|
-- Bruce JOINED -- -- Lois JOINED -- -- Bruce DEPARTED --
|
|
-- Lois JOINED -- Bruce>> Lois>>
|
|
-- Bruce DEPARTED --
|
|
-- Lois DEPARTED --
|
|
Clark>>
|
|
EOF
|
|
|
|
# Three clients, one message
|
|
((T++))
|
|
tnames[T]="3clients-2"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn Clark
|
|
client_spawn Bruce
|
|
client_spawn Lois
|
|
client_print Bruce "Batman!\n"
|
|
client_close Bruce
|
|
client_close Lois
|
|
client_close Clark
|
|
server_close
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- Clark JOINED -- -- Bruce JOINED -- -- Lois JOINED --
|
|
-- Bruce JOINED -- -- Lois JOINED -- [Bruce] : Batman!
|
|
-- Lois JOINED -- [Bruce] : Batman! -- Bruce DEPARTED --
|
|
[Bruce] : Batman! Bruce>> Lois>>
|
|
-- Bruce DEPARTED --
|
|
-- Lois DEPARTED --
|
|
Clark>>
|
|
EOF
|
|
|
|
# Three clients, several messages
|
|
((T++))
|
|
tnames[T]="3clients-3"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn Clark
|
|
client_spawn Bruce
|
|
client_spawn Lois
|
|
client_print Bruce "Batman!\n"
|
|
client_print Clark "Superman!\n"
|
|
client_print Lois "Reporter?\n"
|
|
client_print Bruce "Ha\n"
|
|
client_print Clark "He he\n"
|
|
client_print Lois "bite me\n"
|
|
client_close Lois
|
|
client_close Clark
|
|
client_close Bruce
|
|
server_close
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- Clark JOINED -- -- Bruce JOINED -- -- Lois JOINED --
|
|
-- Bruce JOINED -- -- Lois JOINED -- [Bruce] : Batman!
|
|
-- Lois JOINED -- [Bruce] : Batman! [Clark] : Superman!
|
|
[Bruce] : Batman! [Clark] : Superman! [Lois] : Reporter?
|
|
[Clark] : Superman! [Lois] : Reporter? [Bruce] : Ha
|
|
[Lois] : Reporter? [Bruce] : Ha [Clark] : He he
|
|
[Bruce] : Ha [Clark] : He he [Lois] : bite me
|
|
[Clark] : He he [Lois] : bite me Lois>>
|
|
[Lois] : bite me -- Lois DEPARTED --
|
|
-- Lois DEPARTED -- -- Clark DEPARTED --
|
|
Clark>> Bruce>>
|
|
EOF
|
|
|
|
# Three clients, several messages before/after full join
|
|
((T++))
|
|
tnames[T]="3clients-4"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn Clark
|
|
client_print Clark "Superman!\n"
|
|
client_spawn Bruce
|
|
client_print Bruce "Hey!\n"
|
|
client_print Clark "Superman!\n"
|
|
client_spawn Lois
|
|
client_print Bruce "Batman!\n"
|
|
client_print Clark "Superman!\n"
|
|
client_print Lois "Not again\n"
|
|
client_print Bruce "Vanish!\n"
|
|
client_close Bruce
|
|
client_print Clark "He he\n"
|
|
client_print Lois "Lame\n"
|
|
client_print Clark "Yup\n"
|
|
client_close Lois
|
|
client_print Clark "Fortress of solitude\n"
|
|
client_close Clark
|
|
server_close
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- Clark JOINED -- -- Bruce JOINED -- -- Lois JOINED --
|
|
[Clark] : Superman! [Bruce] : Hey! [Bruce] : Batman!
|
|
-- Bruce JOINED -- [Clark] : Superman! [Clark] : Superman!
|
|
[Bruce] : Hey! -- Lois JOINED -- [Lois] : Not again
|
|
[Clark] : Superman! [Bruce] : Batman! [Bruce] : Vanish!
|
|
-- Lois JOINED -- [Clark] : Superman! -- Bruce DEPARTED --
|
|
[Bruce] : Batman! [Lois] : Not again [Clark] : He he
|
|
[Clark] : Superman! [Bruce] : Vanish! [Lois] : Lame
|
|
[Lois] : Not again Bruce>> [Clark] : Yup
|
|
[Bruce] : Vanish! Lois>>
|
|
-- Bruce DEPARTED --
|
|
[Clark] : He he
|
|
[Lois] : Lame
|
|
[Clark] : Yup
|
|
-- Lois DEPARTED --
|
|
[Clark] : Fortress of solitude
|
|
Clark>>
|
|
EOF
|
|
|
|
# Three clients with rejoins and messages
|
|
((T++))
|
|
tnames[T]="3clients-rejoin1"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn Clark1
|
|
client_print Clark1 "Superman!\n"
|
|
client_spawn Bruce1
|
|
client_print Bruce1 "Batman!\n"
|
|
client_print Clark1 "Superman!\n"
|
|
client_close Bruce1
|
|
client_spawn Lois1
|
|
client_print Clark1 "Superman!\n"
|
|
client_print Lois1 "Not again\n"
|
|
client_spawn Bruce2
|
|
client_print Bruce2 "Vanish!\n"
|
|
client_close Bruce2
|
|
client_print Clark1 "He he\n"
|
|
client_print Clark1 "Super speed\n"
|
|
client_close Clark1
|
|
client_print Lois1 "Lame\n"
|
|
client_spawn Clark2
|
|
client_print Clark2 "Yup - super hearing\n"
|
|
client_close Lois1
|
|
client_print Clark2 "Fortress of solitude\n"
|
|
client_spawn Bruce3
|
|
client_print Bruce3 "From the shadows!\n"
|
|
client_print Bruce3 "Kryptonite!\n"
|
|
client_close Clark2
|
|
client_print Bruce3 "Batman!\n"
|
|
client_close Bruce3
|
|
server_close
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- Clark1 JOINED -- -- Bruce1 JOINED -- -- Lois1 JOINED -- -- Bruce2 JOINED -- -- Clark2 JOINED -- -- Bruce3 JOINED --
|
|
[Clark1] : Superman! [Bruce1] : Batman! [Clark1] : Superman! [Bruce2] : Vanish! [Clark2] : Yup - super hearing [Bruce3] : From the shadows!
|
|
-- Bruce1 JOINED -- [Clark1] : Superman! [Lois1] : Not again Bruce2>> -- Lois1 DEPARTED -- [Bruce3] : Kryptonite!
|
|
[Bruce1] : Batman! Bruce1>> -- Bruce2 JOINED -- [Clark2] : Fortress of solitude -- Clark2 DEPARTED --
|
|
[Clark1] : Superman! [Bruce2] : Vanish! -- Bruce3 JOINED -- [Bruce3] : Batman!
|
|
-- Bruce1 DEPARTED -- -- Bruce2 DEPARTED -- [Bruce3] : From the shadows! Bruce3>>
|
|
-- Lois1 JOINED -- [Clark1] : He he [Bruce3] : Kryptonite!
|
|
[Clark1] : Superman! [Clark1] : Super speed Clark2>>
|
|
[Lois1] : Not again -- Clark1 DEPARTED --
|
|
-- Bruce2 JOINED -- [Lois1] : Lame
|
|
[Bruce2] : Vanish! -- Clark2 JOINED --
|
|
-- Bruce2 DEPARTED -- [Clark2] : Yup - super hearing
|
|
[Clark1] : He he Lois1>>
|
|
[Clark1] : Super speed
|
|
Clark1>>
|
|
EOF
|
|
|
|
# Four clients messages
|
|
((T++))
|
|
tnames[T]="4clients-1"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn Bruce
|
|
client_spawn Clark
|
|
client_print Clark "Superman!\n"
|
|
client_print Bruce "Batman!\n"
|
|
client_print Clark "Superman v Batman\n"
|
|
client_print Bruce "No: Batman v Superman\n"
|
|
client_print Clark "It would set up Super Friends"
|
|
client_spawn Lois
|
|
client_print Lois "Gentlemen"
|
|
client_print Clark "Lois, what's up\n"
|
|
client_print Bruce "I am the night!\n"
|
|
client_spawn Barbara
|
|
client_print Lois "Can anyone control him"
|
|
client_print Barbara "nope\n"
|
|
client_print Clark "not me, keeps throwing green rocks at me\n"
|
|
client_print Bruce "because..."
|
|
client_print Barbara "no no no...\n"
|
|
client_print Bruce "I'M BATMAN"
|
|
client_print Clark "nice"
|
|
client_print Lois "nope, nope, neeey-ooope"
|
|
client_close Lois
|
|
client_print Barbara "Keep antagonizing me and watch what happens\n"
|
|
client_print Clark "You end up in a wheel chair?\n"
|
|
client_print Barbara ">:-(\n"
|
|
client_print Bruce "Whoa, that's insensitive"
|
|
client_print Clark "Ummm, sorry?"
|
|
client_close Clark
|
|
client_print Barbara "And I thought you were rude"
|
|
client_print Bruce "I am rude"
|
|
client_print Bruce "I'm whatever this city needs me to be"
|
|
client_print Barbara "cripes"
|
|
client_print Bruce "Because I'm BATMAN"
|
|
client_close Bruce
|
|
client_print Barbara "I've got to find a different server"
|
|
client_close Barbara
|
|
server_close
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- Bruce JOINED -- -- Clark JOINED -- -- Lois JOINED -- -- Barbara JOINED --
|
|
-- Clark JOINED -- [Clark] : Superman! [Lois] : Gentlemen [Lois] : Can anyone control him
|
|
[Clark] : Superman! [Bruce] : Batman! [Clark] : Lois, what's up [Barbara] : nope
|
|
[Bruce] : Batman! [Clark] : Superman v Batman [Bruce] : I am the night! [Clark] : not me, keeps throwing green rocks at me
|
|
[Clark] : Superman v Batman [Bruce] : No: Batman v Superman -- Barbara JOINED -- [Bruce] : because...
|
|
[Bruce] : No: Batman v Superman [Clark] : It would set up Super Friends [Lois] : Can anyone control him [Barbara] : no no no...
|
|
[Clark] : It would set up Super Friends -- Lois JOINED -- [Barbara] : nope [Bruce] : I'M BATMAN
|
|
-- Lois JOINED -- [Lois] : Gentlemen [Clark] : not me, keeps throwing green rocks at me [Clark] : nice
|
|
[Lois] : Gentlemen [Clark] : Lois, what's up [Bruce] : because... [Lois] : nope, nope, neeey-ooope
|
|
[Clark] : Lois, what's up [Bruce] : I am the night! [Barbara] : no no no... -- Lois DEPARTED --
|
|
[Bruce] : I am the night! -- Barbara JOINED -- [Bruce] : I'M BATMAN [Barbara] : Keep antagonizing me and watch what happens
|
|
-- Barbara JOINED -- [Lois] : Can anyone control him [Clark] : nice [Clark] : You end up in a wheel chair?
|
|
[Lois] : Can anyone control him [Barbara] : nope [Lois] : nope, nope, neeey-ooope [Barbara] : >:-(
|
|
[Barbara] : nope [Clark] : not me, keeps throwing green rocks at me Lois>> [Bruce] : Whoa, that's insensitive
|
|
[Clark] : not me, keeps throwing green rocks at me [Bruce] : because... [Clark] : Ummm, sorry?
|
|
[Bruce] : because... [Barbara] : no no no... -- Clark DEPARTED --
|
|
[Barbara] : no no no... [Bruce] : I'M BATMAN [Barbara] : And I thought you were rude
|
|
[Bruce] : I'M BATMAN [Clark] : nice [Bruce] : I am rude
|
|
[Clark] : nice [Lois] : nope, nope, neeey-ooope [Bruce] : I'm whatever this city needs me to be
|
|
[Lois] : nope, nope, neeey-ooope -- Lois DEPARTED -- [Barbara] : cripes
|
|
-- Lois DEPARTED -- [Barbara] : Keep antagonizing me and watch what happens [Bruce] : Because I'm BATMAN
|
|
[Barbara] : Keep antagonizing me and watch what happens [Clark] : You end up in a wheel chair? -- Bruce DEPARTED --
|
|
[Clark] : You end up in a wheel chair? [Barbara] : >:-( [Barbara] : I've got to find a different server
|
|
[Barbara] : >:-( [Bruce] : Whoa, that's insensitive Barbara>>
|
|
[Bruce] : Whoa, that's insensitive [Clark] : Ummm, sorry?
|
|
[Clark] : Ummm, sorry? Clark>>
|
|
-- Clark DEPARTED --
|
|
[Barbara] : And I thought you were rude
|
|
[Bruce] : I am rude
|
|
[Bruce] : I'm whatever this city needs me to be
|
|
[Barbara] : cripes
|
|
[Bruce] : Because I'm BATMAN
|
|
Bruce>>
|
|
EOF
|
|
|
|
|
|
# Shutdown message from server
|
|
((T++))
|
|
tnames[T]="shutdown-1"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn Clark
|
|
tick
|
|
server_close
|
|
client_close Clark
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- Clark JOINED --
|
|
!!! server is shutting down !!!
|
|
Clark>>
|
|
EOF
|
|
|
|
# Shutdown message from server
|
|
((T++))
|
|
tnames[T]="shutdown-2"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn Clark
|
|
client_spawn Bruce
|
|
client_spawn Lois
|
|
server_close
|
|
client_close Bruce
|
|
client_close Clark
|
|
client_close Lois
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- Clark JOINED -- -- Bruce JOINED -- -- Lois JOINED --
|
|
-- Bruce JOINED -- -- Lois JOINED -- !!! server is shutting down !!!
|
|
-- Lois JOINED -- !!! server is shutting down !!! Lois>>
|
|
!!! server is shutting down !!! Bruce>>
|
|
Clark>>
|
|
EOF
|
|
|
|
|
|
# Shutdown message from server
|
|
((T++))
|
|
tnames[T]="shutdown-3"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn Clark
|
|
client_spawn Bruce
|
|
client_print Bruce "Batman!\n"
|
|
client_spawn Lois
|
|
client_print Clark "Superman!\n"
|
|
server_close
|
|
client_close Bruce
|
|
client_close Lois
|
|
client_close Clark
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- Clark JOINED -- -- Bruce JOINED -- -- Lois JOINED --
|
|
-- Bruce JOINED -- [Bruce] : Batman! [Clark] : Superman!
|
|
[Bruce] : Batman! -- Lois JOINED -- !!! server is shutting down !!!
|
|
-- Lois JOINED -- [Clark] : Superman! Lois>>
|
|
[Clark] : Superman! !!! server is shutting down !!!
|
|
!!! server is shutting down !!! Bruce>>
|
|
Clark>>
|
|
EOF
|
|
|
|
# Many clients messages
|
|
((T++))
|
|
tnames[T]="stress-1"
|
|
read -r -d '' setup[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' actions[$T] <<"EOF"
|
|
server_spawn
|
|
client_spawn A
|
|
client_spawn B
|
|
client_spawn C
|
|
client_print C "1\n"
|
|
client_print B "2\n"
|
|
client_print B "3\n"
|
|
client_print A "4\n"
|
|
client_spawn D
|
|
client_spawn E
|
|
client_print A "5\n"
|
|
client_print D "6\n"
|
|
client_print E "7\n"
|
|
client_print C "8\n"
|
|
client_spawn F
|
|
client_spawn G
|
|
client_spawn H
|
|
client_print A "9\n"
|
|
client_print D "10\n"
|
|
client_print E "11\n"
|
|
client_print C "12\n"
|
|
client_print B "13\n"
|
|
client_close C
|
|
client_print F "14\n"
|
|
client_print G "15\n"
|
|
client_print D "16\n"
|
|
client_print E "17\n"
|
|
client_print B "18\n"
|
|
client_close D
|
|
client_print F "19\n"
|
|
client_print F "20\n"
|
|
client_print E "21\n"
|
|
client_print A "22\n"
|
|
client_close G
|
|
client_print B "23\n"
|
|
client_close A
|
|
client_close B
|
|
client_print F "24\n"
|
|
client_close E
|
|
client_close F
|
|
client_print H "25\n"
|
|
client_close H
|
|
server_close
|
|
EOF
|
|
read -r -d '' teardown[$T] <<"EOF"
|
|
EOF
|
|
read -r -d '' expect_outs[$T] <<"EOF"
|
|
-- A JOINED -- -- B JOINED -- -- C JOINED -- -- D JOINED -- -- E JOINED -- -- F JOINED -- -- G JOINED -- -- H JOINED --
|
|
-- B JOINED -- -- C JOINED -- [C] : 1 -- E JOINED -- [A] : 5 -- G JOINED -- -- H JOINED -- [A] : 9
|
|
-- C JOINED -- [C] : 1 [B] : 2 [A] : 5 [D] : 6 -- H JOINED -- [A] : 9 [D] : 10
|
|
[C] : 1 [B] : 2 [B] : 3 [D] : 6 [E] : 7 [A] : 9 [D] : 10 [E] : 11
|
|
[B] : 2 [B] : 3 [A] : 4 [E] : 7 [C] : 8 [D] : 10 [E] : 11 [C] : 12
|
|
[B] : 3 [A] : 4 -- D JOINED -- [C] : 8 -- F JOINED -- [E] : 11 [C] : 12 [B] : 13
|
|
[A] : 4 -- D JOINED -- -- E JOINED -- -- F JOINED -- -- G JOINED -- [C] : 12 [B] : 13 -- C DEPARTED --
|
|
-- D JOINED -- -- E JOINED -- [A] : 5 -- G JOINED -- -- H JOINED -- [B] : 13 -- C DEPARTED -- [F] : 14
|
|
-- E JOINED -- [A] : 5 [D] : 6 -- H JOINED -- [A] : 9 -- C DEPARTED -- [F] : 14 [G] : 15
|
|
[A] : 5 [D] : 6 [E] : 7 [A] : 9 [D] : 10 [F] : 14 [G] : 15 [D] : 16
|
|
[D] : 6 [E] : 7 [C] : 8 [D] : 10 [E] : 11 [G] : 15 [D] : 16 [E] : 17
|
|
[E] : 7 [C] : 8 -- F JOINED -- [E] : 11 [C] : 12 [D] : 16 [E] : 17 [B] : 18
|
|
[C] : 8 -- F JOINED -- -- G JOINED -- [C] : 12 [B] : 13 [E] : 17 [B] : 18 -- D DEPARTED --
|
|
-- F JOINED -- -- G JOINED -- -- H JOINED -- [B] : 13 -- C DEPARTED -- [B] : 18 -- D DEPARTED -- [F] : 19
|
|
-- G JOINED -- -- H JOINED -- [A] : 9 -- C DEPARTED -- [F] : 14 -- D DEPARTED -- [F] : 19 [F] : 20
|
|
-- H JOINED -- [A] : 9 [D] : 10 [F] : 14 [G] : 15 [F] : 19 [F] : 20 [E] : 21
|
|
[A] : 9 [D] : 10 [E] : 11 [G] : 15 [D] : 16 [F] : 20 [E] : 21 [A] : 22
|
|
[D] : 10 [E] : 11 [C] : 12 [D] : 16 [E] : 17 [E] : 21 [A] : 22 -- G DEPARTED --
|
|
[E] : 11 [C] : 12 [B] : 13 [E] : 17 [B] : 18 [A] : 22 G>> [B] : 23
|
|
[C] : 12 [B] : 13 C>> [B] : 18 -- D DEPARTED -- -- G DEPARTED -- -- A DEPARTED --
|
|
[B] : 13 -- C DEPARTED -- D>> [F] : 19 [B] : 23 -- B DEPARTED --
|
|
-- C DEPARTED -- [F] : 14 [F] : 20 -- A DEPARTED -- [F] : 24
|
|
[F] : 14 [G] : 15 [E] : 21 -- B DEPARTED -- -- E DEPARTED --
|
|
[G] : 15 [D] : 16 [A] : 22 [F] : 24 -- F DEPARTED --
|
|
[D] : 16 [E] : 17 -- G DEPARTED -- -- E DEPARTED -- [H] : 25
|
|
[E] : 17 [B] : 18 [B] : 23 F>> H>>
|
|
[B] : 18 -- D DEPARTED -- -- A DEPARTED --
|
|
-- D DEPARTED -- [F] : 19 -- B DEPARTED --
|
|
[F] : 19 [F] : 20 [F] : 24
|
|
[F] : 20 [E] : 21 E>>
|
|
[E] : 21 [A] : 22
|
|
[A] : 22 -- G DEPARTED --
|
|
-- G DEPARTED -- [B] : 23
|
|
[B] : 23 -- A DEPARTED --
|
|
A>> B>>
|
|
EOF
|