mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-01-02 03:16:45 +00:00
95b0c028f2
Indepent configuration of show_pid, show_time and log level for each destination Update test scripts for new config options Include xprintf.c in MDP client source files (now used by log.c)
294 lines
9.8 KiB
Bash
Executable File
294 lines
9.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Tests for Serval DNA configuration operations.
|
|
#
|
|
# 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"
|
|
|
|
setup() {
|
|
setup_servald
|
|
}
|
|
|
|
assert_stderr_log() {
|
|
local -a warn_patterns=()
|
|
local -a error_patterns=()
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--warn-pattern=*) warn_patterns+=("${1#*=}"); shift;;
|
|
--error-pattern=*) error_patterns+=("${1#*=}"); shift;;
|
|
*) error "unsupported option: $1"; return;;
|
|
esac
|
|
done
|
|
assertStderrGrep \
|
|
--matches=${#error_patterns[*]} \
|
|
--message="stderr of ($executed) contains exactly ${#error_patterns[*]} error message(s)" \
|
|
'^ERROR:'
|
|
local pattern
|
|
for pattern in "${warn_patterns[@]}"; do
|
|
assertStderrGrep \
|
|
--message="stderr of ($executed) contains a warning message matching \"$pattern\"" \
|
|
"^WARN:.*$pattern"
|
|
done
|
|
for pattern in "${error_patterns[@]}"; do
|
|
assertStderrGrep \
|
|
--message="stderr of ($executed) contains an error message matching \"$pattern\"" \
|
|
"^ERROR:.*$pattern"
|
|
done
|
|
}
|
|
|
|
doc_GetCreateInstanceDir="Get creates instance directory"
|
|
setup_GetCreateInstanceDir() {
|
|
setup
|
|
assert ! [ -d "$SERVALINSTANCE_PATH" ]
|
|
}
|
|
test_GetCreateInstanceDir() {
|
|
executeOk_servald config get
|
|
assert [ -d "$SERVALINSTANCE_PATH" ]
|
|
}
|
|
|
|
doc_SetCreateInstanceDir="Set creates instance directory"
|
|
setup_SetCreateInstanceDir() {
|
|
setup
|
|
assert ! [ -d "$SERVALINSTANCE_PATH" ]
|
|
}
|
|
test_SetCreateInstanceDir() {
|
|
executeOk_servald config set debug.verbose 0
|
|
assert [ -d "$SERVALINSTANCE_PATH" ]
|
|
}
|
|
|
|
doc_GetNull="Get an unset config item"
|
|
test_GetNull() {
|
|
executeOk_servald config get debug.verbose
|
|
assertStdoutLineCount '==' 0
|
|
}
|
|
|
|
doc_SetGet="Set and get a single config item"
|
|
test_SetGet() {
|
|
executeOk_servald config set debug.verbose yes
|
|
executeOk_servald config get debug.verbose
|
|
assertStdoutLineCount '==' 1
|
|
assertStdoutGrep --stdout --stderr --matches=1 '^debug\.verbose=yes$'
|
|
}
|
|
|
|
doc_GetAll="Get all config items"
|
|
test_GetAll() {
|
|
executeOk_servald config \
|
|
set debug.verbose true \
|
|
set log.stderr.show_pid true \
|
|
set server.chdir /tmp/nothing \
|
|
set rhizome.enable no
|
|
executeOk_servald config get
|
|
assertStdoutLineCount '==' 4
|
|
assertStdoutGrep --stdout --matches=1 '^debug\.verbose=true$'
|
|
assertStdoutGrep --stdout --matches=1 '^log\.stderr\.show_pid=true$'
|
|
assertStdoutGrep --stdout --matches=1 '^server\.chdir=/tmp/nothing$'
|
|
assertStdoutGrep --stdout --matches=1 '^rhizome\.enable=no$'
|
|
}
|
|
|
|
doc_SetDelMixed="Set and del config items in single command"
|
|
test_SetDelMixed() {
|
|
executeOk_servald config \
|
|
set debug.verbose true \
|
|
set log.file.show_pid true \
|
|
set server.chdir /tmp/nothing \
|
|
set rhizome.enable no
|
|
executeOk_servald config \
|
|
set debug.verbose false \
|
|
del log.file.show_pid \
|
|
set log.file.show_time 1 \
|
|
del server.chdir \
|
|
del rhizome.enable
|
|
executeOk_servald config get
|
|
assertStdoutLineCount '==' 2
|
|
assertStdoutGrep --stdout --matches=1 '^debug\.verbose=false$'
|
|
assertStdoutGrep --stdout --matches=1 '^log\.file\.show_time=1$'
|
|
}
|
|
|
|
doc_SetTwice="Set a single config item twice"
|
|
test_SetTwice() {
|
|
executeOk_servald config set debug.verbose yes
|
|
executeOk_servald config get debug.verbose
|
|
assertStdoutLineCount '==' 1
|
|
assertStdoutGrep --stdout --stderr --matches=1 '^debug\.verbose=yes$'
|
|
executeOk_servald config set debug.verbose false
|
|
executeOk_servald config get debug.verbose
|
|
assertStdoutLineCount '==' 1
|
|
assertStdoutGrep --stdout --stderr --matches=1 '^debug\.verbose=false$'
|
|
}
|
|
|
|
doc_DelNull="Delete an unset config item"
|
|
test_DelNull() {
|
|
executeOk_servald config del debug.verbose
|
|
assertStdoutLineCount '==' 0
|
|
}
|
|
|
|
doc_Del="Delete single config item"
|
|
test_Del() {
|
|
executeOk_servald config set debug.verbose yes set log.stderr.show_pid true
|
|
executeOk_servald config get
|
|
assertStdoutLineCount '==' 2
|
|
executeOk_servald config del debug.verbose
|
|
executeOk_servald config get
|
|
assertStdoutLineCount '==' 1
|
|
executeOk_servald config del log.show_pid
|
|
assertStdoutLineCount '==' 0
|
|
}
|
|
|
|
doc_CaseSensitive="Config item names are case sensitive"
|
|
test_CaseSensitive() {
|
|
execute $servald config set Debug.verbose yes
|
|
assertExitStatus --stderr '!=' 0
|
|
}
|
|
|
|
doc_OptionNames="Config item names must be well formed"
|
|
test_OptionNames() {
|
|
execute $servald config set debug. yes
|
|
assertExitStatus --stderr '!=' 0
|
|
execute $servald config set .verbose yes
|
|
assertExitStatus --stderr '!=' 0
|
|
execute $servald config del debug..verbose
|
|
assertExitStatus --stderr '!=' 0
|
|
}
|
|
|
|
doc_DebugFlags="Debug config options affect verbosity"
|
|
setup_DebugFlags() {
|
|
setup
|
|
executeOk_servald config \
|
|
set log.stderr.level debug \
|
|
set log.stderr.show_pid true
|
|
}
|
|
test_DebugFlags() {
|
|
executeOk_servald echo one two three
|
|
assertStderrGrep --matches=0 '\<echo:argv\['
|
|
executeOk_servald config set debug.verbose true
|
|
executeOk_servald echo one two three
|
|
assertStderrGrep --matches=3 '\<echo:argv\['
|
|
executeOk_servald config set debug.verbose false
|
|
executeOk_servald echo one two three
|
|
assertStderrGrep --matches=0 '\<echo:argv\['
|
|
}
|
|
|
|
doc_InterfacesLegacyIncludeAll="Legacy 'interfaces' config option include all"
|
|
test_InterfacesLegacyIncludeAll() {
|
|
executeOk_servald config set interfaces '+'
|
|
}
|
|
|
|
doc_InterfacesLegacyExcludeAll="Legacy 'interfaces' config option exclude all"
|
|
test_InterfacesLegacyExcludeAll() {
|
|
executeOk_servald config set interfaces '-'
|
|
}
|
|
|
|
doc_InterfacesLegacyMixed="Legacy 'interfaces' config option mixed list"
|
|
test_InterfacesLegacyMixed() {
|
|
executeOk_servald config set interfaces '+eth,-wifi,+'
|
|
}
|
|
|
|
doc_InterfacesLegacyMixedDetail="Legacy 'interfaces' config option mixed list with details"
|
|
test_InterfacesLegacyMixedDetail() {
|
|
executeOk_servald config set interfaces '+eth=ethernet:4111:9M, +wifi=wifi:4112:900K, -'
|
|
}
|
|
|
|
doc_InterfacesLegacyInvalidType="Legacy 'interfaces' config option invalid type"
|
|
test_InterfacesLegacyInvalidType() {
|
|
execute --stderr --core-backtrace --exit-status=2 --executable=$servald \
|
|
config set interfaces '+eth=foo:4111:9M'
|
|
assert_stderr_log \
|
|
--warn-pattern='"interfaces".*invalid' \
|
|
--error-pattern='config file.*not loaded.*invalid'
|
|
}
|
|
|
|
doc_InterfacesLegacyInvalidPort="Legacy 'interfaces' config option invalid port"
|
|
test_InterfacesLegacyInvalidPort() {
|
|
execute --stderr --core-backtrace --exit-status=2 --executable=$servald \
|
|
config set interfaces '+eth=ethernet:-1000:9M'
|
|
assert_stderr_log \
|
|
--warn-pattern='"interfaces".*invalid' \
|
|
--error-pattern='config file.*not loaded.*invalid'
|
|
}
|
|
|
|
doc_InterfacesLegacyInvalidSpeed="Legacy 'interfaces' config option invalid speed is ignored"
|
|
test_InterfacesLegacyInvalidSpeed() {
|
|
# speed option is no longer validated or used
|
|
execute --stderr --core-backtrace --exit-status=0 --executable=$servald \
|
|
config set interfaces '+eth=ethernet:4111:9Moose'
|
|
#assert_stderr_log \
|
|
# --warn-pattern='"interfaces".*invalid' \
|
|
# --error-pattern='config file.*not loaded.*invalid'
|
|
}
|
|
|
|
doc_InterfacesLegacyIncompatible="Legacy 'interfaces' config option incompatible with modern form"
|
|
test_InterfacesLegacyIncompatible() {
|
|
executeOk_servald config set interfaces '+'
|
|
execute --stderr --core-backtrace --executable=$servald \
|
|
config set interfaces.10.match 'eth'
|
|
tfw_cat $SERVALINSTANCE_PATH/serval.conf
|
|
assertExitStatus '==' 2
|
|
assert_stderr_log \
|
|
--warn-pattern='"interfaces.*incompatible' \
|
|
--error-pattern='config file.*not loaded.*incompatible'
|
|
tfw_cat --stderr
|
|
}
|
|
|
|
doc_InterfacesModernMatch="Modern 'interfaces.N.match' config option"
|
|
test_InterfacesModernMatch() {
|
|
executeOk_servald config set interfaces.0.match 'eth*, wifi*'
|
|
}
|
|
|
|
doc_InterfacesModernDummy="Modern 'interfaces.N.file' config option"
|
|
test_InterfacesModernDummy() {
|
|
executeOk_servald config set interfaces.0.file dummyname
|
|
}
|
|
teardown_InterfacesModernDummy() {
|
|
tfw_cat $SERVALINSTANCE_PATH/serval.conf
|
|
teardown
|
|
}
|
|
|
|
doc_InterfacesModernIncompatible="Config options 'interfaces.match' and 'interfaces.file' are incompatible"
|
|
test_InterfacesModernIncompatible() {
|
|
executeOk_servald config set interfaces.0.match eth
|
|
execute --stderr --core-backtrace --executable=$servald \
|
|
config set interfaces.0.file dummy
|
|
assertExitStatus '==' 2
|
|
assert_stderr_log \
|
|
--warn-pattern='"interfaces\.0\..*incompatible' \
|
|
--error-pattern='config file.*not loaded.*incompatible'
|
|
}
|
|
|
|
doc_LogFileAbsolute="Absolute log file"
|
|
test_LogFileAbsolute() {
|
|
executeOk_servald config \
|
|
set debug.verbose true \
|
|
set log.file_path "$PWD/log"
|
|
executeOk_servald echo one
|
|
assertGrep log '^DEBUG:.*echo:argv\[1\]="one"$'
|
|
assertGrep --matches=0 --message="log contains no error messages" log '^ERROR:'
|
|
}
|
|
|
|
doc_LogFileRelative="Relative log file"
|
|
test_LogFileRelative() {
|
|
executeOk_servald config \
|
|
set debug.verbose true \
|
|
set log.file_path "log"
|
|
executeOk_servald echo one
|
|
assertGrep "$SERVALINSTANCE_PATH/log" '^DEBUG:.*echo:argv\[1\]="one"$'
|
|
assertGrep --matches=0 --message="log contains no error messages" "$SERVALINSTANCE_PATH/log" '^ERROR:'
|
|
}
|
|
|
|
runTests "$@"
|