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'.
This commit is contained in:
Andrew Bettison 2015-05-25 16:02:26 +09:30
parent 9c5cac6565
commit d5b96b9931
4 changed files with 54 additions and 6 deletions

View File

@ -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
}

View File

@ -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
;;
*)

View File

@ -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"

View File

@ -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 \