/ tests / frontend / query.sh
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  }