#!/bin/bash # Tests for MeshMS Messaging # # Copyright 2012 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. source "${0%/*}/../testframework.sh" source "${0%/*}/../testdefs.sh" source "${0%/*}/../testdefs_rhizome.sh" teardown() { stop_all_servald_servers kill_all_servald_processes assert_no_servald_processes } doc_MessageDelivery="Send messages and ack them in a 2 party conversation" setup_MessageDelivery() { setup_servald set_instance +A create_identities 2 executeOk_servald config \ set debug.meshms on \ set log.console.level debug } test_MessageDelivery() { # 1. empty list executeOk_servald meshms list messages $SIDA1 $SIDA2 assertStdoutIs --stdout --line=1 -e '5\n' assertStdoutIs --stdout --line=2 -e '_id:offset:sender:status:message\n' assertStdoutLineCount '==' 2 # 2. create a manifest with a single message and list it back executeOk_servald meshms send message $SIDA1 $SIDA2 "Hi" executeOk_servald meshms list messages $SIDA1 $SIDA2 assertStdoutGrep --stdout --matches=1 "::Hi\$" assertStdoutLineCount '==' 3 # 3. append a second message and list them both executeOk_servald meshms send message $SIDA1 $SIDA2 "How are you" executeOk_servald meshms list messages $SIDA1 $SIDA2 tfw_cat --stdout assertStdoutGrep --stdout --matches=1 "::How are you\$" assertStdoutGrep --stdout --matches=1 "::Hi\$" assertStdoutLineCount '==' 4 # 4. list the messages from the receivers point of view (which ACKs them) executeOk_servald meshms list messages $SIDA2 $SIDA1 tfw_cat --stdout --stderr assertStdoutGrep --stdout --matches=1 ":How are you\$" assertStdoutGrep --stdout --matches=1 ":Hi\$" assertStdoutLineCount '==' 4 # 5. list messages from the senders point of view after they have been delivered executeOk_servald meshms list messages $SIDA1 $SIDA2 tfw_cat --stdout --stderr assertStdoutGrep --stdout --matches=1 ":delivered:How are you\$" assertStdoutGrep --stdout --matches=1 ":delivered:Hi\$" assertStdoutLineCount '==' 4 } doc_MessageThreading="Messages sent at the same time, thread differently" setup_MessageThreading() { setup_servald foreach_instance +A +B create_single_identity set_instance +A executeOk_servald meshms send message $SIDA $SIDB "Hello can you hear me" executeOk_servald meshms send message $SIDA $SIDB "Still waiting" set_instance +B executeOk_servald meshms send message $SIDB $SIDA "Help Im trapped in a test case factory" executeOk_servald meshms send message $SIDB $SIDA "Never mind" start_servald_instances +A +B } test_MessageThreading() { #TODO wait for bundle to arrive sleep 3 set_instance +B executeOk_servald meshms list messages $SIDB $SIDA tfw_cat --stdout assertStdoutGrep --stdout --matches=1 "^0:24:$SIDA:unread:Still waiting\$" assertStdoutGrep --stdout --matches=1 "^1:0:$SIDA:unread:Hello can you hear me\$" assertStdoutGrep --stdout --matches=1 "^2:41:$SIDB::Never mind\$" assertStdoutGrep --stdout --matches=1 "^3:0:$SIDB::Help Im trapped in a test case factory\$" assertStdoutLineCount '==' 6 #TODO wait for bundle to arrive sleep 3 set_instance +A executeOk_servald meshms list messages $SIDA $SIDB tfw_cat --stdout assertStdoutGrep --stdout --matches=1 "^0:41:$SIDB:unread:Never mind\$" assertStdoutGrep --stdout --matches=1 "^1:0:$SIDB:unread:Help Im trapped in a test case factory\$" assertStdoutGrep --stdout --matches=1 "^2:24:$SIDA:delivered:Still waiting\$" assertStdoutGrep --stdout --matches=1 "^3:0:$SIDA:delivered:Hello can you hear me\$" assertStdoutLineCount '==' 6 } doc_listConversations="List multiple conversations, with different numbers of messages" setup_listConversations() { setup_servald set_instance +A create_identities 5 executeOk_servald config \ set debug.rhizome on \ set debug.meshms on \ set log.console.level debug #cheating, adding fake message logs to the same servald executeOk_servald meshms send message $SIDA1 $SIDA2 "Message1" executeOk_servald meshms send message $SIDA3 $SIDA1 "Message2" executeOk_servald meshms send message $SIDA1 $SIDA4 "Message3" executeOk_servald meshms send message $SIDA4 $SIDA1 "Message4" } test_listConversations() { executeOk_servald meshms list conversations $SIDA1 tfw_cat --stdout assertStdoutIs --stderr --line=1 -e '3\n' assertStdoutIs --stderr --line=2 -e 'sid:read:delivered\n' assertStdoutGrep --stderr --matches=1 "^$SIDA2::delivered\$" assertStdoutGrep --stderr --matches=1 "^$SIDA3:unread:delivered\$" assertStdoutGrep --stderr --matches=1 "^$SIDA4:unread:delivered\$" assertStdoutLineCount '==' 5 executeOk_servald meshms list conversations $SIDA1 1 assertStdoutLineCount '==' 4 executeOk_servald meshms list conversations $SIDA1 1 1 assertStdoutLineCount '==' 3 } runTests "$@"