From d5b96b993104b4dcef50d36d97e29826c495c287 Mon Sep 17 00:00:00 2001 From: Andrew Bettison Date: Mon, 25 May 2015 16:02:26 +0930 Subject: [PATCH] Fix 'meshms' and 'meshmsjava' newsince-arrival tests Failed because of a database locking storm between the three waiting newsince REST requests (which polled the database) and the concurrent 'meshms send' CLI commands. Changed to use REST requests instead of CLI for 'meshms send'. --- testdefs.sh | 5 +++-- testdefs_meshms.sh | 46 ++++++++++++++++++++++++++++++++++++++++++--- tests/meshmsjava | 6 +++++- tests/meshmsrestful | 3 +++ 4 files changed, 54 insertions(+), 6 deletions(-) diff --git a/testdefs.sh b/testdefs.sh index c5f68ef6..64768d1b 100644 --- a/testdefs.sh +++ b/testdefs.sh @@ -402,7 +402,8 @@ servald_restful_http_server_started() { # Utility function: # - fetch the daemon's HTTP server port number get_servald_http_server_port() { - push_and_set_instance $2 || return $? + local _instance="$2" + [ -z "$_instance" ] || push_and_set_instance $_instance || return $? local _var="$1" local _port=$(<"$SERVALINSTANCE_PATH/proc/http_port") assert --message="instance $instance_name HTTP server port number is known" [ -n "$_port" ] @@ -410,7 +411,7 @@ get_servald_http_server_port() { eval "$_var=\$_port" tfw_log "$_var=$_port" fi - pop_instance + [ -z "$_instance" ] || pop_instance return 0 } diff --git a/testdefs_meshms.sh b/testdefs_meshms.sh index a4298bb6..609b3b34 100644 --- a/testdefs_meshms.sh +++ b/testdefs_meshms.sh @@ -20,6 +20,46 @@ meshms_create_message() { create_file --label="$1" - $2 | sed -e '/^$/d' } +MESHMS_USE_RESTFUL=false + +meshms_use_restful() { + setup_curl 7 + MESHMS_USE_RESTFUL=true + MESHMS_RESTFUL_USER="$1" + MESHMS_RESTFUL_PASSWORD="$2" + get_servald_restful_http_server_port MESHMS_RESTFUL_PORT +} + +meshms_list_messages() { + local sid_sender=${1?} + local sid_recipient=${2?} + if $MESHMS_USE_RESTFUL; then + executeOk curl \ + --silent --fail --show-error \ + --output meshms_list_messages.json \ + --basic --user "$MESHMS_RESTFUL_USER:$MESHMS_RESTFUL_PASSWORD" \ + "http://$addr_localhost:$MESHMS_RESTFUL_PORT/restful/meshms/$sid_sender/$sid_recipient/messagelist.json" + else + executeOk_servald meshms list messages $sid_sender $sid_recipient + fi +} + +meshms_send_message() { + local sid_sender=${1?} + local sid_recipient=${2?} + local text="${3?}" + if $MESHMS_USE_RESTFUL; then + executeOk curl \ + --silent --fail --show-error \ + --output meshms_send_message.json \ + --basic --user "$MESHMS_RESTFUL_USER:$MESHMS_RESTFUL_PASSWORD" \ + --form "message=$text;type=text/plain;charset=utf-8" \ + "http://$addr_localhost:$MESHMS_RESTFUL_PORT/restful/meshms/$sid_sender/$sid_recipient/sendmessage" + else + executeOk_servald meshms send message $sid_sender $sid_recipient "$text" + fi +} + # Add a sequence of messages of varying sizes up to 1 KiB. meshms_add_messages() { local sid1="${1?}" @@ -48,19 +88,19 @@ meshms_add_messages() { case $sym in '>') MESSAGE[$n]=">" - executeOk_servald meshms send message $sid1 $sid2 "${TEXT[$n]}" + meshms_send_message $sid1 $sid2 "${TEXT[$n]}" let ++sent_since_ack let ++NSENT ;; '<') MESSAGE[$n]="<" - executeOk_servald meshms send message $sid2 $sid1 "${TEXT[$n]}" + meshms_send_message $sid2 $sid1 "${TEXT[$n]}" let ++NRECV ;; 'A') MESSAGE[$n]=ACK [ $i -ne 0 -a $sent_since_ack -eq 0 ] && error "two ACKs in a row (at position $i)" - executeOk_servald meshms list messages $sid2 $sid1 + meshms_send_messages $sid2 $sid1 let ++NACK ;; *) diff --git a/tests/meshmsjava b/tests/meshmsjava index 28739d04..fc1078b9 100755 --- a/tests/meshmsjava +++ b/tests/meshmsjava @@ -199,9 +199,13 @@ doc_MeshmsListMessagesNewSinceArrival="Java API list newly arriving MeshMS messa setup_MeshmsListMessagesNewSinceArrival() { set_extra_config() { executeOk_servald config set api.restful.newsince_timeout 360s \ - set api.restful.newsince_poll_ms 1000 + set api.restful.newsince_poll_ms 1000 \ + set api.restful.users.harry.password potter } setup + # Use REST interface to send messages, not CLI, in order to avoid a database + # locking storm + meshms_use_restful harry potter meshms_add_messages $SIDA1 $SIDA2 '><>A>' let NROWS=NSENT+NRECV+(NACK?1:0) executeJavaOk org.servalproject.test.Meshms meshms-list-messages "$SIDA1" "$SIDA2" diff --git a/tests/meshmsrestful b/tests/meshmsrestful index 9da566aa..4453463c 100755 --- a/tests/meshmsrestful +++ b/tests/meshmsrestful @@ -350,6 +350,9 @@ setup_MeshmsListMessagesNewSinceArrival() { set api.restful.newsince_poll_ms 1000 } setup + # Use REST interface to send messages, not CLI, in order to avoid a database + # locking storm + meshms_use_restful harry potter meshms_add_messages $SIDA1 $SIDA2 '><>A>' let NROWS=NSENT+NRECV+(NACK?1:0) executeOk curl \