mirror of
https://github.com/servalproject/serval-dna.git
synced 2024-12-24 07:16:43 +00:00
d5b96b9931
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'.
112 lines
3.4 KiB
Bash
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
|
|
}
|