1 1.1 jmmv # Copyright 2011 Google Inc. 2 1.1 jmmv # All rights reserved. 3 1.1 jmmv # 4 1.1 jmmv # Redistribution and use in source and binary forms, with or without 5 1.1 jmmv # modification, are permitted provided that the following conditions are 6 1.1 jmmv # met: 7 1.1 jmmv # 8 1.1 jmmv # * Redistributions of source code must retain the above copyright 9 1.1 jmmv # notice, this list of conditions and the following disclaimer. 10 1.1 jmmv # * Redistributions in binary form must reproduce the above copyright 11 1.1 jmmv # notice, this list of conditions and the following disclaimer in the 12 1.1 jmmv # documentation and/or other materials provided with the distribution. 13 1.1 jmmv # * Neither the name of Google Inc. nor the names of its contributors 14 1.1 jmmv # may be used to endorse or promote products derived from this software 15 1.1 jmmv # without specific prior written permission. 16 1.1 jmmv # 17 1.1 jmmv # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 1.1 jmmv # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19 1.1 jmmv # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20 1.1 jmmv # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21 1.1 jmmv # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22 1.1 jmmv # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 1.1 jmmv # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 1.1 jmmv # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 1.1 jmmv # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 1.1 jmmv # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 1.1 jmmv # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 1.1 jmmv 29 1.1 jmmv 30 1.1 jmmv utils_test_case defaults 31 1.1 jmmv defaults_body() { 32 1.1 jmmv atf_check -s exit:0 \ 33 1.1 jmmv -o match:'^architecture = ' \ 34 1.1 jmmv -o match:'^platform = ' \ 35 1.1 jmmv kyua config 36 1.1 jmmv } 37 1.1 jmmv 38 1.1 jmmv 39 1.1 jmmv utils_test_case all 40 1.1 jmmv all_body() { 41 1.1 jmmv mkdir "${HOME}/.kyua" 42 1.1 jmmv cat >"${HOME}/.kyua/kyua.conf" <<EOF 43 1.1 jmmv syntax(2) 44 1.1 jmmv architecture = "my-architecture" 45 1.1 jmmv platform = "my-platform" 46 1.1 jmmv unprivileged_user = "$(id -u -n)" 47 1.1 jmmv test_suites.suite1["X-the-variable"] = "value1" 48 1.1 jmmv test_suites.suite2["X-the-variable"] = "value2" 49 1.1 jmmv EOF 50 1.1 jmmv 51 1.1 jmmv cat >expout <<EOF 52 1.1 jmmv architecture = my-architecture 53 1.1 jmmv platform = my-platform 54 1.1 jmmv test_suites.suite1.X-the-variable = value1 55 1.1 jmmv test_suites.suite2.X-the-variable = value2 56 1.1 jmmv unprivileged_user = $(id -u -n) 57 1.1 jmmv EOF 58 1.1 jmmv 59 1.1 jmmv atf_check -s exit:0 -o file:expout -e empty kyua config 60 1.1 jmmv } 61 1.1 jmmv 62 1.1 jmmv 63 1.1 jmmv utils_test_case one__ok 64 1.1 jmmv one__ok_body() { 65 1.1 jmmv mkdir "${HOME}/.kyua" 66 1.1 jmmv cat >"${HOME}/.kyua/kyua.conf" <<EOF 67 1.1 jmmv syntax(2) 68 1.1 jmmv test_suites.first["X-one"] = 1 69 1.1 jmmv test_suites.first["X-two"] = 2 70 1.1 jmmv EOF 71 1.1 jmmv 72 1.1 jmmv cat >expout <<EOF 73 1.1 jmmv test_suites.first.X-two = 2 74 1.1 jmmv EOF 75 1.1 jmmv 76 1.1 jmmv atf_check -s exit:0 -o file:expout -e empty kyua config \ 77 1.1 jmmv test_suites.first.X-two 78 1.1 jmmv } 79 1.1 jmmv 80 1.1 jmmv 81 1.1 jmmv utils_test_case one__fail 82 1.1 jmmv one__fail_body() { 83 1.1 jmmv mkdir "${HOME}/.kyua" 84 1.1 jmmv cat >"${HOME}/.kyua/kyua.conf" <<EOF 85 1.1 jmmv syntax(2) 86 1.1 jmmv test_suites.first["X-one"] = 1 87 1.1 jmmv test_suites.first["X-three"] = 3 88 1.1 jmmv EOF 89 1.1 jmmv 90 1.1 jmmv cat >experr <<EOF 91 1.1 jmmv kyua: W: 'test_suites.first.X-two' is not defined. 92 1.1 jmmv EOF 93 1.1 jmmv 94 1.1 jmmv atf_check -s exit:1 -o empty -e file:experr kyua config \ 95 1.1 jmmv test_suites.first.X-two 96 1.1 jmmv } 97 1.1 jmmv 98 1.1 jmmv 99 1.1 jmmv utils_test_case many__ok 100 1.1 jmmv many__ok_body() { 101 1.1 jmmv mkdir "${HOME}/.kyua" 102 1.1 jmmv cat >"${HOME}/.kyua/kyua.conf" <<EOF 103 1.1 jmmv syntax(2) 104 1.1 jmmv test_suites.first["X-one"] = 1 105 1.1 jmmv test_suites.first["X-two"] = 2 106 1.1 jmmv EOF 107 1.1 jmmv 108 1.1 jmmv cat >expout <<EOF 109 1.1 jmmv test_suites.first.X-two = 2 110 1.1 jmmv test_suites.first.X-one = 1 111 1.1 jmmv EOF 112 1.1 jmmv 113 1.1 jmmv atf_check -s exit:0 -o file:expout -e empty kyua config \ 114 1.1 jmmv test_suites.first.X-two \ 115 1.1 jmmv test_suites.first.X-one # Inverse order on purpose. 116 1.1 jmmv } 117 1.1 jmmv 118 1.1 jmmv 119 1.1 jmmv utils_test_case many__fail 120 1.1 jmmv many__fail_body() { 121 1.1 jmmv mkdir "${HOME}/.kyua" 122 1.1 jmmv cat >"${HOME}/.kyua/kyua.conf" <<EOF 123 1.1 jmmv syntax(2) 124 1.1 jmmv test_suites.first["X-one"] = 1 125 1.1 jmmv test_suites.first["X-three"] = 3 126 1.1 jmmv EOF 127 1.1 jmmv 128 1.1 jmmv cat >expout <<EOF 129 1.1 jmmv test_suites.first.X-one = 1 130 1.1 jmmv test_suites.first.X-three = 3 131 1.1 jmmv EOF 132 1.1 jmmv 133 1.1 jmmv cat >experr <<EOF 134 1.1 jmmv kyua: W: 'test_suites.first.X-two' is not defined. 135 1.1 jmmv kyua: W: 'test_suites.first.X-fourth' is not defined. 136 1.1 jmmv EOF 137 1.1 jmmv 138 1.1 jmmv atf_check -s exit:1 -o file:expout -e file:experr kyua config \ 139 1.1 jmmv test_suites.first.X-one test_suites.first.X-two \ 140 1.1 jmmv test_suites.first.X-three test_suites.first.X-fourth 141 1.1 jmmv } 142 1.1 jmmv 143 1.1 jmmv 144 1.1 jmmv utils_test_case config_flag__default_system 145 1.1 jmmv config_flag__default_system_body() { 146 1.1 jmmv cat >kyua.conf <<EOF 147 1.1 jmmv syntax(2) 148 1.1 jmmv test_suites.foo["X-var"] = "baz" 149 1.1 jmmv EOF 150 1.1 jmmv 151 1.1 jmmv atf_check -s exit:1 -o empty \ 152 1.1 jmmv -e match:"kyua: W: 'test_suites.foo.X-var'.*not defined" \ 153 1.1 jmmv kyua config test_suites.foo.X-var 154 1.1 jmmv export KYUA_CONFDIR="$(pwd)" 155 1.1 jmmv atf_check -s exit:0 -o match:"foo.X-var = baz" -e empty \ 156 1.1 jmmv kyua config test_suites.foo.X-var 157 1.1 jmmv } 158 1.1 jmmv 159 1.1 jmmv 160 1.1 jmmv utils_test_case config_flag__default_home 161 1.1 jmmv config_flag__default_home_body() { 162 1.1 jmmv cat >kyua.conf <<EOF 163 1.1 jmmv syntax(2) 164 1.1 jmmv test_suites.foo["X-var"] = "bar" 165 1.1 jmmv EOF 166 1.1 jmmv export KYUA_CONFDIR="$(pwd)" 167 1.1 jmmv atf_check -s exit:0 -o match:"test_suites.foo.X-var = bar" -e empty \ 168 1.1 jmmv kyua config test_suites.foo.X-var 169 1.1 jmmv 170 1.1 jmmv # The previously-created "system-wide" file has to be ignored. 171 1.1 jmmv mkdir .kyua 172 1.1 jmmv cat >.kyua/kyua.conf <<EOF 173 1.1 jmmv syntax(2) 174 1.1 jmmv test_suites.foo["X-var"] = "baz" 175 1.1 jmmv EOF 176 1.1 jmmv atf_check -s exit:0 -o match:"test_suites.foo.X-var = baz" -e empty \ 177 1.1 jmmv kyua config test_suites.foo.X-var 178 1.1 jmmv } 179 1.1 jmmv 180 1.1 jmmv 181 1.1 jmmv utils_test_case config_flag__explicit__ok 182 1.1 jmmv config_flag__explicit__ok_body() { 183 1.1 jmmv cat >kyua.conf <<EOF 184 1.1 jmmv syntax(2) 185 1.1 jmmv test_suites.foo["X-var"] = "baz" 186 1.1 jmmv EOF 187 1.1 jmmv 188 1.1 jmmv atf_check -s exit:1 -o empty \ 189 1.1 jmmv -e match:"kyua: W: 'test_suites.foo.X-var'.*not defined" \ 190 1.1 jmmv kyua config test_suites.foo.X-var 191 1.1 jmmv atf_check -s exit:0 -o match:"test_suites.foo.X-var = baz" -e empty \ 192 1.1 jmmv kyua -c kyua.conf config test_suites.foo.X-var 193 1.1 jmmv atf_check -s exit:0 -o match:"test_suites.foo.X-var = baz" -e empty \ 194 1.1 jmmv kyua --config=kyua.conf config test_suites.foo.X-var 195 1.1 jmmv } 196 1.1 jmmv 197 1.1 jmmv 198 1.1 jmmv utils_test_case config_flag__explicit__disable 199 1.1 jmmv config_flag__explicit__disable_body() { 200 1.1 jmmv cat >kyua.conf <<EOF 201 1.1 jmmv syntax(2) 202 1.1 jmmv test_suites.foo["X-var"] = "baz" 203 1.1 jmmv EOF 204 1.1 jmmv mkdir .kyua 205 1.1 jmmv cp kyua.conf .kyua/kyua.conf 206 1.1 jmmv export KYUA_CONFDIR="$(pwd)" 207 1.1 jmmv 208 1.1 jmmv atf_check -s exit:0 -o match:"test_suites.foo.X-var = baz" -e empty \ 209 1.1 jmmv kyua config test_suites.foo.X-var 210 1.1 jmmv atf_check -s exit:1 -o empty \ 211 1.1 jmmv -e match:"kyua: W: 'test_suites.foo.X-var'.*not defined" \ 212 1.1 jmmv kyua --config=none config test_suites.foo.X-var 213 1.1 jmmv } 214 1.1 jmmv 215 1.1 jmmv 216 1.1 jmmv utils_test_case config_flag__explicit__missing_file 217 1.1 jmmv config_flag__explicit__missing_file_body() { 218 1.1 jmmv cat >experr <<EOF 219 1.1 jmmv kyua: E: Load of 'foo' failed: File 'foo' not found. 220 1.1 jmmv EOF 221 1.1 jmmv atf_check -s exit:2 -o empty -e file:experr kyua --config=foo config 222 1.1 jmmv } 223 1.1 jmmv 224 1.1 jmmv 225 1.1 jmmv utils_test_case config_flag__explicit__bad_file 226 1.1 jmmv config_flag__explicit__bad_file_body() { 227 1.1 jmmv touch custom 228 1.1 jmmv atf_check -s exit:2 -o empty -e match:"No syntax defined" \ 229 1.1 jmmv kyua --config=custom config 230 1.1 jmmv } 231 1.1 jmmv 232 1.1 jmmv 233 1.1 jmmv utils_test_case variable_flag__no_config 234 1.1 jmmv variable_flag__no_config_body() { 235 1.1 jmmv atf_check -s exit:0 \ 236 1.1 jmmv -o match:'test_suites.suite1.X-the-variable = value1' \ 237 1.1 jmmv -o match:'test_suites.suite2.X-the-variable = value2' \ 238 1.1 jmmv -e empty \ 239 1.1 jmmv kyua \ 240 1.1 jmmv -v "test_suites.suite1.X-the-variable=value1" \ 241 1.1 jmmv -v "test_suites.suite2.X-the-variable=value2" \ 242 1.1 jmmv config 243 1.1 jmmv 244 1.1 jmmv atf_check -s exit:0 \ 245 1.1 jmmv -o match:'test_suites.suite1.X-the-variable = value1' \ 246 1.1 jmmv -o match:'test_suites.suite2.X-the-variable = value2' \ 247 1.1 jmmv -e empty \ 248 1.1 jmmv kyua \ 249 1.1 jmmv --variable="test_suites.suite1.X-the-variable=value1" \ 250 1.1 jmmv --variable="test_suites.suite2.X-the-variable=value2" \ 251 1.1 jmmv config 252 1.1 jmmv } 253 1.1 jmmv 254 1.1 jmmv 255 1.1 jmmv utils_test_case variable_flag__override_default_config 256 1.1 jmmv variable_flag__override_default_config_body() { 257 1.1 jmmv mkdir "${HOME}/.kyua" 258 1.1 jmmv cat >"${HOME}/.kyua/kyua.conf" <<EOF 259 1.1 jmmv syntax(2) 260 1.1 jmmv test_suites.suite1["X-the-variable"] = "value1" 261 1.1 jmmv test_suites.suite2["X-the-variable"] = "should not be used" 262 1.1 jmmv EOF 263 1.1 jmmv 264 1.1 jmmv atf_check -s exit:0 \ 265 1.1 jmmv -o match:'test_suites.suite1.X-the-variable = value1' \ 266 1.1 jmmv -o match:'test_suites.suite2.X-the-variable = overriden' \ 267 1.1 jmmv -o match:'test_suites.suite3.X-the-variable = new' \ 268 1.1 jmmv -e empty kyua \ 269 1.1 jmmv -v "test_suites.suite2.X-the-variable=overriden" \ 270 1.1 jmmv -v "test_suites.suite3.X-the-variable=new" \ 271 1.1 jmmv config 272 1.1 jmmv 273 1.1 jmmv atf_check -s exit:0 \ 274 1.1 jmmv -o match:'test_suites.suite1.X-the-variable = value1' \ 275 1.1 jmmv -o match:'test_suites.suite2.X-the-variable = overriden' \ 276 1.1 jmmv -o match:'test_suites.suite3.X-the-variable = new' \ 277 1.1 jmmv -e empty kyua \ 278 1.1 jmmv --variable="test_suites.suite2.X-the-variable=overriden" \ 279 1.1 jmmv --variable="test_suites.suite3.X-the-variable=new" \ 280 1.1 jmmv config 281 1.1 jmmv } 282 1.1 jmmv 283 1.1 jmmv 284 1.1 jmmv utils_test_case variable_flag__override_custom_config 285 1.1 jmmv variable_flag__override_custom_config_body() { 286 1.1 jmmv cat >config <<EOF 287 1.1 jmmv syntax(2) 288 1.1 jmmv test_suites.suite1["X-the-variable"] = "value1" 289 1.1 jmmv test_suites.suite2["X-the-variable"] = "should not be used" 290 1.1 jmmv EOF 291 1.1 jmmv 292 1.1 jmmv atf_check -s exit:0 \ 293 1.1 jmmv -o match:'test_suites.suite2.X-the-variable = overriden' \ 294 1.1 jmmv -e empty kyua -c config \ 295 1.1 jmmv -v "test_suites.suite2.X-the-variable=overriden" config 296 1.1 jmmv 297 1.1 jmmv atf_check -s exit:0 \ 298 1.1 jmmv -o match:'test_suites.suite2.X-the-variable = overriden' \ 299 1.1 jmmv -e empty kyua -c config \ 300 1.1 jmmv --variable="test_suites.suite2.X-the-variable=overriden" config 301 1.1 jmmv } 302 1.1 jmmv 303 1.1 jmmv 304 1.1 jmmv utils_test_case variable_flag__invalid 305 1.1 jmmv variable_flag__invalid_body() { 306 1.1 jmmv cat >experr <<EOF 307 1.1 jmmv Usage error: Invalid argument '' for option --variable: Argument does not have the form 'K=V'. 308 1.1 jmmv Type 'kyua help' for usage information. 309 1.1 jmmv EOF 310 1.1 jmmv atf_check -s exit:3 -o empty -e file:experr kyua \ 311 1.1 jmmv -v "test_suites.a.b=c" -v "" config 312 1.1 jmmv 313 1.1 jmmv cat >experr <<EOF 314 1.1 jmmv kyua: E: Unknown configuration property 'foo'. 315 1.1 jmmv EOF 316 1.1 jmmv atf_check -s exit:2 -o empty -e file:experr kyua \ 317 1.1 jmmv -v "test_suites.a.b=c" -v "foo=bar" config 318 1.1 jmmv } 319 1.1 jmmv 320 1.1 jmmv 321 1.1 jmmv atf_init_test_cases() { 322 1.1 jmmv atf_add_test_case defaults 323 1.1 jmmv atf_add_test_case all 324 1.1 jmmv atf_add_test_case one__ok 325 1.1 jmmv atf_add_test_case one__fail 326 1.1 jmmv atf_add_test_case many__ok 327 1.1 jmmv atf_add_test_case many__fail 328 1.1 jmmv 329 1.1 jmmv atf_add_test_case config_flag__default_system 330 1.1 jmmv atf_add_test_case config_flag__default_home 331 1.1 jmmv atf_add_test_case config_flag__explicit__ok 332 1.1 jmmv atf_add_test_case config_flag__explicit__disable 333 1.1 jmmv atf_add_test_case config_flag__explicit__missing_file 334 1.1 jmmv atf_add_test_case config_flag__explicit__bad_file 335 1.1 jmmv 336 1.1 jmmv atf_add_test_case variable_flag__no_config 337 1.1 jmmv atf_add_test_case variable_flag__override_default_config 338 1.1 jmmv atf_add_test_case variable_flag__override_custom_config 339 1.1 jmmv atf_add_test_case variable_flag__invalid 340 1.1 jmmv } 341