triggers.sh
1 #! /usr/bin/env atf-sh 2 3 . $(atf_get_srcdir)/test_environment.sh 4 5 tests_init \ 6 cleanup_lua \ 7 deferred \ 8 glob_trigger \ 9 regexp_trigger \ 10 path_trigger \ 11 pkg_exec_sandbox \ 12 pkg_exec_no_sandbox \ 13 pkg_add \ 14 perpackage_pre_install \ 15 perpackage_post_install \ 16 perpackage_pre_deinstall \ 17 perpackage_post_deinstall 18 19 cleanup_lua_body() { 20 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "test" "test" "1" "/" 21 mkdir trigger_dir/ 22 cat << EOF >> trigger_dir/trigger.ucl 23 path: [ "/" ] 24 cleanup: { 25 type: lua 26 script: <<EOS 27 print "Cleaning up" 28 EOS 29 } 30 trigger: { 31 type: lua 32 script: <<EOS 33 return 0 34 EOS 35 } 36 EOF 37 echo ${TMPDIR}/trigger_dir/trigger.ucl > plist 38 atf_check pkg create -M test.ucl -p plist 39 mkdir target 40 atf_check pkg -o REPOS_DIR=/dev/null -r ${TMPDIR}/target install -qfy ${TMPDIR}/test-1.pkg 41 unset PKG_TRIGGERS_DIR 42 atf_check pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="${TMPDIR}/trigger_dir" install -qfy ${TMPDIR}/test-1.pkg 43 atf_check -o inline:"Cleaning up\n" pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="${TMPDIR}/trigger_dir" delete -qy test 44 } 45 46 deferred_body() { 47 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "test" "test" "1" "/" 48 mkdir trigger_dir/ 49 cat << EOF >> trigger_dir/trigger.ucl 50 path_glob: [ "/*" ] 51 trigger: { 52 type: lua 53 sandbox: false 54 script: <<EOS 55 print("deferred " .. arg[1]) 56 EOS 57 } 58 EOF 59 echo trigger_dir/trigger.ucl > plist 60 atf_check pkg create -M test.ucl -p plist -r . 61 mkdir target 62 unset PKG_TRIGGERS_DIR 63 unset PKG_DBDIR 64 atf_check pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="/trigger_dir" -r ${TMPDIR}/target install -qfy ${TMPDIR}/test-1.pkg 65 OUTPUT='--begin args 66 -- /trigger_dir 67 --end args 68 -- 69 print("deferred " .. arg[1]) 70 ' 71 atf_check -o inline:"${OUTPUT}" cat ${TMPDIR}/target/var/db/pkg/triggers/* 72 atf_check -o inline:"deferred /trigger_dir\n" pkg -o PKG_DBDIR=${TMPDIR}/target/var/db/pkg triggers 73 # test the deferred trigger has been removed 74 atf_check ls ${TMPDIR}/target/var/db/pkg/triggers 75 } 76 77 glob_trigger_body() { 78 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "test" "test" "1" "/" 79 mkdir trigger_dir/ 80 cat << EOF >> trigger_dir/trigger.ucl 81 path_glob: [ "/*" ] 82 trigger: { 83 type: lua 84 script: <<EOS 85 print("triggered " .. arg[1]) 86 EOS 87 } 88 EOF 89 echo ${TMPDIR}/trigger_dir/trigger.ucl > plist 90 atf_check pkg create -M test.ucl -p plist 91 mkdir target 92 unset PKG_TRIGGERS_DIR 93 atf_check -o inline:"triggered ${TMPDIR}/trigger_dir\n" pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="${TMPDIR}/trigger_dir" install -qfy ${TMPDIR}/test-1.pkg 94 } 95 96 regexp_trigger_body() { 97 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "test" "test" "1" "/" 98 mkdir trigger_dir/ 99 cat << EOF >> trigger_dir/trigger.ucl 100 path_regexp: [ ".*trigger.*" ] 101 trigger: { 102 type: lua 103 script: <<EOS 104 print("triggered " .. arg[1]) 105 EOS 106 } 107 EOF 108 echo ${TMPDIR}/trigger_dir/trigger.ucl > plist 109 atf_check pkg create -M test.ucl -p plist 110 mkdir target 111 unset PKG_TRIGGERS_DIR 112 atf_check -o inline:"triggered ${TMPDIR}/trigger_dir\n" pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="${TMPDIR}/trigger_dir" install -qfy ${TMPDIR}/test-1.pkg 113 } 114 115 path_trigger_body() { 116 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "test" "test" "1" "/" 117 mkdir trigger_dir/ 118 cat << EOF >> trigger_dir/trigger.ucl 119 path: [ "${TMPDIR}/trigger_dir" ] 120 trigger: { 121 type: lua 122 script: <<EOS 123 print("triggered " .. arg[1]) 124 EOS 125 } 126 EOF 127 echo ${TMPDIR}/trigger_dir/trigger.ucl > plist 128 atf_check pkg create -M test.ucl -p plist 129 mkdir target 130 unset PKG_TRIGGERS_DIR 131 atf_check -o inline:"triggered ${TMPDIR}/trigger_dir\n" pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="${TMPDIR}/trigger_dir" install -qfy ${TMPDIR}/test-1.pkg 132 } 133 134 pkg_exec_sandbox_body() { 135 atf_skip_on Darwin Requires capsicum 136 atf_skip_on Linux Requires capsicum 137 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "test" "test" "1" "/" 138 mkdir trigger_dir/ 139 cat << EOF >> trigger_dir/trigger.ucl 140 path_glob: [ "/*" ] 141 trigger: { 142 type: lua 143 script: <<EOS 144 pkg.exec({"echo", "plop"}) 145 EOS 146 } 147 EOF 148 echo ${TMPDIR}/trigger_dir/trigger.ucl > plist 149 atf_check pkg create -M test.ucl -p plist 150 mkdir target 151 unset PKG_TRIGGERS_DIR 152 atf_check -e inline:"pkg: Failed to execute lua trigger: [string \"pkg.exec({\"echo\", \"plop\"})\"]:1: pkg.exec not available in sandbox\npkg: lua script failed\n" pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="${TMPDIR}/trigger_dir" install -qfy ${TMPDIR}/test-1.pkg 153 } 154 155 pkg_exec_no_sandbox_body() { 156 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "test" "test" "1" "/" 157 mkdir trigger_dir/ 158 cat << EOF >> trigger_dir/trigger.ucl 159 path_glob: [ "/*" ] 160 trigger: { 161 type: lua 162 sandbox: false 163 script: <<EOS 164 pkg.exec({"echo", "plop"}) 165 EOS 166 } 167 EOF 168 echo ${TMPDIR}/trigger_dir/trigger.ucl > plist 169 atf_check pkg create -M test.ucl -p plist 170 mkdir target 171 unset PKG_TRIGGERS_DIR 172 atf_check -o inline:"plop\n" pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="${TMPDIR}/trigger_dir" install -qfy ${TMPDIR}/test-1.pkg 173 } 174 175 pkg_add_body() { 176 atf_check -s exit:0 ${RESOURCEDIR}/test_subr.sh new_pkg "test" "test" "1" "/" 177 mkdir trigger_dir/ 178 cat << EOF >> trigger_dir/trigger.ucl 179 path_glob: [ "/*" ] 180 trigger: { 181 type: lua 182 sandbox: false 183 script: <<EOS 184 print("plop") 185 EOS 186 } 187 EOF 188 echo "${TMPDIR}"/trigger_dir/trigger.ucl > plist 189 atf_check pkg create -M test.ucl -p plist 190 191 atf_check -s exit:0 ${RESOURCEDIR}/test_subr.sh new_pkg "meh" "meh" "1" "/" 192 cat << EOF >> meh.ucl 193 deps: { test: { version: "1", origin: "dontcare" } } 194 EOF 195 echo "@dir ${TMPDIR}"/trigger_dir/ > plist 196 mkdir target 197 unset PKG_TRIGGERS_DIR 198 atf_check pkg create -M meh.ucl -p plist 199 OUTPUT="Installing meh-1... 200 \`-- Installing test-1... 201 \`-- Extracting test-1: done 202 Extracting meh-1: done 203 ==> Running trigger: trigger.ucl 204 plop 205 " 206 atf_check -o inline:"${OUTPUT}" pkg -o PKG_TRIGGERS_DIR="${TMPDIR}/trigger_dir" add meh-1.pkg 207 } 208 209 perpackage_pre_install_body() { 210 # Create a trigger in the pre_install/ subdirectory 211 mkdir -p target/trigger_dir/pre_install/ 212 cat << EOF >> target/trigger_dir/pre_install/ldconfig.ucl 213 path_regexp: [ ".*/ldconfig" ] 214 trigger: { 215 type: lua 216 sandbox: false 217 script: <<EOS 218 print("ldconfig: pre_install for " .. pkg_name .. "-" .. pkg_version) 219 print("upgrade: " .. tostring(pkg_upgrade)) 220 for i, v in ipairs(arg) do 221 print(" path: " .. v) 222 end 223 EOS 224 } 225 EOF 226 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "mylib" "mylib" "1.0" "/usr/local" 227 mkdir -p usr/local/libdata/ldconfig/ 228 echo "# ldconfig hints" > usr/local/libdata/ldconfig/mylib.conf 229 echo /usr/local/libdata/ldconfig/mylib.conf > plist 230 atf_check pkg create -M mylib.ucl -p plist -r . 231 unset PKG_TRIGGERS_DIR 232 atf_check -o match:"ldconfig: pre_install for mylib-1.0" \ 233 -o match:"upgrade: false" \ 234 -o match:"path: /usr/local/libdata/ldconfig" \ 235 pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="/trigger_dir" -r ${TMPDIR}/target install -qfy ${TMPDIR}/mylib-1.0.pkg 236 } 237 238 perpackage_post_install_body() { 239 # Create a trigger in the post_install/ subdirectory 240 mkdir -p target/trigger_dir/post_install/ 241 cat << EOF >> target/trigger_dir/post_install/ldconfig.ucl 242 path_regexp: [ ".*/ldconfig" ] 243 trigger: { 244 type: lua 245 sandbox: false 246 script: <<EOS 247 print("ldconfig: post_install for " .. pkg_name .. "-" .. pkg_version) 248 print("upgrade: " .. tostring(pkg_upgrade)) 249 for i, v in ipairs(arg) do 250 print(" path: " .. v) 251 end 252 EOS 253 } 254 EOF 255 # Create a package that installs a file into /usr/local/libdata/ldconfig/ 256 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "mylib" "mylib" "1.0" "/usr/local" 257 mkdir -p usr/local/libdata/ldconfig/ 258 echo "# ldconfig hints" > usr/local/libdata/ldconfig/mylib.conf 259 echo /usr/local/libdata/ldconfig/mylib.conf > plist 260 atf_check pkg create -M mylib.ucl -p plist -r . 261 unset PKG_TRIGGERS_DIR 262 atf_check -o match:"ldconfig: post_install for mylib-1.0" \ 263 -o match:"upgrade: false" \ 264 -o match:"path: /usr/local/libdata/ldconfig" \ 265 pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="/trigger_dir" -r ${TMPDIR}/target install -qfy ${TMPDIR}/mylib-1.0.pkg 266 } 267 268 perpackage_pre_deinstall_body() { 269 # Install a package first, then delete it with a pre_deinstall trigger 270 mkdir -p target/trigger_dir/pre_deinstall/ 271 cat << EOF >> target/trigger_dir/pre_deinstall/ldconfig.ucl 272 path_regexp: [ ".*/ldconfig" ] 273 trigger: { 274 type: lua 275 sandbox: false 276 script: <<EOS 277 print("ldconfig: pre_deinstall for " .. pkg_name .. "-" .. pkg_version) 278 print("upgrade: " .. tostring(pkg_upgrade)) 279 for i, v in ipairs(arg) do 280 print(" path: " .. v) 281 end 282 EOS 283 } 284 EOF 285 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "mylib" "mylib" "1.0" "/usr/local" 286 mkdir -p usr/local/libdata/ldconfig/ 287 echo "# ldconfig hints" > usr/local/libdata/ldconfig/mylib.conf 288 echo /usr/local/libdata/ldconfig/mylib.conf > plist 289 atf_check pkg create -M mylib.ucl -p plist -r . 290 unset PKG_TRIGGERS_DIR 291 atf_check pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="/trigger_dir" -r ${TMPDIR}/target install -qfy ${TMPDIR}/mylib-1.0.pkg 292 atf_check -o match:"ldconfig: pre_deinstall for mylib-1.0" \ 293 -o match:"upgrade: false" \ 294 -o match:"path: /usr/local/libdata/ldconfig" \ 295 pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="/trigger_dir" -r ${TMPDIR}/target delete -qy mylib 296 } 297 298 perpackage_post_deinstall_body() { 299 # Install a package first, then delete it with a post_deinstall trigger 300 mkdir -p target/trigger_dir/post_deinstall/ 301 cat << EOF >> target/trigger_dir/post_deinstall/ldconfig.ucl 302 path_regexp: [ ".*/ldconfig" ] 303 trigger: { 304 type: lua 305 sandbox: false 306 script: <<EOS 307 print("ldconfig: post_deinstall for " .. pkg_name .. "-" .. pkg_version) 308 print("upgrade: " .. tostring(pkg_upgrade)) 309 for i, v in ipairs(arg) do 310 print(" path: " .. v) 311 end 312 EOS 313 } 314 EOF 315 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "mylib" "mylib" "1.0" "/usr/local" 316 mkdir -p usr/local/libdata/ldconfig/ 317 echo "# ldconfig hints" > usr/local/libdata/ldconfig/mylib.conf 318 echo /usr/local/libdata/ldconfig/mylib.conf > plist 319 atf_check pkg create -M mylib.ucl -p plist -r . 320 unset PKG_TRIGGERS_DIR 321 atf_check pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="/trigger_dir" -r ${TMPDIR}/target install -qfy ${TMPDIR}/mylib-1.0.pkg 322 atf_check -o match:"ldconfig: post_deinstall for mylib-1.0" \ 323 -o match:"upgrade: false" \ 324 -o match:"path: /usr/local/libdata/ldconfig" \ 325 pkg -o REPOS_DIR=/dev/null -o PKG_TRIGGERS_DIR="/trigger_dir" -r ${TMPDIR}/target delete -qy mylib 326 }