blob: 6367cde441673e9ecd7d0ef26d63f701612f6931 [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
Nobuhiro MIKId266c872022-08-08 16:45:31 +090047[fff]
48ampersand =
49
Luigi Toscanoc7c67652018-06-04 10:59:57 +020050[key_with_spaces]
51rgw special key = something
52
Doug Wiegley1f65fd62014-12-13 11:56:16 -070053# inidelete(a)
54[del_separate_options]
55a=b
56b=c
57
58# inidelete(a)
59[del_same_option]
60a=b
61a=c
62
63# inidelete(a)
64[del_missing_option]
65b=c
66
67# inidelete(a)
68[del_missing_option_multi]
69b=c
70b=d
71
72# inidelete(a)
73[del_no_options]
74
75# inidelete(a)
76# no section - del_no_section
77
Dean Troyer2ac8b3f2013-12-04 17:20:28 -060078EOF
79
Ian Wienandf44a0242015-07-22 10:34:47 +100080# set TEST_SUDO to test writing to root-owned files
81SUDO_ARG=""
82SUDO=""
83if [ -n "$TEST_SUDO" ]; then
84 SUDO="sudo "
85 SUDO_ARG="-sudo "
86 sudo chown -R root:root ${INI_TMP_ETC_DIR}
87fi
Dean Troyer2ac8b3f2013-12-04 17:20:28 -060088
vsaienko135bd482015-12-11 11:03:52 +020089# test iniget_sections
90VAL=$(iniget_sections "${TEST_INI}")
Nobuhiro MIKId266c872022-08-08 16:45:31 +090091assert_equal "$VAL" "default aaa bbb ccc ddd eee fff key_with_spaces \
Luigi Toscanoc7c67652018-06-04 10:59:57 +020092del_separate_options del_same_option del_missing_option \
93del_missing_option_multi del_no_options"
vsaienko135bd482015-12-11 11:03:52 +020094
Ian Wienandf44a0242015-07-22 10:34:47 +100095# Test with missing arguments
Ian Wienandb997db62015-07-22 10:05:32 +100096BEFORE=$(cat ${TEST_INI})
Dean Troyer2ac8b3f2013-12-04 17:20:28 -060097
Ian Wienandf44a0242015-07-22 10:34:47 +100098iniset ${SUDO_ARG} ${TEST_INI} aaa
Ian Wienandb997db62015-07-22 10:05:32 +100099NO_ATTRIBUTE=$(cat ${TEST_INI})
100assert_equal "$BEFORE" "$NO_ATTRIBUTE" "test missing attribute argument"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600101
Ian Wienandf44a0242015-07-22 10:34:47 +1000102iniset ${SUDO_ARG} ${TEST_INI}
Ian Wienandb997db62015-07-22 10:05:32 +1000103NO_SECTION=$(cat ${TEST_INI})
104assert_equal "$BEFORE" "$NO_SECTION" "missing section argument"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600105
Ian Wienandb997db62015-07-22 10:05:32 +1000106# Test with spaces in values
107VAL=$(iniget ${TEST_INI} aaa handlers)
108assert_equal "$VAL" "aa, bb" "iniget spaces in option"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600109
Ian Wienandf44a0242015-07-22 10:34:47 +1000110iniset ${SUDO_ARG} ${TEST_INI} aaa handlers "11, 22"
Ian Wienandb997db62015-07-22 10:05:32 +1000111VAL=$(iniget ${TEST_INI} aaa handlers)
112assert_equal "$VAL" "11, 22" "iniset spaces in option"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600113
114# Test with spaces in section header
Ian Wienandb997db62015-07-22 10:05:32 +1000115VAL=$(iniget ${TEST_INI} " ccc " spaces)
116assert_equal "$VAL" "yes" "iniget with section header space"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600117
Ian Wienandf44a0242015-07-22 10:34:47 +1000118iniset ${SUDO_ARG} ${TEST_INI} "b b" opt_ion 42
Ian Wienandb997db62015-07-22 10:05:32 +1000119VAL=$(iniget ${TEST_INI} "b b" opt_ion)
120assert_equal "$VAL" "42" "iniset with section header space"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600121
122# Test without spaces, end of file
Ian Wienandb997db62015-07-22 10:05:32 +1000123VAL=$(iniget ${TEST_INI} bbb handlers)
124assert_equal "$VAL" "ee,ff" "iniget at EOF"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600125
Ian Wienandf44a0242015-07-22 10:34:47 +1000126iniset ${SUDO_ARG} ${TEST_INI} bbb handlers "33,44"
Ian Wienandb997db62015-07-22 10:05:32 +1000127VAL=$(iniget ${TEST_INI} bbb handlers)
128assert_equal "$VAL" "33,44" "inset at EOF"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600129
Nobuhiro MIKId266c872022-08-08 16:45:31 +0900130# Test with ampersand in values
131for i in `seq 3`; do
132 iniset ${TEST_INI} fff ampersand '&y'
133done
134VAL=$(iniget ${TEST_INI} fff ampersand)
135assert_equal "$VAL" "&y" "iniset ampersands in option"
136
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600137# test empty option
Yi Wang698796f2018-12-14 10:35:26 +0800138if ini_has_option ${SUDO_ARG} ${TEST_INI} ddd empty; then
Ian Wienandb997db62015-07-22 10:05:32 +1000139 passed "ini_has_option: ddd.empty present"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600140else
Ian Wienandfcdca052015-04-17 13:02:49 +1000141 failed "ini_has_option failed: ddd.empty not found"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600142fi
143
144# test non-empty option
Yi Wang698796f2018-12-14 10:35:26 +0800145if ini_has_option ${SUDO_ARG} ${TEST_INI} bbb handlers; then
Ian Wienandb997db62015-07-22 10:05:32 +1000146 passed "ini_has_option: bbb.handlers present"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600147else
Ian Wienandfcdca052015-04-17 13:02:49 +1000148 failed "ini_has_option failed: bbb.handlers not found"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600149fi
150
151# test changing empty option
Ian Wienandf44a0242015-07-22 10:34:47 +1000152iniset ${SUDO_ARG} ${TEST_INI} ddd empty "42"
Ian Wienandb997db62015-07-22 10:05:32 +1000153VAL=$(iniget ${TEST_INI} ddd empty)
154assert_equal "$VAL" "42" "change empty option"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600155
Andrea Frittolicd7d9562013-12-05 08:09:12 +0000156# test pipe in option
Ian Wienandf44a0242015-07-22 10:34:47 +1000157iniset ${SUDO_ARG} ${TEST_INI} aaa handlers "a|b"
Ian Wienandb997db62015-07-22 10:05:32 +1000158VAL=$(iniget ${TEST_INI} aaa handlers)
159assert_equal "$VAL" "a|b" "pipe in option"
Andrea Frittolicd7d9562013-12-05 08:09:12 +0000160
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600161# Test section not exist
Ian Wienandb997db62015-07-22 10:05:32 +1000162VAL=$(iniget ${TEST_INI} zzz handlers)
163assert_empty VAL "section does not exist"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600164
165# Test option not exist
Ian Wienandb997db62015-07-22 10:05:32 +1000166VAL=$(iniget ${TEST_INI} aaa debug)
167assert_empty VAL "option does not exist"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600168
Ian Wienandb997db62015-07-22 10:05:32 +1000169if ! ini_has_option ${TEST_INI} aaa debug; then
170 passed "ini_has_option: aaa.debug not present"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600171else
Ian Wienandfcdca052015-04-17 13:02:49 +1000172 failed "ini_has_option failed: aaa.debug"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600173fi
174
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600175# Test comments
Ian Wienandf44a0242015-07-22 10:34:47 +1000176inicomment ${SUDO_ARG} ${TEST_INI} aaa handlers
Ian Wienandb997db62015-07-22 10:05:32 +1000177VAL=$(iniget ${TEST_INI} aaa handlers)
178assert_empty VAL "test inicomment"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600179
180# Test multiple line iniset/iniget
Ian Wienandf44a0242015-07-22 10:34:47 +1000181iniset_multiline ${SUDO_ARG} ${TEST_INI} eee multi bar1 bar2
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600182
Ian Wienandb997db62015-07-22 10:05:32 +1000183VAL=$(iniget_multiline ${TEST_INI} eee multi)
184assert_equal "$VAL" "bar1 bar2" "iniget_multiline"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600185
186# Test iniadd with exiting values
Ian Wienandf44a0242015-07-22 10:34:47 +1000187iniadd ${SUDO_ARG} ${TEST_INI} eee multi bar3
Ian Wienandb997db62015-07-22 10:05:32 +1000188VAL=$(iniget_multiline ${TEST_INI} eee multi)
189assert_equal "$VAL" "bar1 bar2 bar3" "iniadd with existing values"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600190
191# Test iniadd with non-exiting values
Ian Wienandf44a0242015-07-22 10:34:47 +1000192iniadd ${SUDO_ARG} ${TEST_INI} eee non-multi foobar1 foobar2
Ian Wienandb997db62015-07-22 10:05:32 +1000193VAL=$(iniget_multiline ${TEST_INI} eee non-multi)
194assert_equal "$VAL" "foobar1 foobar2" "iniadd non-existing values"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600195
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700196# Test inidelete
197del_cases="
198 del_separate_options
199 del_same_option
200 del_missing_option
201 del_missing_option_multi
202 del_no_options
203 del_no_section"
204
205for x in $del_cases; do
Ian Wienandf44a0242015-07-22 10:34:47 +1000206 inidelete ${SUDO_ARG} ${TEST_INI} $x a
Ian Wienandb997db62015-07-22 10:05:32 +1000207 VAL=$(iniget_multiline ${TEST_INI} $x a)
208 assert_empty VAL "inidelete $x"
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700209 if [ "$x" = "del_separate_options" -o \
210 "$x" = "del_missing_option" -o \
211 "$x" = "del_missing_option_multi" ]; then
Ian Wienandb997db62015-07-22 10:05:32 +1000212 VAL=$(iniget_multiline ${TEST_INI} $x b)
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700213 if [ "$VAL" = "c" -o "$VAL" = "c d" ]; then
Ian Wienandb997db62015-07-22 10:05:32 +1000214 passed "inidelete other_options $x"
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700215 else
Ian Wienandb997db62015-07-22 10:05:32 +1000216 failed "inidelete other_option $x: $VAL"
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700217 fi
218 fi
219done
220
Ian Wienandcede7872015-07-22 13:36:12 +1000221# test file-creation
222iniset $SUDO_ARG ${INI_TMP_ETC_DIR}/test.new.ini test foo bar
223VAL=$(iniget ${INI_TMP_ETC_DIR}/test.new.ini test foo)
224assert_equal "$VAL" "bar" "iniset created file"
225
Luigi Toscanoc7c67652018-06-04 10:59:57 +0200226# test creation of keys with spaces
227iniset ${SUDO_ARG} ${TEST_INI} key_with_spaces "rgw another key" somethingelse
228VAL=$(iniget ${TEST_INI} key_with_spaces "rgw another key")
229assert_equal "$VAL" "somethingelse" "iniset created a key with spaces"
230
231# test update of keys with spaces
232iniset ${SUDO_ARG} ${TEST_INI} key_with_spaces "rgw special key" newvalue
233VAL=$(iniget ${TEST_INI} key_with_spaces "rgw special key")
234assert_equal "$VAL" "newvalue" "iniset updated a key with spaces"
235
236inidelete ${SUDO_ARG} ${TEST_INI} key_with_spaces "rgw another key"
237VAL=$(iniget ${TEST_INI} key_with_spaces "rgw another key")
238assert_empty VAL "inidelete removed a key with spaces"
239
Ian Wienandf44a0242015-07-22 10:34:47 +1000240$SUDO rm -rf ${INI_TMP_DIR}
Ian Wienandfcdca052015-04-17 13:02:49 +1000241
242report_results