query.sh
1 #! /usr/bin/env atf-sh 2 3 . $(atf_get_srcdir)/test_environment.sh 4 5 tests_init \ 6 query \ 7 query_empty_multiline \ 8 query_purely_multiline_no_spurious 9 10 query_body() { 11 touch plop 12 touch bla 13 ln -s sym-target sym 14 mkdir test-dir 15 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg test test 1 16 cat >> test.ucl << EOF 17 options: { 18 "OPT1": "on" 19 "OPT2": "off" 20 } 21 directories: { 22 "${TMPDIR}/test-dir": { 23 "uname": "uroot" 24 "gname": "groot" 25 "perm": "660" 26 "fflags": "nodump,arch" 27 } 28 } 29 files: { 30 "${TMPDIR}/plop": { 31 "sum": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" 32 "uname": "uroot" 33 "gname": "groot" 34 "perm": "777" 35 "fflags": "schg,nodump" 36 "mtime": 2342 37 } 38 "${TMPDIR}/bla": { 39 "sum": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" 40 "uname": "utoor" 41 "gname": "gtoor" 42 "perm": "1765" 43 "mtime": 4223 44 } 45 "${TMPDIR}/sym": { 46 "sum": "" 47 "uname": "sym-root" 48 "gname": "sym-gtoor" 49 "perm": "0644" 50 "symlink_target": "sym-target" 51 "mtime": 123432 52 } 53 } 54 EOF 55 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg test2 test 2 56 cat >> test2.ucl << EOF 57 options: { 58 "OPT1": "on" 59 "OPT2": "off" 60 } 61 files: { 62 "${TMPDIR}/plop": "" 63 "${TMPDIR}/bla": "" 64 "${TMPDIR}/sym": "" 65 } 66 EOF 67 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg plop plop 1 68 sed -ie 's/comment: a test/comment: Nothing to see here/' plop.ucl 69 cat >> plop.ucl << EOF 70 deps: { 71 test: { 72 origin: "test", 73 version: "1" 74 }, 75 76 } 77 EOF 78 79 atf_check \ 80 -o match:".*Installing.*" \ 81 -e empty \ 82 -s exit:0 \ 83 pkg register -M test.ucl 84 85 atf_check \ 86 -o match:".*Installing.*" \ 87 -e empty \ 88 -s exit:0 \ 89 pkg register -M plop.ucl 90 91 atf_check \ 92 -o inline:"plop\ntest\n" \ 93 -e empty \ 94 -s exit:0 \ 95 pkg query "%n" 96 97 atf_check \ 98 -o inline:"test\n" \ 99 -e empty \ 100 -s exit:0 \ 101 pkg query -e "%#O > 0" "%n" 102 103 atf_check \ 104 -o inline:"test: plop 1 plop\n" \ 105 -e empty \ 106 -s exit:0 \ 107 pkg query -e "%#r>0" "%n: %rn %rv %ro" 108 109 atf_check \ 110 -o inline:"test: plop 1 plop\n" \ 111 -e empty \ 112 -s exit:0 \ 113 pkg query -e "%#r>0" "%n: %rn %rv %ro" test 114 115 atf_check \ 116 -o empty \ 117 -e empty \ 118 -s exit:1 \ 119 pkg query -e "%#r>0" "%n: %rn %rv %ro" plop 120 121 atf_check \ 122 -o inline:"test: plop 1 plop\n" \ 123 -e empty \ 124 -s exit:0 \ 125 pkg query -e "%#r>0" "%n: %rn %rv %ro" plop test 126 127 atf_check \ 128 -o inline:"test: plop 1 plop\n" \ 129 -e empty \ 130 -s exit:0 \ 131 pkg query -ge "%#r>0" "%n: %rn %rv %ro" "p*p" "t*t" 132 133 atf_check \ 134 -o inline:"test: plop 1 plop\n" \ 135 -e empty \ 136 -s exit:0 \ 137 pkg query -xe "%#r>0" "%n: %rn %rv %ro" "p.*p" "t.*t" 138 139 atf_check \ 140 -o inline:"plop: test 1 test\n" \ 141 -e empty \ 142 -s exit:0 \ 143 pkg query -e "%#d>0" "%n: %dn %dv %do" 144 145 atf_check \ 146 -o inline:"plop: test 1 test\n" \ 147 -e empty \ 148 -s exit:0 \ 149 pkg query -e "%#d>0" "%n: %dn %dv %do" plop test 150 151 atf_check \ 152 -o empty \ 153 -e empty \ 154 -s exit:0 \ 155 pkg query -e "%#d>0 && %#r>0" "%n" 156 157 atf_check \ 158 -o inline:"test\n" \ 159 -e empty \ 160 -s exit:0 \ 161 pkg query -e "%#O > 0 && %#D > 0" "%n" 162 163 atf_check \ 164 -o inline:"plop\n" \ 165 -e empty \ 166 -s exit:0 \ 167 pkg query -e '%dn = "test"' "%n" 168 169 atf_check \ 170 -o inline:"test\n" \ 171 -e empty \ 172 -s exit:0 \ 173 pkg query -e '%dn != "test"' "%n" 174 175 atf_check \ 176 -o inline:"plop\ntest\n" \ 177 -e empty \ 178 -s exit:0 \ 179 pkg query -e '%dn != "plop"' "%n" 180 181 atf_check \ 182 -o inline:"${TMPDIR}/test-dir\n" \ 183 -e empty \ 184 -s exit:0 \ 185 pkg query "%D" test 186 187 if [ "${OS}" = "FreeBSD" ]; then 188 atf_check \ 189 -o match:"^${TMPDIR}/bla utoor gtoor 1765 - 4223 $" \ 190 -o match:"^${TMPDIR}/plop uroot groot 777 schg,nodump 2342 $" \ 191 -o match:"^${TMPDIR}/sym sym-root sym-gtoor 644 - 123432 sym-target$" \ 192 -e empty \ 193 -s exit:0 \ 194 pkg query "%Fp %Fu %Fg %Fm %Ff %Fl %Ft" test 195 196 atf_check \ 197 -o inline:"${TMPDIR}/test-dir uroot groot 660 arch,nodump\n" \ 198 -e empty \ 199 -s exit:0 \ 200 pkg query "%Sp %Su %Sg %Sm %Sf" test 201 fi 202 203 atf_check \ 204 -o ignore \ 205 -e empty \ 206 -s exit:0 \ 207 pkg delete -y plop 208 209 atf_check \ 210 -o inline:"test 2\n" \ 211 -e empty \ 212 -s exit:0 \ 213 pkg query "%n %#O" 214 215 atf_check \ 216 -o inline:"test 1\n" \ 217 -e empty \ 218 -s exit:0 \ 219 pkg query "%n %?O" 220 221 atf_check \ 222 -o inline:"" \ 223 -e empty \ 224 -s exit:0 \ 225 pkg query -e "%#O == 0" "%n" 226 227 atf_check \ 228 -o empty \ 229 -e empty \ 230 -s exit:0 \ 231 pkg create -M test.ucl 232 233 atf_check \ 234 -o empty \ 235 -e empty \ 236 -s exit:0 \ 237 pkg create -M test2.ucl 238 239 sum1=$(pkg query -F ./test-1.pkg '%X') 240 sum2=$(pkg query -F ./test-2.pkg '%X') 241 242 atf_check \ 243 -o empty \ 244 -e empty \ 245 -s exit:0 \ 246 test "${sum1}" = "${sum2}" 247 248 # Test 'pkg query -F' 249 atf_check \ 250 -o empty \ 251 -e empty \ 252 -s exit:0 \ 253 pkg create -M plop.ucl 254 255 atf_check \ 256 -o inline:"${TMPDIR}/bla\n${TMPDIR}/plop\n${TMPDIR}/sym\n" \ 257 -e empty \ 258 -s exit:0 \ 259 pkg query -F ./test-1.pkg '%Fp' 260 261 atf_check \ 262 -o inline:"1\n" \ 263 -e empty \ 264 -s exit:0 \ 265 pkg query -F ./test-1.pkg '%?F' 266 267 atf_check \ 268 -o inline:"3\n" \ 269 -e empty \ 270 -s exit:0 \ 271 pkg query -F ./test-1.pkg '%#F' 272 273 atf_check \ 274 -o inline:"test 1\n" \ 275 -e empty \ 276 -s exit:0 \ 277 pkg query -F ./test-1.pkg '%n %v' 278 279 atf_check \ 280 -o inline:"a test\n" \ 281 -e empty \ 282 -s exit:0 \ 283 pkg query -F ./test-1.pkg '%c' 284 285 atf_check \ 286 -o inline:"Nothing to see here\n" \ 287 -e empty \ 288 -s exit:0 \ 289 pkg query -F ./plop-1.pkg '%c' 290 } 291 292 query_empty_multiline_body() { 293 # Packages without licenses should not be skipped by %L queries 294 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg nolic nolic 1 295 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg withlicense withlicense 1 296 cat >> withlicense.ucl << EOF 297 licenses: ["BSD2CLAUSE"] 298 EOF 299 300 atf_check -o ignore pkg register -M nolic.ucl 301 atf_check -o ignore pkg register -M withlicense.ucl 302 303 # %n without multiline: both packages listed 304 atf_check \ 305 -o inline:"nolic\nwithlicense\n" \ 306 -s exit:0 \ 307 pkg query "%n" 308 309 # %n %L: both packages must appear, nolic with empty license 310 atf_check \ 311 -o inline:"nolic \nwithlicense BSD2CLAUSE\n" \ 312 -s exit:0 \ 313 pkg query "%n %L" 314 315 # Same for categories: nolic has no categories in test_subr 316 # but test_subr adds categories: [test], so both have one. 317 # Test with shlibs instead (no package has shlibs) 318 atf_check \ 319 -o inline:"nolic \nwithlicense \n" \ 320 -s exit:0 \ 321 pkg query "%n %B" 322 } 323 324 query_purely_multiline_no_spurious_body() { 325 # A purely multiline format should not produce spurious lines 326 # for packages that have no matching multiline data (e.g., no deps). 327 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg nodeps nodeps 1 328 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg hasdeps hasdeps 1 329 cat >> hasdeps.ucl << EOF 330 deps: { 331 nodeps: { 332 origin: "nodeps", 333 version: "1" 334 }, 335 } 336 EOF 337 338 atf_check -o ignore pkg register -M nodeps.ucl 339 atf_check -o ignore pkg register -M hasdeps.ucl 340 341 # Purely multiline format: only hasdeps has deps, so nodeps 342 # must produce no output (no spurious " -" line) 343 atf_check \ 344 -o inline:"nodeps nodeps-1\n" \ 345 -s exit:0 \ 346 pkg query "%do %dn-%dv" 347 348 # Mixed format (%n + multiline %d): both packages must appear, 349 # nodeps with empty dep fields via the fallback 350 atf_check \ 351 -o inline:"hasdeps nodeps-1\nnodeps -\n" \ 352 -s exit:0 \ 353 pkg query "%n %dn-%dv" 354 }