mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-01-14 00:39:53 +00:00
87133cb2de
The 'rhizomeprotocol' tests now use create_single_identity() in fixtures (which tests the 'keyring list' command). Use foreach_instance() function in various places, and replace functions that used to loop over instances with functions that work on the current instance.
195 lines
5.7 KiB
Bash
Executable File
195 lines
5.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Tests for Serval rhizome protocol.
|
|
#
|
|
# Copyright 2012 Paul Gardner-Stephen
|
|
#
|
|
# 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"
|
|
|
|
shopt -s extglob
|
|
|
|
teardown() {
|
|
stop_all_servald_servers
|
|
kill_all_servald_processes
|
|
assert_no_servald_processes
|
|
}
|
|
|
|
setup_rhizome() {
|
|
foreach_instance +A +B create_single_identity
|
|
set_instance +B
|
|
}
|
|
|
|
# Called by start_servald_instances for each instance.
|
|
configure_servald_server() {
|
|
executeOk_servald config set log.show_pid on
|
|
executeOk_servald config set log.show_time on
|
|
executeOk_servald config set debug.rhizome on
|
|
executeOk_servald config set debug.rhizometx on
|
|
executeOk_servald config set debug.rhizomerx on
|
|
executeOk_servald config set server.respawn_on_signal off
|
|
executeOk_servald config set mdp.wifi.tick_ms 100
|
|
executeOk_servald config set mdp.selfannounce.ticks_per_full_address 1
|
|
executeOk_servald config set rhizome.fetch_interval_ms 100
|
|
}
|
|
|
|
# Predicate function:
|
|
# - return true if the file bundle identified by $BID and $VERSION has been
|
|
# received by all the given instances
|
|
# - does this by examining the server log files of the respective instances
|
|
# for tell-tale INFO messages
|
|
bundle_received_by() {
|
|
local I
|
|
for I; do
|
|
logvar="LOG${I#+}"
|
|
grep "RHIZOME ADD MANIFEST service=file bid=$BID version=$VERSION" "${!logvar}" || return 1
|
|
done
|
|
return 0
|
|
}
|
|
|
|
setup_common() {
|
|
setup_servald
|
|
setup_rhizome
|
|
assert_no_servald_processes
|
|
}
|
|
|
|
extract_manifest_vars() {
|
|
local manifest="${1?}"
|
|
extract_manifest_id BID "$manifest"
|
|
extract_manifest_version VERSION "$manifest"
|
|
extract_manifest_filesize FILESIZE "$manifest"
|
|
FILEHASH=
|
|
if [ "$FILESIZE" != '0' ]; then
|
|
extract_manifest_filehash FILEHASH "$manifest"
|
|
fi
|
|
}
|
|
|
|
add_file() {
|
|
local name="$1"
|
|
[ -e "$name" ] || echo 'File $name' >"$name"
|
|
local sidvar="SID$instance_name"
|
|
executeOk_servald rhizome add file "${!sidvar}" '' "$name" "$name.manifest"
|
|
executeOk_servald rhizome list ''
|
|
assert_rhizome_list "$name"
|
|
extract_manifest_vars "$name.manifest"
|
|
}
|
|
|
|
update_file() {
|
|
local orig_name="$1"
|
|
local new_name="$2"
|
|
[ -e "$new_name" ] || echo 'File $new_name' >"$new_name"
|
|
local sidvar="SID$instance_name"
|
|
[ "$new_name" != "$orig_name" ] && cp "$orig_name.manifest" "$new_name.manifest"
|
|
sed -i -e '/^date=/d;/^filehash=/d;/^filesize=/d;/^version=/d;/^name=/d' "$new_name.manifest"
|
|
executeOk_servald rhizome add file "${!sidvar}" '' "$new_name" "$new_name.manifest"
|
|
executeOk_servald rhizome list ''
|
|
assert_rhizome_list "$new_name"
|
|
extract_manifest_vars "$new_name.manifest"
|
|
}
|
|
|
|
doc_FileTransfer="New bundle and update transfer to one node"
|
|
setup_FileTransfer() {
|
|
setup_common
|
|
set_instance +A
|
|
add_file file1
|
|
start_servald_instances +A +B
|
|
foreach_instance +A assert_peers_are_instances +B
|
|
foreach_instance +B assert_peers_are_instances +A
|
|
}
|
|
test_FileTransfer() {
|
|
wait_until bundle_received_by +B
|
|
set_instance +B
|
|
assert_received file1
|
|
set_instance +A
|
|
update_file file1 file2
|
|
set_instance +B
|
|
wait_until bundle_received_by +B
|
|
assert_received file2
|
|
}
|
|
|
|
doc_FileTransferBig="Big new bundle transfers to one node"
|
|
setup_FileTransferBig() {
|
|
setup_common
|
|
set_instance +A
|
|
dd if=/dev/urandom of=file1 bs=1k count=1k 2>&1
|
|
echo x >>file1
|
|
ls -l file1
|
|
add_file file1
|
|
start_servald_instances +A +B
|
|
foreach_instance +A assert_peers_are_instances +B
|
|
foreach_instance +B assert_peers_are_instances +A
|
|
}
|
|
test_FileTransferBig() {
|
|
wait_until bundle_received_by +B
|
|
set_instance +B
|
|
assert_received file1
|
|
}
|
|
|
|
assert_received() {
|
|
local name="${1?}"
|
|
executeOk_servald rhizome list ''
|
|
assert_rhizome_list "$name!"
|
|
local _hash
|
|
if [ -s "$name" ]; then
|
|
extract_manifest_filehash _hash "$name.manifest"
|
|
executeOk_servald rhizome extract file "$_hash" extracted
|
|
assert cmp "$name" extracted
|
|
fi
|
|
}
|
|
|
|
doc_FileTransferMulti="New bundle transfers to four nodes"
|
|
setup_FileTransferMulti() {
|
|
setup_common
|
|
set_instance +A
|
|
add_file file1
|
|
start_servald_instances +A +B +C +D +E
|
|
foreach_instance +A assert_peers_are_instances +B +C +D +E
|
|
foreach_instance +B assert_peers_are_instances +A +C +D +E
|
|
foreach_instance +C assert_peers_are_instances +A +B +D +E
|
|
foreach_instance +D assert_peers_are_instances +A +B +C +E
|
|
}
|
|
test_FileTransferMulti() {
|
|
wait_until bundle_received_by +B +C +D +E
|
|
local I
|
|
for I in +B +C +D +E; do
|
|
set_instance $I
|
|
assert_received file1
|
|
done
|
|
}
|
|
|
|
doc_FileTransferDelete="Payload deletion transfers to one node"
|
|
setup_FileTransferDelete() {
|
|
setup_common
|
|
set_instance +A
|
|
add_file file1
|
|
start_servald_instances +A +B
|
|
foreach_instance +A assert_peers_are_instances +B
|
|
foreach_instance +B assert_peers_are_instances +A
|
|
wait_until bundle_received_by +B
|
|
set_instance +A
|
|
>file1_2
|
|
update_file file1 file1_2
|
|
}
|
|
test_FileTransferDelete() {
|
|
wait_until bundle_received_by +B
|
|
set_instance +B
|
|
assert_received file1_2
|
|
}
|
|
|
|
runTests "$@"
|