From 206aa936c071679c85e4e1fdefdadf9765c113ec Mon Sep 17 00:00:00 2001
From: Andrew Bettison <andrew@servalproject.org>
Date: Wed, 30 Apr 2014 17:21:58 +0930
Subject: [PATCH] Refactor 'vomp' test fifo handling

Use new execute --stdout-file=PATH test framework feature
Remove unnecessary shell variable indirection
---
 monitor-client.c |   2 +-
 tests/vomp       | 206 +++++++++++++++++++++++------------------------
 2 files changed, 104 insertions(+), 104 deletions(-)

diff --git a/monitor-client.c b/monitor-client.c
index 6aa27a93..76c89478 100644
--- a/monitor-client.c
+++ b/monitor-client.c
@@ -164,7 +164,7 @@ int monitor_client_read(int fd, struct monitor_state *res, struct monitor_comman
     WHYF_perror("read(%d, %p, %zd)", fd, res->buffer + oldOffset, MONITOR_CLIENT_BUFFER_SIZE - oldOffset);
     return -1;
   } else if (bytesRead == 0) {
-    WHYF("read(%d, %p, %zd) returned %zd", fd, res->buffer + oldOffset, MONITOR_CLIENT_BUFFER_SIZE - oldOffset, (size_t)bytesRead);
+    WARNF("read(%d, %p, %zd) returned %zd", fd, res->buffer + oldOffset, MONITOR_CLIENT_BUFFER_SIZE - oldOffset, (size_t)bytesRead);
     return -1;
   }
   
diff --git a/tests/vomp b/tests/vomp
index cad6a8a0..0e576b1a 100755
--- a/tests/vomp
+++ b/tests/vomp
@@ -48,100 +48,100 @@ configure_servald_server() {
 }
 
 vomp_console() {
-# Note, this might block and stall the test, but I need to predict where stdout is going to be
-# perhaps add an argument to execute?
-   $servald console <&8 >"$1"
+   local C="$instance_name"
+   mkfifo "${C}_IN"
+   exec 8<>"${C}_IN" # prevent fifo from blocking
+   executeOk_servald --stdout-file="${C}_OUT" console <"${C}_IN"
+   tfw_cat --stdout --stderr
 }
 
-send_cmd() {
-   tfw_log "sending $1 to $2"
-# Note, this might block and stall the test...
-   echo "$1" >> "$2"
+fork_vomp_console() {
+   local C="$instance_name"
+   fork %console$C vomp_console
 }
 
-init_console() {
-  eval ${instance_name}_IN="$PWD/${instance_name}_IN"
-  eval ${instance_name}_OUT="$PWD/${instance_name}_OUT"
-  mkfifo "$PWD/${instance_name}_IN"
-  exec 8<>"$PWD/${instance_name}_IN"
-  fork vomp_console "$PWD/${instance_name}_OUT"
-  exec 8>&-
+send_to_vomp_console() {
+   local C="$1"
+   local cmd="$2"
+   tfw_log "send '$cmd' to vomp console $C"
+   assert_fork_is_running %console$C
+   echo "$cmd" >>"${C}_IN"
 }
 
 doc_nophone="Attempt to dial a node with no phone"
 test_nophone() {
    set_instance +A
-   init_console
-   send_cmd "call $SIDB $DIDA $DIDB" "$A_IN"
-   wait_until --timeout=10 grep "^Call ended$" "$A_OUT"
-   send_cmd "quit" "$A_IN"
+   fork_vomp_console
+   send_to_vomp_console A "call $SIDB $DIDA $DIDB"
+   wait_until --timeout=10 grep "^Call ended$" A_OUT
+   send_to_vomp_console A "quit"
    fork_wait_all
-   tfw_cat "$A_OUT"
+   tfw_cat A_OUT
 }
 
 doc_hangup="Hangup instead of answering"
 test_hangup() {
-   foreach_instance +A +B init_console
-   send_cmd "call $SIDA $DIDB $DIDA" "$B_IN"
-   wait_until --timeout=10 grep "^Dialling$" "$B_OUT"
-   wait_until --timeout=10 grep "^Incoming call" "$A_OUT"
-   wait_until --timeout=10 grep "^Codec list" "$A_OUT"
-   wait_until --timeout=10 grep "^Codec list" "$B_OUT"
-   wait_until --timeout=10 grep "^Ringing$" "$B_OUT"
-   send_cmd "hangup" "$A_IN"
-   wait_until --timeout=10 grep "^Call ended$" "$A_OUT"
-   wait_until --timeout=10 grep "^Call ended$" "$B_OUT"
-   send_cmd "quit" "$A_IN"
-   send_cmd "quit" "$B_IN"
+   foreach_instance +A +B fork_vomp_console
+   send_to_vomp_console B "call $SIDA $DIDB $DIDA"
+   wait_until --timeout=10 grep "^Dialling$" B_OUT
+   wait_until --timeout=10 grep "^Incoming call" A_OUT
+   wait_until --timeout=10 grep "^Codec list" A_OUT
+   wait_until --timeout=10 grep "^Codec list" B_OUT
+   wait_until --timeout=10 grep "^Ringing$" B_OUT
+   send_to_vomp_console A "hangup"
+   wait_until --timeout=10 grep "^Call ended$" A_OUT
+   wait_until --timeout=10 grep "^Call ended$" B_OUT
+   send_to_vomp_console A "quit"
+   send_to_vomp_console B "quit"
    fork_wait_all
-   tfw_cat "$A_OUT" "$B_OUT"
+   tfw_cat A_OUT B_OUT
 }
 
 doc_timeout="Call timeout"
 test_timeout() {
-   foreach_instance +A +B init_console
-   send_cmd "call $SIDA $DIDB $DIDA" "$B_IN"
-   wait_until --timeout=10 grep "^Dialling$" "$B_OUT"
-   wait_until --timeout=10 grep "^Incoming call" "$A_OUT"
-   wait_until --timeout=10 grep "^Codec list" "$A_OUT"
-   wait_until --timeout=10 grep "^Codec list" "$B_OUT"
-   wait_until --timeout=10 grep "^Ringing$" "$B_OUT"
-   send_cmd "answer" "$A_IN"
-   wait_until --timeout=10 grep "^Picked up$" "$B_OUT"
-   send_cmd "say hello" "$A_IN"
-   send_cmd "say hi there" "$B_IN"
-   wait_until --timeout=10 grep "^hello$" "$B_OUT"
-   wait_until --timeout=10 grep "^hi there$" "$A_OUT"
+   foreach_instance +A +B fork_vomp_console
+   send_to_vomp_console B "call $SIDA $DIDB $DIDA"
+   wait_until --timeout=10 grep "^Dialling$" B_OUT
+   wait_until --timeout=10 grep "^Incoming call" A_OUT
+   wait_until --timeout=10 grep "^Codec list" A_OUT
+   wait_until --timeout=10 grep "^Codec list" B_OUT
+   wait_until --timeout=10 grep "^Ringing$" B_OUT
+   send_to_vomp_console A "answer"
+   wait_until --timeout=10 grep "^Picked up$" B_OUT
+   send_to_vomp_console A "say hello"
+   send_to_vomp_console B "say hi there"
+   wait_until --timeout=10 grep "^hello$" B_OUT
+   wait_until --timeout=10 grep "^hi there$" A_OUT
    stop_servald_server +B
 # B's console should just quit
-   wait_until --timeout=10 --timeout=20 grep "^Call ended$" "$A_OUT"
-   send_cmd "quit" "$A_IN"
+   wait_until --timeout=10 --timeout=20 grep "^Call ended$" A_OUT
+   send_to_vomp_console A "quit"
    fork_wait_all
-   tfw_cat "$A_OUT" "$B_OUT"
+   tfw_cat A_OUT B_OUT
 }
 
 doc_call_lifecycle="Successful call lifecycle"
 test_call_lifecycle() {
-   foreach_instance +A +B init_console
-   send_cmd "call $SIDA $DIDB $DIDA" "$B_IN"
-   wait_until --timeout=10 grep "^Dialling$" "$B_OUT"
-   wait_until --timeout=10 grep "^Incoming call" "$A_OUT"
-   wait_until --timeout=10 grep "^Codec list" "$A_OUT"
-   wait_until --timeout=10 grep "^Codec list" "$B_OUT"
-   wait_until --timeout=10 grep "^Ringing$" "$B_OUT"
-   send_cmd "answer" "$A_IN"
-   wait_until --timeout=10 grep "^Picked up$" "$B_OUT"
-   send_cmd "say hello" "$A_IN"
-   send_cmd "say hi there" "$B_IN"
-   wait_until --timeout=10 grep "^hello$" "$B_OUT"
-   wait_until --timeout=10 grep "^hi there$" "$A_OUT"
-   send_cmd "hangup" "$B_IN"
-   wait_until --timeout=10 grep "^Call ended$" "$A_OUT"
-   wait_until --timeout=10 grep "^Call ended$" "$B_OUT"
-   send_cmd "quit" "$A_IN"
-   send_cmd "quit" "$B_IN"
+   foreach_instance +A +B fork_vomp_console
+   send_to_vomp_console B "call $SIDA $DIDB $DIDA"
+   wait_until --timeout=10 grep "^Dialling$" B_OUT
+   wait_until --timeout=10 grep "^Incoming call" A_OUT
+   wait_until --timeout=10 grep "^Codec list" A_OUT
+   wait_until --timeout=10 grep "^Codec list" B_OUT
+   wait_until --timeout=10 grep "^Ringing$" B_OUT
+   send_to_vomp_console A "answer"
+   wait_until --timeout=10 grep "^Picked up$" B_OUT
+   send_to_vomp_console A "say hello"
+   send_to_vomp_console B "say hi there"
+   wait_until --timeout=10 grep "^hello$" B_OUT
+   wait_until --timeout=10 grep "^hi there$" A_OUT
+   send_to_vomp_console B "hangup"
+   wait_until --timeout=10 grep "^Call ended$" A_OUT
+   wait_until --timeout=10 grep "^Call ended$" B_OUT
+   send_to_vomp_console A "quit"
+   send_to_vomp_console B "quit"
    fork_wait_all
-   tfw_cat "$A_OUT" "$B_OUT"
+   tfw_cat A_OUT B_OUT
 }
 
 doc_concurrent="Multiple calls at once"
@@ -151,43 +151,43 @@ setup_concurrent() {
    start_servald_instances +A +B +C +D +E
 }
 test_concurrent() {
-   foreach_instance +A +B +C +D +E init_console
-   send_cmd "call $SIDB $DIDA $DIDB" "$A_IN"
-   send_cmd "call $SIDC $DIDA $DIDC" "$A_IN"
-   send_cmd "call $SIDA $DIDD $DIDA" "$D_IN"
-   send_cmd "call $SIDA $DIDE $DIDA" "$E_IN"
-   wait_until --timeout=10 grep "^Incoming call" "$A_OUT"
-   wait_until --timeout=10 grep "^Incoming call" "$B_OUT"
-   wait_until --timeout=10 grep "^Incoming call" "$C_OUT"
-   wait_until --timeout=10 grep "^Codec list" "$A_OUT"
-   wait_until --timeout=10 grep "^Codec list" "$B_OUT"
-   wait_until --timeout=10 grep "^Codec list" "$C_OUT"
-   wait_until --timeout=10 grep "^Codec list" "$D_OUT"
-   wait_until --timeout=10 grep "^Codec list" "$E_OUT"
-   wait_until --timeout=10 grep "^Ringing$" "$A_OUT"
-   wait_until --timeout=10 grep "^Ringing$" "$D_OUT"
-   wait_until --timeout=10 grep "^Ringing$" "$E_OUT"
-   send_cmd "answer" "$A_IN"
-   send_cmd "answer" "$A_IN"
-   send_cmd "answer" "$B_IN"
-   send_cmd "hangup" "$C_IN"
-   wait_until --timeout=10 grep "^Picked up$" "$A_OUT"
-   wait_until --timeout=10 grep "^Picked up$" "$D_OUT"
-   wait_until --timeout=10 grep "^Picked up$" "$E_OUT"
-   wait_until --timeout=10 grep "^Call ended$" "$C_OUT"
-   send_cmd "hangup" "$B_IN"
-   send_cmd "hangup" "$D_IN"
-   send_cmd "hangup" "$E_IN"
-   wait_until --timeout=10 grep "^Call ended$" "$B_OUT"
-   wait_until --timeout=10 grep "^Call ended$" "$D_OUT"
-   wait_until --timeout=10 grep "^Call ended$" "$E_OUT"
-   send_cmd "quit" "$A_IN"
-   send_cmd "quit" "$B_IN"
-   send_cmd "quit" "$C_IN"
-   send_cmd "quit" "$D_IN"
-   send_cmd "quit" "$E_IN"
+   foreach_instance +A +B +C +D +E fork_vomp_console
+   send_to_vomp_console A "call $SIDB $DIDA $DIDB"
+   send_to_vomp_console A "call $SIDC $DIDA $DIDC"
+   send_to_vomp_console D "call $SIDA $DIDD $DIDA"
+   send_to_vomp_console E "call $SIDA $DIDE $DIDA"
+   wait_until --timeout=10 grep "^Incoming call" A_OUT
+   wait_until --timeout=10 grep "^Incoming call" B_OUT
+   wait_until --timeout=10 grep "^Incoming call" C_OUT
+   wait_until --timeout=10 grep "^Codec list" A_OUT
+   wait_until --timeout=10 grep "^Codec list" B_OUT
+   wait_until --timeout=10 grep "^Codec list" C_OUT
+   wait_until --timeout=10 grep "^Codec list" D_OUT
+   wait_until --timeout=10 grep "^Codec list" E_OUT
+   wait_until --timeout=10 grep "^Ringing$" A_OUT
+   wait_until --timeout=10 grep "^Ringing$" D_OUT
+   wait_until --timeout=10 grep "^Ringing$" E_OUT
+   send_to_vomp_console A "answer"
+   send_to_vomp_console A "answer"
+   send_to_vomp_console B "answer"
+   send_to_vomp_console C "hangup"
+   wait_until --timeout=10 grep "^Picked up$" A_OUT
+   wait_until --timeout=10 grep "^Picked up$" D_OUT
+   wait_until --timeout=10 grep "^Picked up$" E_OUT
+   wait_until --timeout=10 grep "^Call ended$" C_OUT
+   send_to_vomp_console B "hangup"
+   send_to_vomp_console D "hangup"
+   send_to_vomp_console E "hangup"
+   wait_until --timeout=10 grep "^Call ended$" B_OUT
+   wait_until --timeout=10 grep "^Call ended$" D_OUT
+   wait_until --timeout=10 grep "^Call ended$" E_OUT
+   send_to_vomp_console A "quit"
+   send_to_vomp_console B "quit"
+   send_to_vomp_console C "quit"
+   send_to_vomp_console D "quit"
+   send_to_vomp_console E "quit"
    fork_wait_all
-   tfw_cat "$A_OUT" "$B_OUT" "$C_OUT" "$D_OUT" "$E_OUT"
+   tfw_cat A_OUT B_OUT C_OUT D_OUT E_OUT
 }
 
 runTests "$@"