blob: a5e110736e7ab75867ca618d900f924f2665d19c [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
vsaienko135bd482015-12-11 11:03:52 +020083# test iniget_sections
84VAL=$(iniget_sections "${TEST_INI}")
85assert_equal "$VAL" "default aaa bbb ccc ddd eee del_separate_options \
86del_same_option del_missing_option del_missing_option_multi del_no_options"
87
Ian Wienandf44a0242015-07-22 10:34:47 +100088# Test with missing arguments
Ian Wienandb997db62015-07-22 10:05:32 +100089BEFORE=$(cat ${TEST_INI})
Dean Troyer2ac8b3f2013-12-04 17:20:28 -060090
Ian Wienandf44a0242015-07-22 10:34:47 +100091iniset ${SUDO_ARG} ${TEST_INI} aaa
Ian Wienandb997db62015-07-22 10:05:32 +100092NO_ATTRIBUTE=$(cat ${TEST_INI})
93assert_equal "$BEFORE" "$NO_ATTRIBUTE" "test missing attribute argument"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -060094
Ian Wienandf44a0242015-07-22 10:34:47 +100095iniset ${SUDO_ARG} ${TEST_INI}
Ian Wienandb997db62015-07-22 10:05:32 +100096NO_SECTION=$(cat ${TEST_INI})
97assert_equal "$BEFORE" "$NO_SECTION" "missing section argument"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -060098
Ian Wienandb997db62015-07-22 10:05:32 +100099# Test with spaces in values
100VAL=$(iniget ${TEST_INI} aaa handlers)
101assert_equal "$VAL" "aa, bb" "iniget spaces in option"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600102
Ian Wienandf44a0242015-07-22 10:34:47 +1000103iniset ${SUDO_ARG} ${TEST_INI} aaa handlers "11, 22"
Ian Wienandb997db62015-07-22 10:05:32 +1000104VAL=$(iniget ${TEST_INI} aaa handlers)
105assert_equal "$VAL" "11, 22" "iniset spaces in option"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600106
107# Test with spaces in section header
Ian Wienandb997db62015-07-22 10:05:32 +1000108VAL=$(iniget ${TEST_INI} " ccc " spaces)
109assert_equal "$VAL" "yes" "iniget with section header space"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600110
Ian Wienandf44a0242015-07-22 10:34:47 +1000111iniset ${SUDO_ARG} ${TEST_INI} "b b" opt_ion 42
Ian Wienandb997db62015-07-22 10:05:32 +1000112VAL=$(iniget ${TEST_INI} "b b" opt_ion)
113assert_equal "$VAL" "42" "iniset with section header space"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600114
115# Test without spaces, end of file
Ian Wienandb997db62015-07-22 10:05:32 +1000116VAL=$(iniget ${TEST_INI} bbb handlers)
117assert_equal "$VAL" "ee,ff" "iniget at EOF"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600118
Ian Wienandf44a0242015-07-22 10:34:47 +1000119iniset ${SUDO_ARG} ${TEST_INI} bbb handlers "33,44"
Ian Wienandb997db62015-07-22 10:05:32 +1000120VAL=$(iniget ${TEST_INI} bbb handlers)
121assert_equal "$VAL" "33,44" "inset at EOF"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600122
123# test empty option
Ian Wienandb997db62015-07-22 10:05:32 +1000124if ini_has_option ${TEST_INI} ddd empty; then
125 passed "ini_has_option: ddd.empty present"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600126else
Ian Wienandfcdca052015-04-17 13:02:49 +1000127 failed "ini_has_option failed: ddd.empty not found"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600128fi
129
130# test non-empty option
Ian Wienandb997db62015-07-22 10:05:32 +1000131if ini_has_option ${TEST_INI} bbb handlers; then
132 passed "ini_has_option: bbb.handlers present"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600133else
Ian Wienandfcdca052015-04-17 13:02:49 +1000134 failed "ini_has_option failed: bbb.handlers not found"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600135fi
136
137# test changing empty option
Ian Wienandf44a0242015-07-22 10:34:47 +1000138iniset ${SUDO_ARG} ${TEST_INI} ddd empty "42"
Ian Wienandb997db62015-07-22 10:05:32 +1000139VAL=$(iniget ${TEST_INI} ddd empty)
140assert_equal "$VAL" "42" "change empty option"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600141
Andrea Frittolicd7d9562013-12-05 08:09:12 +0000142# test pipe in option
Ian Wienandf44a0242015-07-22 10:34:47 +1000143iniset ${SUDO_ARG} ${TEST_INI} aaa handlers "a|b"
Ian Wienandb997db62015-07-22 10:05:32 +1000144VAL=$(iniget ${TEST_INI} aaa handlers)
145assert_equal "$VAL" "a|b" "pipe in option"
Andrea Frittolicd7d9562013-12-05 08:09:12 +0000146
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600147# Test section not exist
Ian Wienandb997db62015-07-22 10:05:32 +1000148VAL=$(iniget ${TEST_INI} zzz handlers)
149assert_empty VAL "section does not exist"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600150
151# Test option not exist
Ian Wienandb997db62015-07-22 10:05:32 +1000152VAL=$(iniget ${TEST_INI} aaa debug)
153assert_empty VAL "option does not exist"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600154
Ian Wienandb997db62015-07-22 10:05:32 +1000155if ! ini_has_option ${TEST_INI} aaa debug; then
156 passed "ini_has_option: aaa.debug not present"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600157else
Ian Wienandfcdca052015-04-17 13:02:49 +1000158 failed "ini_has_option failed: aaa.debug"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600159fi
160
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600161# Test comments
Ian Wienandf44a0242015-07-22 10:34:47 +1000162inicomment ${SUDO_ARG} ${TEST_INI} aaa handlers
Ian Wienandb997db62015-07-22 10:05:32 +1000163VAL=$(iniget ${TEST_INI} aaa handlers)
164assert_empty VAL "test inicomment"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600165
166# Test multiple line iniset/iniget
Ian Wienandf44a0242015-07-22 10:34:47 +1000167iniset_multiline ${SUDO_ARG} ${TEST_INI} eee multi bar1 bar2
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600168
Ian Wienandb997db62015-07-22 10:05:32 +1000169VAL=$(iniget_multiline ${TEST_INI} eee multi)
170assert_equal "$VAL" "bar1 bar2" "iniget_multiline"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600171
172# Test iniadd with exiting values
Ian Wienandf44a0242015-07-22 10:34:47 +1000173iniadd ${SUDO_ARG} ${TEST_INI} eee multi bar3
Ian Wienandb997db62015-07-22 10:05:32 +1000174VAL=$(iniget_multiline ${TEST_INI} eee multi)
175assert_equal "$VAL" "bar1 bar2 bar3" "iniadd with existing values"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600176
177# Test iniadd with non-exiting values
Ian Wienandf44a0242015-07-22 10:34:47 +1000178iniadd ${SUDO_ARG} ${TEST_INI} eee non-multi foobar1 foobar2
Ian Wienandb997db62015-07-22 10:05:32 +1000179VAL=$(iniget_multiline ${TEST_INI} eee non-multi)
180assert_equal "$VAL" "foobar1 foobar2" "iniadd non-existing values"
Dean Troyer2ac8b3f2013-12-04 17:20:28 -0600181
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700182# Test inidelete
183del_cases="
184 del_separate_options
185 del_same_option
186 del_missing_option
187 del_missing_option_multi
188 del_no_options
189 del_no_section"
190
191for x in $del_cases; do
Ian Wienandf44a0242015-07-22 10:34:47 +1000192 inidelete ${SUDO_ARG} ${TEST_INI} $x a
Ian Wienandb997db62015-07-22 10:05:32 +1000193 VAL=$(iniget_multiline ${TEST_INI} $x a)
194 assert_empty VAL "inidelete $x"
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700195 if [ "$x" = "del_separate_options" -o \
196 "$x" = "del_missing_option" -o \
197 "$x" = "del_missing_option_multi" ]; then
Ian Wienandb997db62015-07-22 10:05:32 +1000198 VAL=$(iniget_multiline ${TEST_INI} $x b)
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700199 if [ "$VAL" = "c" -o "$VAL" = "c d" ]; then
Ian Wienandb997db62015-07-22 10:05:32 +1000200 passed "inidelete other_options $x"
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700201 else
Ian Wienandb997db62015-07-22 10:05:32 +1000202 failed "inidelete other_option $x: $VAL"
Doug Wiegley1f65fd62014-12-13 11:56:16 -0700203 fi
204 fi
205done
206
Ian Wienandcede7872015-07-22 13:36:12 +1000207# test file-creation
208iniset $SUDO_ARG ${INI_TMP_ETC_DIR}/test.new.ini test foo bar
209VAL=$(iniget ${INI_TMP_ETC_DIR}/test.new.ini test foo)
210assert_equal "$VAL" "bar" "iniset created file"
211
Ian Wienandf44a0242015-07-22 10:34:47 +1000212$SUDO rm -rf ${INI_TMP_DIR}
Ian Wienandfcdca052015-04-17 13:02:49 +1000213
214report_results