blob: d9cb8d8a99191c4a8f6bbaa0e6626f7f6f6abff8 [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
47# inidelete(a)
48[del_separate_options]
49a=b
50b=c
51
52# inidelete(a)
53[del_same_option]
54a=b
55a=c
56
57# inidelete(a)
58[del_missing_option]
59b=c
60
61# inidelete(a)
62[del_missing_option_multi]
63b=c
64b=d
65
66# inidelete(a)
67[del_no_options]
68
69# inidelete(a)
70# no section - del_no_section
71
Dean Troyer2ac8b3f2013-12-04 17:20:28 -060072EOF
73
Ian Wienandf44a0242015-07-22 10:34:47 +100074# set TEST_SUDO to test writing to root-owned files
75SUDO_ARG=""
76SUDO=""
77if [ -n "$TEST_SUDO" ]; then
78 SUDO="sudo "
79 SUDO_ARG="-sudo "
80 sudo chown -R root:root ${INI_TMP_ETC_DIR}
81fi
Dean Troyer2ac8b3f2013-12-04 17:20:28 -060082
Ian Wienandf44a0242015-07-22 10:34:47 +100083# Test with missing arguments
Ian Wienandb997db62015-07-22 10:05:32 +100084BEFORE=$(cat ${TEST_INI})
Dean Troyer2ac8b3f2013-12-04 17:20:28 -060085
Ian Wienandf44a0242015-07-22 10:34:47 +100086iniset ${SUDO_ARG} ${TEST_INI} aaa
Ian Wienandb997db62015-07-22 10:05:32 +100087NO_ATTRIBUTE=$(cat ${TEST_INI})
88assert_equal "$BEFORE" "$NO_ATTRIBUTE" "test missing attribute argument"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -060089
Ian Wienandf44a0242015-07-22 10:34:47 +100090iniset ${SUDO_ARG} ${TEST_INI}
Ian Wienandb997db62015-07-22 10:05:32 +100091NO_SECTION=$(cat ${TEST_INI})
92assert_equal "$BEFORE" "$NO_SECTION" "missing section argument"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -060093
Ian Wienandb997db62015-07-22 10:05:32 +100094# Test with spaces in values
95VAL=$(iniget ${TEST_INI} aaa handlers)
96assert_equal "$VAL" "aa, bb" "iniget spaces in option"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -060097
Ian Wienandf44a0242015-07-22 10:34:47 +100098iniset ${SUDO_ARG} ${TEST_INI} aaa handlers "11, 22"
Ian Wienandb997db62015-07-22 10:05:32 +100099VAL=$(iniget ${TEST_INI} aaa handlers)
100assert_equal "$VAL" "11, 22" "iniset spaces in option"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600101
102# Test with spaces in section header
Ian Wienandb997db62015-07-22 10:05:32 +1000103VAL=$(iniget ${TEST_INI} " ccc " spaces)
104assert_equal "$VAL" "yes" "iniget with section header space"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600105
Ian Wienandf44a0242015-07-22 10:34:47 +1000106iniset ${SUDO_ARG} ${TEST_INI} "b b" opt_ion 42
Ian Wienandb997db62015-07-22 10:05:32 +1000107VAL=$(iniget ${TEST_INI} "b b" opt_ion)
108assert_equal "$VAL" "42" "iniset with section header space"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600109
110# Test without spaces, end of file
Ian Wienandb997db62015-07-22 10:05:32 +1000111VAL=$(iniget ${TEST_INI} bbb handlers)
112assert_equal "$VAL" "ee,ff" "iniget at EOF"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600113
Ian Wienandf44a0242015-07-22 10:34:47 +1000114iniset ${SUDO_ARG} ${TEST_INI} bbb handlers "33,44"
Ian Wienandb997db62015-07-22 10:05:32 +1000115VAL=$(iniget ${TEST_INI} bbb handlers)
116assert_equal "$VAL" "33,44" "inset at EOF"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600117
118# test empty option
Ian Wienandb997db62015-07-22 10:05:32 +1000119if ini_has_option ${TEST_INI} ddd empty; then
120 passed "ini_has_option: ddd.empty present"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600121else
Ian Wienandfcdca052015-04-17 13:02:49 +1000122 failed "ini_has_option failed: ddd.empty not found"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600123fi
124
125# test non-empty option
Ian Wienandb997db62015-07-22 10:05:32 +1000126if ini_has_option ${TEST_INI} bbb handlers; then
127 passed "ini_has_option: bbb.handlers present"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600128else
Ian Wienandfcdca052015-04-17 13:02:49 +1000129 failed "ini_has_option failed: bbb.handlers not found"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600130fi
131
132# test changing empty option
Ian Wienandf44a0242015-07-22 10:34:47 +1000133iniset ${SUDO_ARG} ${TEST_INI} ddd empty "42"
Ian Wienandb997db62015-07-22 10:05:32 +1000134VAL=$(iniget ${TEST_INI} ddd empty)
135assert_equal "$VAL" "42" "change empty option"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600136
Andrea Frittolicd7d9562013-12-05 08:09:12 +0000137# test pipe in option
Ian Wienandf44a0242015-07-22 10:34:47 +1000138iniset ${SUDO_ARG} ${TEST_INI} aaa handlers "a|b"
Ian Wienandb997db62015-07-22 10:05:32 +1000139VAL=$(iniget ${TEST_INI} aaa handlers)
140assert_equal "$VAL" "a|b" "pipe in option"
Andrea Frittolicd7d9562013-12-05 08:09:12 +0000141
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600142# Test section not exist
Ian Wienandb997db62015-07-22 10:05:32 +1000143VAL=$(iniget ${TEST_INI} zzz handlers)
144assert_empty VAL "section does not exist"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600145
146# Test option not exist
Ian Wienandb997db62015-07-22 10:05:32 +1000147VAL=$(iniget ${TEST_INI} aaa debug)
148assert_empty VAL "option does not exist"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600149
Ian Wienandb997db62015-07-22 10:05:32 +1000150if ! ini_has_option ${TEST_INI} aaa debug; then
151 passed "ini_has_option: aaa.debug not present"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600152else
Ian Wienandfcdca052015-04-17 13:02:49 +1000153 failed "ini_has_option failed: aaa.debug"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600154fi
155
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600156# Test comments
Ian Wienandf44a0242015-07-22 10:34:47 +1000157inicomment ${SUDO_ARG} ${TEST_INI} aaa handlers
Ian Wienandb997db62015-07-22 10:05:32 +1000158VAL=$(iniget ${TEST_INI} aaa handlers)
159assert_empty VAL "test inicomment"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600160
161# Test multiple line iniset/iniget
Ian Wienandf44a0242015-07-22 10:34:47 +1000162iniset_multiline ${SUDO_ARG} ${TEST_INI} eee multi bar1 bar2
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600163
Ian Wienandb997db62015-07-22 10:05:32 +1000164VAL=$(iniget_multiline ${TEST_INI} eee multi)
165assert_equal "$VAL" "bar1 bar2" "iniget_multiline"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600166
167# Test iniadd with exiting values
Ian Wienandf44a0242015-07-22 10:34:47 +1000168iniadd ${SUDO_ARG} ${TEST_INI} eee multi bar3
Ian Wienandb997db62015-07-22 10:05:32 +1000169VAL=$(iniget_multiline ${TEST_INI} eee multi)
170assert_equal "$VAL" "bar1 bar2 bar3" "iniadd with existing values"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600171
172# Test iniadd with non-exiting values
Ian Wienandf44a0242015-07-22 10:34:47 +1000173iniadd ${SUDO_ARG} ${TEST_INI} eee non-multi foobar1 foobar2
Ian Wienandb997db62015-07-22 10:05:32 +1000174VAL=$(iniget_multiline ${TEST_INI} eee non-multi)
175assert_equal "$VAL" "foobar1 foobar2" "iniadd non-existing values"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600176
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700177# Test inidelete
178del_cases="
179 del_separate_options
180 del_same_option
181 del_missing_option
182 del_missing_option_multi
183 del_no_options
184 del_no_section"
185
186for x in $del_cases; do
Ian Wienandf44a0242015-07-22 10:34:47 +1000187 inidelete ${SUDO_ARG} ${TEST_INI} $x a
Ian Wienandb997db62015-07-22 10:05:32 +1000188 VAL=$(iniget_multiline ${TEST_INI} $x a)
189 assert_empty VAL "inidelete $x"
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700190 if [ "$x" = "del_separate_options" -o \
191 "$x" = "del_missing_option" -o \
192 "$x" = "del_missing_option_multi" ]; then
Ian Wienandb997db62015-07-22 10:05:32 +1000193 VAL=$(iniget_multiline ${TEST_INI} $x b)
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700194 if [ "$VAL" = "c" -o "$VAL" = "c d" ]; then
Ian Wienandb997db62015-07-22 10:05:32 +1000195 passed "inidelete other_options $x"
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700196 else
Ian Wienandb997db62015-07-22 10:05:32 +1000197 failed "inidelete other_option $x: $VAL"
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700198 fi
199 fi
200done
201
Ian Wienandcede7872015-07-22 13:36:12 +1000202# test file-creation
203iniset $SUDO_ARG ${INI_TMP_ETC_DIR}/test.new.ini test foo bar
204VAL=$(iniget ${INI_TMP_ETC_DIR}/test.new.ini test foo)
205assert_equal "$VAL" "bar" "iniset created file"
206
Ian Wienandf44a0242015-07-22 10:34:47 +1000207$SUDO rm -rf ${INI_TMP_DIR}
Ian Wienandfcdca052015-04-17 13:02:49 +1000208
209report_results