1f65fd64ce
With multiline support for local.conf, the first line is created with iniset, which will set *all* previous lines to the same thing, and then subsequent lines will be added. Modify the multiline support to first clear existing lines from the section. This causes fatal errors with neutron.conf, which defines drivers with a bunch of service_provider= options, and the current code ends up with the first driver defined in local.conf being present twice. Change-Id: If132a94e53545d9134859aa508da7b9819ede2f8
296 lines
5.3 KiB
Bash
Executable File
296 lines
5.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Tests for DevStack INI functions
|
|
|
|
TOP=$(cd $(dirname "$0")/.. && pwd)
|
|
|
|
# Import common functions
|
|
source $TOP/functions
|
|
|
|
|
|
echo "Testing INI functions"
|
|
|
|
cat >test.ini <<EOF
|
|
[default]
|
|
# comment an option
|
|
#log_file=./log.conf
|
|
log_file=/etc/log.conf
|
|
handlers=do not disturb
|
|
|
|
[aaa]
|
|
# the commented option should not change
|
|
#handlers=cc,dd
|
|
handlers = aa, bb
|
|
|
|
[bbb]
|
|
handlers=ee,ff
|
|
|
|
[ ccc ]
|
|
spaces = yes
|
|
|
|
[ddd]
|
|
empty =
|
|
|
|
[eee]
|
|
multi = foo1
|
|
multi = foo2
|
|
|
|
# inidelete(a)
|
|
[del_separate_options]
|
|
a=b
|
|
b=c
|
|
|
|
# inidelete(a)
|
|
[del_same_option]
|
|
a=b
|
|
a=c
|
|
|
|
# inidelete(a)
|
|
[del_missing_option]
|
|
b=c
|
|
|
|
# inidelete(a)
|
|
[del_missing_option_multi]
|
|
b=c
|
|
b=d
|
|
|
|
# inidelete(a)
|
|
[del_no_options]
|
|
|
|
# inidelete(a)
|
|
# no section - del_no_section
|
|
|
|
EOF
|
|
|
|
# Test with missing arguments
|
|
|
|
BEFORE=$(cat test.ini)
|
|
|
|
echo -n "iniset: test missing attribute argument: "
|
|
iniset test.ini aaa
|
|
NO_ATTRIBUTE=$(cat test.ini)
|
|
if [[ "$BEFORE" == "$NO_ATTRIBUTE" ]]; then
|
|
echo "OK"
|
|
else
|
|
echo "failed"
|
|
fi
|
|
|
|
echo -n "iniset: test missing section argument: "
|
|
iniset test.ini
|
|
NO_SECTION=$(cat test.ini)
|
|
if [[ "$BEFORE" == "$NO_SECTION" ]]; then
|
|
echo "OK"
|
|
else
|
|
echo "failed"
|
|
fi
|
|
|
|
# Test with spaces
|
|
|
|
VAL=$(iniget test.ini aaa handlers)
|
|
if [[ "$VAL" == "aa, bb" ]]; then
|
|
echo "OK: $VAL"
|
|
else
|
|
echo "iniget failed: $VAL"
|
|
fi
|
|
|
|
iniset test.ini aaa handlers "11, 22"
|
|
|
|
VAL=$(iniget test.ini aaa handlers)
|
|
if [[ "$VAL" == "11, 22" ]]; then
|
|
echo "OK: $VAL"
|
|
else
|
|
echo "iniget failed: $VAL"
|
|
fi
|
|
|
|
# Test with spaces in section header
|
|
|
|
VAL=$(iniget test.ini " ccc " spaces)
|
|
if [[ "$VAL" == "yes" ]]; then
|
|
echo "OK: $VAL"
|
|
else
|
|
echo "iniget failed: $VAL"
|
|
fi
|
|
|
|
iniset test.ini "b b" opt_ion 42
|
|
|
|
VAL=$(iniget test.ini "b b" opt_ion)
|
|
if [[ "$VAL" == "42" ]]; then
|
|
echo "OK: $VAL"
|
|
else
|
|
echo "iniget failed: $VAL"
|
|
fi
|
|
|
|
# Test without spaces, end of file
|
|
|
|
VAL=$(iniget test.ini bbb handlers)
|
|
if [[ "$VAL" == "ee,ff" ]]; then
|
|
echo "OK: $VAL"
|
|
else
|
|
echo "iniget failed: $VAL"
|
|
fi
|
|
|
|
iniset test.ini bbb handlers "33,44"
|
|
|
|
VAL=$(iniget test.ini bbb handlers)
|
|
if [[ "$VAL" == "33,44" ]]; then
|
|
echo "OK: $VAL"
|
|
else
|
|
echo "iniget failed: $VAL"
|
|
fi
|
|
|
|
# test empty option
|
|
if ini_has_option test.ini ddd empty; then
|
|
echo "OK: ddd.empty present"
|
|
else
|
|
echo "ini_has_option failed: ddd.empty not found"
|
|
fi
|
|
|
|
# test non-empty option
|
|
if ini_has_option test.ini bbb handlers; then
|
|
echo "OK: bbb.handlers present"
|
|
else
|
|
echo "ini_has_option failed: bbb.handlers not found"
|
|
fi
|
|
|
|
# test changing empty option
|
|
iniset test.ini ddd empty "42"
|
|
|
|
VAL=$(iniget test.ini ddd empty)
|
|
if [[ "$VAL" == "42" ]]; then
|
|
echo "OK: $VAL"
|
|
else
|
|
echo "iniget failed: $VAL"
|
|
fi
|
|
|
|
# test pipe in option
|
|
iniset test.ini aaa handlers "a|b"
|
|
|
|
VAL=$(iniget test.ini aaa handlers)
|
|
if [[ "$VAL" == "a|b" ]]; then
|
|
echo "OK: $VAL"
|
|
else
|
|
echo "iniget failed: $VAL"
|
|
fi
|
|
|
|
# test space in option
|
|
iniset test.ini aaa handlers "a b"
|
|
|
|
VAL="$(iniget test.ini aaa handlers)"
|
|
if [[ "$VAL" == "a b" ]]; then
|
|
echo "OK: $VAL"
|
|
else
|
|
echo "iniget failed: $VAL"
|
|
fi
|
|
|
|
# Test section not exist
|
|
|
|
VAL=$(iniget test.ini zzz handlers)
|
|
if [[ -z "$VAL" ]]; then
|
|
echo "OK: zzz not present"
|
|
else
|
|
echo "iniget failed: $VAL"
|
|
fi
|
|
|
|
iniset test.ini zzz handlers "999"
|
|
|
|
VAL=$(iniget test.ini zzz handlers)
|
|
if [[ -n "$VAL" ]]; then
|
|
echo "OK: zzz not present"
|
|
else
|
|
echo "iniget failed: $VAL"
|
|
fi
|
|
|
|
# Test option not exist
|
|
|
|
VAL=$(iniget test.ini aaa debug)
|
|
if [[ -z "$VAL" ]]; then
|
|
echo "OK aaa.debug not present"
|
|
else
|
|
echo "iniget failed: $VAL"
|
|
fi
|
|
|
|
if ! ini_has_option test.ini aaa debug; then
|
|
echo "OK aaa.debug not present"
|
|
else
|
|
echo "ini_has_option failed: aaa.debug"
|
|
fi
|
|
|
|
iniset test.ini aaa debug "999"
|
|
|
|
VAL=$(iniget test.ini aaa debug)
|
|
if [[ -n "$VAL" ]]; then
|
|
echo "OK aaa.debug present"
|
|
else
|
|
echo "iniget failed: $VAL"
|
|
fi
|
|
|
|
# Test comments
|
|
|
|
inicomment test.ini aaa handlers
|
|
|
|
VAL=$(iniget test.ini aaa handlers)
|
|
if [[ -z "$VAL" ]]; then
|
|
echo "OK"
|
|
else
|
|
echo "inicomment failed: $VAL"
|
|
fi
|
|
|
|
# Test multiple line iniset/iniget
|
|
iniset_multiline test.ini eee multi bar1 bar2
|
|
|
|
VAL=$(iniget_multiline test.ini eee multi)
|
|
if [[ "$VAL" == "bar1 bar2" ]]; then
|
|
echo "OK: iniset_multiline"
|
|
else
|
|
echo "iniset_multiline failed: $VAL"
|
|
fi
|
|
|
|
# Test iniadd with exiting values
|
|
iniadd test.ini eee multi bar3
|
|
VAL=$(iniget_multiline test.ini eee multi)
|
|
if [[ "$VAL" == "bar1 bar2 bar3" ]]; then
|
|
echo "OK: iniadd"
|
|
else
|
|
echo "iniadd failed: $VAL"
|
|
fi
|
|
|
|
# Test iniadd with non-exiting values
|
|
iniadd test.ini eee non-multi foobar1 foobar2
|
|
VAL=$(iniget_multiline test.ini eee non-multi)
|
|
if [[ "$VAL" == "foobar1 foobar2" ]]; then
|
|
echo "OK: iniadd with non-exiting value"
|
|
else
|
|
echo "iniadd with non-exsting failed: $VAL"
|
|
fi
|
|
|
|
# Test inidelete
|
|
del_cases="
|
|
del_separate_options
|
|
del_same_option
|
|
del_missing_option
|
|
del_missing_option_multi
|
|
del_no_options
|
|
del_no_section"
|
|
|
|
for x in $del_cases; do
|
|
inidelete test.ini $x a
|
|
VAL=$(iniget_multiline test.ini $x a)
|
|
if [ -z "$VAL" ]; then
|
|
echo "OK: inidelete $x"
|
|
else
|
|
echo "inidelete $x failed: $VAL"
|
|
fi
|
|
if [ "$x" = "del_separate_options" -o \
|
|
"$x" = "del_missing_option" -o \
|
|
"$x" = "del_missing_option_multi" ]; then
|
|
VAL=$(iniget_multiline test.ini $x b)
|
|
if [ "$VAL" = "c" -o "$VAL" = "c d" ]; then
|
|
echo "OK: inidelete other_options $x"
|
|
else
|
|
echo "inidelete other_option $x failed: $VAL"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
rm test.ini
|