mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-04-08 19:44:17 +00:00
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:
parent
9c5cac6565
commit
d5b96b9931
@ -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
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
;;
|
||||
*)
|
||||
|
@ -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"
|
||||
|
@ -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 \
|
||||
|
Loading…
x
Reference in New Issue
Block a user