blob: 6ed1647f3498026b5346230843882c38e578ffb9 [file] [log] [blame]
Dean Troyer2ac8b3f2013-12-04 17:20:28 -06001#!/usr/bin/env bash
2
3# Tests for DevStack INI functions
4
5TOP=$(cd $(dirname "$0")/.. && pwd)
6
Dean Troyerbf2ad702015-03-09 15:16:10 -05007# Import config functions
8source $TOP/inc/ini-config
Dean Troyer2ac8b3f2013-12-04 17:20:28 -06009
Ian Wienandfcdca052015-04-17 13:02:49 +100010source $TOP/tests/unittest.sh
11
12set -e
Dean Troyer2ac8b3f2013-12-04 17:20:28 -060013
14echo "Testing INI functions"
15
Ian Wienandb997db62015-07-22 10:05:32 +100016INI_TMP_DIR=$(mktemp -d)
17INI_TMP_ETC_DIR=$INI_TMP_DIR/etc
18TEST_INI=${INI_TMP_ETC_DIR}/test.ini
19mkdir ${INI_TMP_ETC_DIR}
20
21echo "Creating $TEST_INI"
22cat >${TEST_INI} <<EOF
Dean Troyer2ac8b3f2013-12-04 17:20:28 -060023[default]
24# comment an option
25#log_file=./log.conf
26log_file=/etc/log.conf
27handlers=do not disturb
28
29[aaa]
30# the commented option should not change
31#handlers=cc,dd
32handlers = aa, bb
33
34[bbb]
35handlers=ee,ff
36
37[ ccc ]
38spaces = yes
39
40[ddd]
41empty =
42
43[eee]
44multi = foo1
45multi = foo2
Doug Wiegley1f65fd62014-12-13 11:56:16 -070046
Luigi Toscanoc7c67652018-06-04 10:59:57 +020047[key_with_spaces]
48rgw special key = something
49
Doug Wiegley1f65fd62014-12-13 11:56:16 -070050# inidelete(a)
51[del_separate_options]
52a=b
53b=c
54
55# inidelete(a)
56[del_same_option]
57a=b
58a=c
59
60# inidelete(a)
61[del_missing_option]
62b=c
63
64# inidelete(a)
65[del_missing_option_multi]
66b=c
67b=d
68
69# inidelete(a)
70[del_no_options]
71
72# inidelete(a)
73# no section - del_no_section
74
Dean Troyer2ac8b3f2013-12-04 17:20:28 -060075EOF
76
Ian Wienandf44a0242015-07-22 10:34:47 +100077# set TEST_SUDO to test writing to root-owned files
78SUDO_ARG=""
79SUDO=""
80if [ -n "$TEST_SUDO" ]; then
81 SUDO="sudo "
82 SUDO_ARG="-sudo "
83 sudo chown -R root:root ${INI_TMP_ETC_DIR}
84fi
Dean Troyer2ac8b3f2013-12-04 17:20:28 -060085
vsaienko135bd482015-12-11 11:03:52 +020086# test iniget_sections
87VAL=$(iniget_sections "${TEST_INI}")
Luigi Toscanoc7c67652018-06-04 10:59:57 +020088assert_equal "$VAL" "default aaa bbb ccc ddd eee key_with_spaces \
89del_separate_options del_same_option del_missing_option \
90del_missing_option_multi del_no_options"
vsaienko135bd482015-12-11 11:03:52 +020091
Ian Wienandf44a0242015-07-22 10:34:47 +100092# Test with missing arguments
Ian Wienandb997db62015-07-22 10:05:32 +100093BEFORE=$(cat ${TEST_INI})
Dean Troyer2ac8b3f2013-12-04 17:20:28 -060094
Ian Wienandf44a0242015-07-22 10:34:47 +100095iniset ${SUDO_ARG} ${TEST_INI} aaa
Ian Wienandb997db62015-07-22 10:05:32 +100096NO_ATTRIBUTE=$(cat ${TEST_INI})
97assert_equal "$BEFORE" "$NO_ATTRIBUTE" "test missing attribute argument"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -060098
Ian Wienandf44a0242015-07-22 10:34:47 +100099iniset ${SUDO_ARG} ${TEST_INI}
Ian Wienandb997db62015-07-22 10:05:32 +1000100NO_SECTION=$(cat ${TEST_INI})
101assert_equal "$BEFORE" "$NO_SECTION" "missing section argument"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600102
Ian Wienandb997db62015-07-22 10:05:32 +1000103# Test with spaces in values
104VAL=$(iniget ${TEST_INI} aaa handlers)
105assert_equal "$VAL" "aa, bb" "iniget spaces in option"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600106
Ian Wienandf44a0242015-07-22 10:34:47 +1000107iniset ${SUDO_ARG} ${TEST_INI} aaa handlers "11, 22"
Ian Wienandb997db62015-07-22 10:05:32 +1000108VAL=$(iniget ${TEST_INI} aaa handlers)
109assert_equal "$VAL" "11, 22" "iniset spaces in option"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600110
111# Test with spaces in section header
Ian Wienandb997db62015-07-22 10:05:32 +1000112VAL=$(iniget ${TEST_INI} " ccc " spaces)
113assert_equal "$VAL" "yes" "iniget with section header space"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600114
Ian Wienandf44a0242015-07-22 10:34:47 +1000115iniset ${SUDO_ARG} ${TEST_INI} "b b" opt_ion 42
Ian Wienandb997db62015-07-22 10:05:32 +1000116VAL=$(iniget ${TEST_INI} "b b" opt_ion)
117assert_equal "$VAL" "42" "iniset with section header space"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600118
119# Test without spaces, end of file
Ian Wienandb997db62015-07-22 10:05:32 +1000120VAL=$(iniget ${TEST_INI} bbb handlers)
121assert_equal "$VAL" "ee,ff" "iniget at EOF"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600122
Ian Wienandf44a0242015-07-22 10:34:47 +1000123iniset ${SUDO_ARG} ${TEST_INI} bbb handlers "33,44"
Ian Wienandb997db62015-07-22 10:05:32 +1000124VAL=$(iniget ${TEST_INI} bbb handlers)
125assert_equal "$VAL" "33,44" "inset at EOF"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600126
127# test empty option
Yi Wang698796f2018-12-14 10:35:26 +0800128if ini_has_option ${SUDO_ARG} ${TEST_INI} ddd empty; then
Ian Wienandb997db62015-07-22 10:05:32 +1000129 passed "ini_has_option: ddd.empty present"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600130else
Ian Wienandfcdca052015-04-17 13:02:49 +1000131 failed "ini_has_option failed: ddd.empty not found"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600132fi
133
134# test non-empty option
Yi Wang698796f2018-12-14 10:35:26 +0800135if ini_has_option ${SUDO_ARG} ${TEST_INI} bbb handlers; then
Ian Wienandb997db62015-07-22 10:05:32 +1000136 passed "ini_has_option: bbb.handlers present"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600137else
Ian Wienandfcdca052015-04-17 13:02:49 +1000138 failed "ini_has_option failed: bbb.handlers not found"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600139fi
140
141# test changing empty option
Ian Wienandf44a0242015-07-22 10:34:47 +1000142iniset ${SUDO_ARG} ${TEST_INI} ddd empty "42"
Ian Wienandb997db62015-07-22 10:05:32 +1000143VAL=$(iniget ${TEST_INI} ddd empty)
144assert_equal "$VAL" "42" "change empty option"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600145
Andrea Frittolicd7d9562013-12-05 08:09:12 +0000146# test pipe in option
Ian Wienandf44a0242015-07-22 10:34:47 +1000147iniset ${SUDO_ARG} ${TEST_INI} aaa handlers "a|b"
Ian Wienandb997db62015-07-22 10:05:32 +1000148VAL=$(iniget ${TEST_INI} aaa handlers)
149assert_equal "$VAL" "a|b" "pipe in option"
Andrea Frittolicd7d9562013-12-05 08:09:12 +0000150
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600151# Test section not exist
Ian Wienandb997db62015-07-22 10:05:32 +1000152VAL=$(iniget ${TEST_INI} zzz handlers)
153assert_empty VAL "section does not exist"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600154
155# Test option not exist
Ian Wienandb997db62015-07-22 10:05:32 +1000156VAL=$(iniget ${TEST_INI} aaa debug)
157assert_empty VAL "option does not exist"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600158
Ian Wienandb997db62015-07-22 10:05:32 +1000159if ! ini_has_option ${TEST_INI} aaa debug; then
160 passed "ini_has_option: aaa.debug not present"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600161else
Ian Wienandfcdca052015-04-17 13:02:49 +1000162 failed "ini_has_option failed: aaa.debug"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600163fi
164
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600165# Test comments
Ian Wienandf44a0242015-07-22 10:34:47 +1000166inicomment ${SUDO_ARG} ${TEST_INI} aaa handlers
Ian Wienandb997db62015-07-22 10:05:32 +1000167VAL=$(iniget ${TEST_INI} aaa handlers)
168assert_empty VAL "test inicomment"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600169
170# Test multiple line iniset/iniget
Ian Wienandf44a0242015-07-22 10:34:47 +1000171iniset_multiline ${SUDO_ARG} ${TEST_INI} eee multi bar1 bar2
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600172
Ian Wienandb997db62015-07-22 10:05:32 +1000173VAL=$(iniget_multiline ${TEST_INI} eee multi)
174assert_equal "$VAL" "bar1 bar2" "iniget_multiline"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600175
176# Test iniadd with exiting values
Ian Wienandf44a0242015-07-22 10:34:47 +1000177iniadd ${SUDO_ARG} ${TEST_INI} eee multi bar3
Ian Wienandb997db62015-07-22 10:05:32 +1000178VAL=$(iniget_multiline ${TEST_INI} eee multi)
179assert_equal "$VAL" "bar1 bar2 bar3" "iniadd with existing values"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600180
181# Test iniadd with non-exiting values
Ian Wienandf44a0242015-07-22 10:34:47 +1000182iniadd ${SUDO_ARG} ${TEST_INI} eee non-multi foobar1 foobar2
Ian Wienandb997db62015-07-22 10:05:32 +1000183VAL=$(iniget_multiline ${TEST_INI} eee non-multi)
184assert_equal "$VAL" "foobar1 foobar2" "iniadd non-existing values"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600185
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700186# Test inidelete
187del_cases="
188 del_separate_options
189 del_same_option
190 del_missing_option
191 del_missing_option_multi
192 del_no_options
193 del_no_section"
194
195for x in $del_cases; do
Ian Wienandf44a0242015-07-22 10:34:47 +1000196 inidelete ${SUDO_ARG} ${TEST_INI} $x a
Ian Wienandb997db62015-07-22 10:05:32 +1000197 VAL=$(iniget_multiline ${TEST_INI} $x a)
198 assert_empty VAL "inidelete $x"
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700199 if [ "$x" = "del_separate_options" -o \
200 "$x" = "del_missing_option" -o \
201 "$x" = "del_missing_option_multi" ]; then
Ian Wienandb997db62015-07-22 10:05:32 +1000202 VAL=$(iniget_multiline ${TEST_INI} $x b)
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700203 if [ "$VAL" = "c" -o "$VAL" = "c d" ]; then
Ian Wienandb997db62015-07-22 10:05:32 +1000204 passed "inidelete other_options $x"
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700205 else
Ian Wienandb997db62015-07-22 10:05:32 +1000206 failed "inidelete other_option $x: $VAL"
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700207 fi
208 fi
209done
210
Ian Wienandcede7872015-07-22 13:36:12 +1000211# test file-creation
212iniset $SUDO_ARG ${INI_TMP_ETC_DIR}/test.new.ini test foo bar
213VAL=$(iniget ${INI_TMP_ETC_DIR}/test.new.ini test foo)
214assert_equal "$VAL" "bar" "iniset created file"
215
Luigi Toscanoc7c67652018-06-04 10:59:57 +0200216# test creation of keys with spaces
217iniset ${SUDO_ARG} ${TEST_INI} key_with_spaces "rgw another key" somethingelse
218VAL=$(iniget ${TEST_INI} key_with_spaces "rgw another key")
219assert_equal "$VAL" "somethingelse" "iniset created a key with spaces"
220
221# test update of keys with spaces
222iniset ${SUDO_ARG} ${TEST_INI} key_with_spaces "rgw special key" newvalue
223VAL=$(iniget ${TEST_INI} key_with_spaces "rgw special key")
224assert_equal "$VAL" "newvalue" "iniset updated a key with spaces"
225
226inidelete ${SUDO_ARG} ${TEST_INI} key_with_spaces "rgw another key"
227VAL=$(iniget ${TEST_INI} key_with_spaces "rgw another key")
228assert_empty VAL "inidelete removed a key with spaces"
229
Ian Wienandf44a0242015-07-22 10:34:47 +1000230$SUDO rm -rf ${INI_TMP_DIR}
Ian Wienandfcdca052015-04-17 13:02:49 +1000231
232report_results