serval-dna/testdefs_meshms.sh
Andrew Bettison d5b96b9931 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'.
2015-05-25 16:46:43 +09:30

112 lines
3.4 KiB
Bash

# Common definitions for MeshMS test suites.
# Copyright 2014 Serval Project Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# Create a file that contains no blank lines.
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?}"
local sid2="${2?}"
local symbols="${3?}"
shift 3
local texts=("$@")
local sent_since_ack=0
local i n size msize
local size=0
for ((i = 0; i < ${#symbols}; ++i)); do
local sym="${symbols:$i:1}"
let size+=379
let msize=size%1021
let n=NMESSAGE++
local text="${texts[$i]}"
case $sym in
'>'|'<')
if [ -n "$text" ]; then
TEXT[$n]="$text"
else
TEXT[$n]="$(meshms_create_message "message$n" $msize)"
fi
;;
esac
case $sym in
'>')
MESSAGE[$n]=">"
meshms_send_message $sid1 $sid2 "${TEXT[$n]}"
let ++sent_since_ack
let ++NSENT
;;
'<')
MESSAGE[$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)"
meshms_send_messages $sid2 $sid1
let ++NACK
;;
*)
error "invalid message symbol '$sym' (at position $i)"
;;
esac
done
}