1251875Speter#! __ATF_SH__ 2251875Speter# Copyright 2012 Google Inc. 3251875Speter# All rights reserved. 4251875Speter# 5251875Speter# Redistribution and use in source and binary forms, with or without 6251875Speter# modification, are permitted provided that the following conditions are 7251875Speter# met: 8251875Speter# 9251875Speter# * Redistributions of source code must retain the above copyright 10251875Speter# notice, this list of conditions and the following disclaimer. 11251875Speter# * Redistributions in binary form must reproduce the above copyright 12251875Speter# notice, this list of conditions and the following disclaimer in the 13251875Speter# documentation and/or other materials provided with the distribution. 14251875Speter# * Neither the name of Google Inc. nor the names of its contributors 15251875Speter# may be used to endorse or promote products derived from this software 16251875Speter# without specific prior written permission. 17251875Speter# 18251875Speter# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19251875Speter# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20251875Speter# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21251875Speter# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22251875Speter# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23251875Speter# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24251875Speter# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25251875Speter# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26251875Speter# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27251875Speter# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28253734Speter# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29251875Speter 30251875Speter 31251875Speter. "${KYUA_ATF_COMPAT_PKGDATADIR:-__PKGDATADIR__}/tests_lib.subr" 32251875Speter 33251875Speter 34251875Speteratf_test_case all_pass 35251875Speterall_pass_body() { 36251875Speter create_test_program program1 pass skip 37251875Speter create_atffile Atffile 'prop: test-suite = "suite"' \ 38251875Speter 'tp: program1' 'tp: subdir' 39251875Speter 40251875Speter mkdir subdir 41251875Speter create_test_program subdir/program2 skip 42251875Speter create_atffile subdir/Atffile 'prop: test-suite = "suite"' \ 43251875Speter 'tp: program2' 44251875Speter 45251875Speter atf_check -s exit:0 -e ignore \ 46251875Speter -o match:'program1:pass -> passed' \ 47251875Speter -o match:'program1:skip -> skipped' \ 48251875Speter -o match:'subdir/program2:skip -> skipped' \ 49251875Speter -o match:'Committed action 1' \ 50251875Speter atf-run 51251875Speter} 52251875Speter 53251875Speter 54251875Speteratf_test_case some_fail 55251875Spetersome_fail_body() { 56251875Speter create_test_program program1 pass skip 57251875Speter create_atffile Atffile 'prop: test-suite = "suite"' \ 58251875Speter 'tp: program1' 'tp: subdir' 59251875Speter 60251875Speter mkdir subdir 61251875Speter create_atffile subdir/Atffile 'tp-glob: *' 62251875Speter 63251875Speter mkdir subdir/nested 64251875Speter create_test_program subdir/nested/program2 skip fail 65251875Speter create_atffile subdir/nested/Atffile 'prop: test-suite = "suite"' \ 66251875Speter 'tp-glob: program2*' 67251875Speter 68251875Speter atf_check -s exit:1 -e ignore \ 69251875Speter -o match:'program1:pass -> passed' \ 70251875Speter -o match:'program1:skip -> skipped' \ 71251875Speter -o match:'subdir/nested/program2:fail -> failed' \ 72251875Speter -o match:'subdir/nested/program2:skip -> skipped' \ 73251875Speter -o match:'Committed action 1' \ 74251875Speter atf-run 75251875Speter} 76251875Speter 77251875Speteratf_test_case prefer_kyuafiles 78251875Speterprefer_kyuafiles_body() { 79251875Speter create_test_program program1 pass skip 80251875Speter cat >Kyuafile <<EOF 81251875Spetersyntax('kyuafile', 1) 82251875Spetertest_suite('foo') 83251875Speteratf_test_program{name='program1'} 84251875SpeterEOF 85251875Speter echo "This file is invalid" >Atffile 86251875Speter 87251875Speter atf_check -s exit:0 -e ignore \ 88251875Speter -o match:'program1:pass -> passed' \ 89251875Speter -o match:'program1:skip -> skipped' \ 90251875Speter atf-run 91251875Speter} 92251875Speter 93251875Speter 94251875Speteratf_test_case selectors 95251875Speterselectors_body() { 96251875Speter create_test_program program1 pass skip 97251875Speter create_atffile Atffile 'prop: test-suite = "suite"' \ 98251875Speter 'tp: program1' 'tp: subdir' 99251875Speter 100251875Speter mkdir subdir 101251875Speter create_atffile subdir/Atffile 'tp-glob: *' 102251875Speter 103251875Speter mkdir subdir/nested 104251875Speter create_test_program subdir/nested/program2 skip fail 105251875Speter create_atffile subdir/nested/Atffile 'prop: test-suite = "suite"' \ 106251875Speter 'tp-glob: program2*' 107251875Speter 108251875Speter atf_check -s exit:1 -e ignore \ 109251875Speter -o match:'program1:pass -> passed' \ 110251875Speter -o match:'program1:skip -> skipped' \ 111251875Speter -o match:'subdir/nested/program2:fail -> failed' \ 112251875Speter -o match:'subdir/nested/program2:skip -> skipped' \ 113251875Speter -o match:'Committed action 1' \ 114251875Speter atf-run 115251875Speter 116251875Speter atf_check -s exit:0 -e ignore \ 117251875Speter -o match:'program1:pass -> passed' \ 118251875Speter -o not-match:'program1:skip -> skipped' \ 119251875Speter -o not-match:'subdir/nested/program2:fail -> failed' \ 120251875Speter -o match:'subdir/nested/program2:skip -> skipped' \ 121251875Speter -o match:'Committed action 2' \ 122251875Speter atf-run program1:pass subdir/nested/program2:skip 123251875Speter 124251875Speter atf_check -s exit:1 -e ignore \ 125251875Speter -o not-match:'program1:pass -> passed' \ 126251875Speter -o not-match:'program1:skip -> skipped' \ 127251875Speter -o match:'subdir/nested/program2:fail -> failed' \ 128251875Speter -o match:'subdir/nested/program2:skip -> skipped' \ 129251875Speter -o match:'Committed action 3' \ 130251875Speter atf-run subdir/nested/program2 131251875Speter} 132251875Speter 133251875Speter 134251875Speteratf_test_case config__priorities 135251875Speterconfig__priorities_body() 136251875Speter{ 137251875Speter mkdir system 138251875Speter export ATF_CONFDIR="$(pwd)/system" 139251875Speter mkdir user 140251875Speter mkdir user/.atf 141251875Speter export HOME="$(pwd)/user" 142251875Speter 143251875Speter create_test_program helper config 144251875Speter create_atffile Atffile 'prop: test-suite = "irrelevant"' 'tp: helper' 145251875Speter 146251875Speter echo "Checking system-wide configuration only" 147251875Speter create_config system/common.conf ' unprivileged-user = "nobody"' 148251875Speter atf_check -s exit:0 -o 'match:helper:config -> passed' -e ignore atf-run 149251875Speter atf_check -s exit:0 -o 'inline:unprivileged-user = nobody\n' \ 150251875Speter cat config.out 151251875Speter 152251875Speter echo "Checking user-specific overrides" 153251875Speter create_config user/.atf/common.conf ' unprivileged-user = "root"' 154251875Speter atf_check -s exit:0 -o 'match:helper:config -> passed' -e ignore atf-run 155251875Speter atf_check -s exit:0 -o 'inline:unprivileged-user = root\n' \ 156251875Speter cat config.out 157251875Speter 158251875Speter echo "Checking command-line overrides" 159251875Speter atf_check -s exit:0 -o 'match:helper:config -> passed' -e ignore atf-run \ 160251875Speter -v"unprivileged-user=$(id -u -n)" 161251875Speter atf_check -s exit:0 -o "inline:unprivileged-user = $(id -u -n)\n" \ 162251875Speter cat config.out 163251875Speter} 164251875Speter 165251875Speter 166251875Speteratf_test_case config__test_suites__files 167251875Speterconfig__test_suites__files_body() 168251875Speter{ 169251875Speter mkdir system 170251875Speter export ATF_CONFDIR="$(pwd)/system" 171251875Speter 172251875Speter create_config system/suite1.conf 'var1 = "var1-for-suite1"' \ 173251875Speter 'var2 = "var2-for-suite1"' 174251875Speter create_config system/suite2.conf 'var1 = "var1-for-suite2"' \ 175251875Speter 'var2 = "var2-for-suite2"' 176251875Speter 177251875Speter create_test_program helper1 config 178251875Speter create_atffile Atffile 'prop: test-suite = "suite1"' 'tp: helper1' \ 179251875Speter 'tp: subdir' 180251875Speter mkdir subdir 181251875Speter create_test_program subdir/helper2 config 182 create_atffile subdir/Atffile 'prop: test-suite = "suite2"' 'tp: helper2' 183 184 atf_check -s exit:0 -o ignore -e ignore atf-run helper1 185 atf_check -s exit:0 -o 'match:var1 = var1-for-suite1' \ 186 -o 'match:var2 = var2-for-suite1' -o 'not-match:suite2' \ 187 cat config.out 188 189 atf_check -s exit:0 -o ignore -e ignore atf-run subdir/helper2 190 atf_check -s exit:0 -o 'match:var1 = var1-for-suite2' \ 191 -o 'match:var2 = var2-for-suite2' -o 'not-match:suite1' \ 192 cat config.out 193} 194 195 196atf_test_case config__test_suites__vflags 197config__test_suites__vflags_body() 198{ 199 create_test_program helper1 config 200 create_atffile Atffile 'prop: test-suite = "suite1"' 'tp: helper1' \ 201 'tp: subdir' 202 mkdir subdir 203 create_test_program subdir/helper2 config 204 create_atffile subdir/Atffile 'prop: test-suite = "suite2"' 'tp: helper2' 205 206 atf_check -s exit:0 -o ignore -e ignore atf-run -v var1=foo helper1 207 atf_check -s exit:0 -o 'match:var1 = foo' cat config.out 208 209 atf_check -s exit:0 -o ignore -e ignore atf-run -v var1=bar helper1 210 atf_check -s exit:0 -o 'match:var1 = bar' cat config.out 211} 212 213 214atf_test_case unknown_option 215unknown_option_body() { 216 atf_check -s exit:1 -o empty -e match:'E: Unknown option -Z' \ 217 atf-run -Z -A 218} 219 220 221atf_init_test_cases() { 222 atf_add_test_case all_pass 223 atf_add_test_case some_fail 224 atf_add_test_case selectors 225 226 atf_add_test_case prefer_kyuafiles 227 228 atf_add_test_case config__priorities 229 atf_add_test_case config__test_suites__files 230 atf_add_test_case config__test_suites__vflags 231 232 atf_add_test_case unknown_option 233} 234