Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/pkg
Path: blob/main/tests/frontend/conflicts.sh
2065 views
1
#! /usr/bin/env atf-sh
2
3
. $(atf_get_srcdir)/test_environment.sh
4
5
tests_init \
6
more_complex_choice \
7
complex_conflicts \
8
fileexists_notinpkg \
9
find_conflicts \
10
split_upgrades
11
12
# install foo
13
# foo depends on bar-1.0
14
# foo is upgraded to new dep on bar1-1.0 & bar is updated to 2.0
15
# bar1 and bar conflict with each other
16
complex_conflicts_body() {
17
echo "bar-1.0" > file1
18
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg bar bar 1.0 "${TMPDIR}"
19
cat << EOF >> bar.ucl
20
files: {
21
${TMPDIR}/file1: "",
22
}
23
EOF
24
25
atf_check \
26
-o empty \
27
-e empty \
28
-s exit:0 \
29
pkg create -M ./bar.ucl -o ./repo/
30
31
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg foo foo 1.0 "${TMPDIR}"
32
cat << EOF >> foo.ucl
33
deps: {
34
bar: {
35
origin: "bar",
36
version: "1.0"
37
}
38
}
39
EOF
40
41
atf_check \
42
-o empty \
43
-e empty \
44
-s exit:0 \
45
pkg create -M ./foo.ucl -o ./repo/
46
47
cat << EOF > pkg.conf
48
PKG_DBDIR=${TMPDIR}
49
REPOS_DIR=[]
50
repositories: {
51
local: { url : file://${TMPDIR}/repo }
52
}
53
EOF
54
55
atf_check \
56
-o inline:"Creating repository in ./repo: done\nPacking files for repository: done\n" \
57
-e empty \
58
-s exit:0 \
59
pkg -C ./pkg.conf repo ./repo
60
61
atf_check \
62
-o ignore \
63
-s exit:0 \
64
pkg -C ./pkg.conf update -f
65
66
atf_check \
67
-o match:"Installing foo-1\.0" \
68
-s exit:0 \
69
pkg -C ./pkg.conf install -y foo
70
71
# Upgrade bar
72
rm -fr repo
73
echo "bar-2.0" > file1
74
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg bar bar 2.0 "${TMPDIR}"
75
cat << EOF >> bar.ucl
76
files: {
77
${TMPDIR}/file1: "",
78
}
79
EOF
80
81
atf_check \
82
-o empty \
83
-e empty \
84
-s exit:0 \
85
pkg create -M ./bar.ucl -o ./repo/
86
87
# Create bar1-1.1
88
echo "bar-1.1" > file1
89
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg bar1 bar1 1.1 "${TMPDIR}"
90
cat << EOF >> bar1.ucl
91
files: {
92
${TMPDIR}/file1: "",
93
}
94
EOF
95
96
atf_check \
97
-o empty \
98
-e empty \
99
-s exit:0 \
100
pkg create -M ./bar1.ucl -o ./repo/
101
102
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg foo foo 1.0_1 "${TMPDIR}"
103
cat << EOF >> foo.ucl
104
deps: {
105
bar1: {
106
origin: "bar1",
107
version: "1.1"
108
}
109
}
110
EOF
111
112
atf_check \
113
-o empty \
114
-e empty \
115
-s exit:0 \
116
pkg create -M ./foo.ucl -o ./repo/
117
118
atf_check \
119
-o inline:"Creating repository in ./repo: done\nPacking files for repository: done\n" \
120
-e empty \
121
-s exit:0 \
122
pkg -C ./pkg.conf repo ./repo
123
124
atf_check \
125
-o ignore \
126
-e empty \
127
-s exit:0 \
128
pkg -C ./pkg.conf update -f
129
130
OUTPUT="Updating local repository catalogue...
131
local repository is up to date.
132
All repositories are up to date.
133
Checking for upgrades (2 candidates): done
134
Processing candidates (2 candidates): done
135
Checking integrity... done (2 conflicting)
136
- bar1-1.1 conflicts with bar-1.0 on ${TMPDIR}/file1
137
- bar1-1.1 conflicts with bar-2.0 on ${TMPDIR}/file1
138
Cannot solve problem using SAT solver, trying another plan
139
Checking integrity... done (0 conflicting)
140
The following 3 package(s) will be affected (of 0 checked):
141
142
New packages to be INSTALLED:
143
bar1: 1.1
144
145
Installed packages to be UPGRADED:
146
foo: 1.0 -> 1.0_1
147
148
Installed packages to be REMOVED:
149
bar: 1.0
150
151
Number of packages to be removed: 1
152
Number of packages to be installed: 1
153
Number of packages to be upgraded: 1
154
[1/4] Deinstalling foo-1.0...
155
[2/4] Deinstalling bar-1.0...
156
[2/4] Deleting files for bar-1.0: done
157
[3/4] Installing bar1-1.1...
158
[3/4] Extracting bar1-1.1: done
159
[4/4] Installing foo-1.0_1...
160
"
161
162
atf_check \
163
-o inline:"${OUTPUT}" \
164
-e empty \
165
-s exit:0 \
166
pkg -C ./pkg.conf upgrade -y
167
168
atf_check \
169
-o match:"foo-1.0_1" \
170
-o match:"bar1-1.1" \
171
-o not-match:"bar-2.0" \
172
-e empty \
173
-s exit:0 \
174
pkg info
175
}
176
177
# install foo
178
# foo depends on bar-1.0
179
# foo is upgraded to new dep on bar1-1.0 & bar is updated to 2.0
180
# other still depends on bar1-1.0
181
# bar1 and bar conflict with each other
182
# install arp, which also depends on new bar1-1.0
183
#
184
# This also tests that other is deleted before the first half of the split
185
# upgrade foo job and arp is installed after the second half despite the default
186
# lexicographical job ordering when there are no hard ordering requirements.
187
# This behavior minimizes the distance between the split halves of an upgrade in
188
# the execution order.
189
more_complex_choice_body()
190
{
191
echo "bar-1.0" > file1
192
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg bar bar 1.0 "${TMPDIR}"
193
cat << EOF >> bar.ucl
194
files: {
195
${TMPDIR}/file1: "",
196
}
197
EOF
198
199
atf_check \
200
-o empty \
201
-e empty \
202
-s exit:0 \
203
pkg create -M ./bar.ucl -o ./repo/
204
205
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg foo foo 1.0 "${TMPDIR}"
206
cat << EOF >> foo.ucl
207
deps: {
208
bar: {
209
origin: "bar",
210
version: "1.0"
211
}
212
}
213
EOF
214
215
atf_check \
216
-o empty \
217
-e empty \
218
-s exit:0 \
219
pkg create -M ./foo.ucl -o ./repo/
220
221
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg other other 1.0 "${TMPDIR}"
222
cat << EOF >> other.ucl
223
deps: {
224
bar: {
225
origin: "bar",
226
version: "1.0"
227
}
228
}
229
EOF
230
231
atf_check pkg create -M ./other.ucl -o ./repo/
232
233
cat << EOF > pkg.conf
234
PKG_DBDIR=${TMPDIR}
235
REPOS_DIR=[]
236
repositories: {
237
local: { url : file://${TMPDIR}/repo }
238
}
239
EOF
240
241
atf_check \
242
-o inline:"Creating repository in ./repo: done\nPacking files for repository: done\n" \
243
-e empty \
244
-s exit:0 \
245
pkg -C ./pkg.conf repo ./repo
246
247
atf_check \
248
-o ignore \
249
-s exit:0 \
250
pkg -C ./pkg.conf update -f
251
252
atf_check \
253
-o match:"Installing foo-1\.0" \
254
-o match:"Installing other-1\.0" \
255
-s exit:0 \
256
pkg -C ./pkg.conf install -y foo other
257
258
# Upgrade bar
259
rm -fr repo
260
echo "bar-2.0" > file1
261
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg bar bar 2.0 "${TMPDIR}"
262
cat << EOF >> bar.ucl
263
files: {
264
${TMPDIR}/file1: "",
265
}
266
EOF
267
268
atf_check \
269
-o empty \
270
-e empty \
271
-s exit:0 \
272
pkg create -M ./bar.ucl -o ./repo/
273
274
# Create bar1-1.1
275
echo "bar-1.1" > file1
276
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg bar1 bar1 1.1 "${TMPDIR}"
277
cat << EOF >> bar1.ucl
278
files: {
279
${TMPDIR}/file1: "",
280
}
281
EOF
282
283
# Upgrade foo
284
atf_check \
285
-o empty \
286
-e empty \
287
-s exit:0 \
288
pkg create -M ./bar1.ucl -o ./repo/
289
290
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg foo foo 1.0_1 "${TMPDIR}"
291
cat << EOF >> foo.ucl
292
deps: {
293
bar1: {
294
origin: "bar1",
295
version: "1.1"
296
}
297
}
298
EOF
299
300
# Create arp
301
atf_check \
302
-o empty \
303
-e empty \
304
-s exit:0 \
305
pkg create -M ./foo.ucl -o ./repo/
306
307
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg arp arp 1.0_1 "${TMPDIR}"
308
cat << EOF >> arp.ucl
309
deps: {
310
bar1: {
311
origin: "bar1",
312
version: "1.1"
313
}
314
}
315
EOF
316
317
atf_check \
318
-o empty \
319
-e empty \
320
-s exit:0 \
321
pkg create -M ./arp.ucl -o ./repo/
322
323
atf_check \
324
-o inline:"Creating repository in ./repo: done\nPacking files for repository: done\n" \
325
-e empty \
326
-s exit:0 \
327
pkg -C ./pkg.conf repo ./repo
328
329
atf_check \
330
-o ignore \
331
-e empty \
332
-s exit:0 \
333
pkg -C ./pkg.conf update -f
334
335
OUTPUT="Updating local repository catalogue...
336
local repository is up to date.
337
All repositories are up to date.
338
Checking integrity... done (1 conflicting)
339
- bar1-1.1 conflicts with bar-1.0 on ${TMPDIR}/file1
340
Checking integrity... done (0 conflicting)
341
The following 5 package(s) will be affected (of 0 checked):
342
343
New packages to be INSTALLED:
344
arp: 1.0_1
345
bar1: 1.1
346
347
Installed packages to be UPGRADED:
348
foo: 1.0 -> 1.0_1
349
350
Installed packages to be REMOVED:
351
bar: 1.0
352
other: 1.0
353
354
Number of packages to be removed: 2
355
Number of packages to be installed: 2
356
Number of packages to be upgraded: 1
357
[1/6] Deinstalling other-1.0...
358
[2/6] Deinstalling foo-1.0...
359
[3/6] Deinstalling bar-1.0...
360
[3/6] Deleting files for bar-1.0: done
361
[4/6] Installing bar1-1.1...
362
[4/6] Extracting bar1-1.1: done
363
[5/6] Installing foo-1.0_1...
364
[6/6] Installing arp-1.0_1...
365
"
366
367
atf_check \
368
-o inline:"${OUTPUT}" \
369
-e empty \
370
-s exit:0 \
371
pkg -C ./pkg.conf install -y arp
372
373
atf_check \
374
-o match:"foo-1.0_1" \
375
-o match:"bar1-1.1" \
376
-o not-match:"other-1.0" \
377
-o not-match:"bar-2.0" \
378
-e empty \
379
-s exit:0 \
380
pkg info
381
}
382
383
fileexists_notinpkg_body()
384
{
385
mkdir -p ${TMPDIR}/target/${TMPDIR}
386
echo "entry" > ${TMPDIR}/target/${TMPDIR}/a
387
unset PKG_DBDIR
388
389
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "test" "test" "2"
390
echo "entry 2" > a
391
echo "${TMPDIR}/a" > plist
392
393
atf_check \
394
pkg create -M test.ucl -p plist
395
396
pkg repo .
397
mkdir reposconf
398
echo "local: { url: file://${TMPDIR} }" > reposconf/local.conf
399
atf_check \
400
pkg -o REPOS_DIR=${TMPDIR}/reposconf -r ${TMPDIR}/target install -qy test
401
402
test -f ${TMPDIR}/target/${TMPDIR}/a.pkgsave || atf_fail "file not saved when it should have"
403
404
# Test the nominal situation just in case
405
rm -f ${TMPDIR}/target/${TMPDIR}/a.pkgsave
406
atf_check \
407
pkg -o REPOS_DIR=${TMPDIR}/reposconf -r ${TMPDIR}/target install -qyf test
408
test -f ${TMPDIR}/target/${TMPDIR}/a.pkgsave && atf_fail "file saved when it should not have"
409
410
# Test if both files are identical
411
atf_check \
412
pkg -o REPOS_DIR=${TMPDIR}/reposconf -r ${TMPDIR}/target delete -qyf test
413
echo "entry 2" > ${TMPDIR}/target/${TMPDIR}/a
414
atf_check \
415
pkg -o REPOS_DIR=${TMPDIR}/reposconf -r ${TMPDIR}/target install -qyf test
416
test -f ${TMPDIR}/target/${TMPDIR}/a.pkgsave && atf_fail "file saved when it should not have"
417
return 0
418
}
419
420
find_conflicts_body() {
421
touch a
422
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_manifest test 1 /
423
cat << EOF >> +MANIFEST
424
files: {
425
${TMPDIR}/a: "",
426
}
427
EOF
428
atf_check \
429
-o match:".*Installing.*\.\.\.$" \
430
-e empty \
431
-s exit:0 \
432
pkg register -M +MANIFEST
433
434
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_manifest test2 1 /
435
cat << EOF >> +MANIFEST
436
files: {
437
${TMPDIR}/a: "",
438
}
439
EOF
440
441
atf_check \
442
-o empty \
443
-e empty \
444
-s exit:0 \
445
pkg create -M +MANIFEST -o .
446
447
atf_check \
448
-o inline:"Creating repository in .: done\nPacking files for repository: done\n" \
449
-e empty \
450
-s exit:0 \
451
pkg repo .
452
453
mkdir reposconf
454
cat << EOF >> reposconf/repo.conf
455
local: {
456
url: file:///${TMPDIR},
457
enabled: true
458
}
459
EOF
460
461
OUTPUT="Updating local repository catalogue...
462
${JAILED}Fetching meta.conf: done
463
${JAILED}Fetching data.pkg: done
464
Processing entries: done
465
local repository update completed. 1 packages processed.
466
All repositories are up to date.
467
Updating database digests format: done
468
Checking integrity... done (1 conflicting)
469
- test2-1 conflicts with test-1 on ${TMPDIR}/a
470
Checking integrity... done (0 conflicting)
471
The following 2 package(s) will be affected (of 0 checked):
472
473
New packages to be INSTALLED:
474
test2: 1
475
476
Installed packages to be REMOVED:
477
test: 1
478
479
Number of packages to be removed: 1
480
Number of packages to be installed: 1
481
${JAILED}[1/2] Deinstalling test-1...
482
${JAILED}[1/2] Deleting files for test-1: done
483
${JAILED}[2/2] Installing test2-1...
484
${JAILED}[2/2] Extracting test2-1: done
485
"
486
atf_check \
487
-o inline:"${OUTPUT}" \
488
-s exit:0 \
489
pkg -o REPOS_DIR="${TMPDIR}/reposconf" -o PKG_CACHEDIR="${TMPDIR}" install -y test2-1
490
}
491
492
split_upgrades_body() {
493
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "testa" "testa" "2.0"
494
echo "entry" > a
495
echo "entry" > c
496
echo "${TMPDIR}/a" > plist
497
echo "${TMPDIR}/c" >> plist
498
atf_check \
499
pkg create -M testa.ucl -p plist
500
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "testb" "testb" "2"
501
echo "entry" > b
502
echo "${TMPDIR}/b" > plist
503
cat << EOF >> testb.ucl
504
deps: {
505
testa: {
506
origin: "testa",
507
version: "1"
508
}
509
}
510
EOF
511
atf_check \
512
pkg create -M testb.ucl -p plist
513
pkg repo .
514
mkdir target
515
mkdir reposconf
516
cat << EOF >> reposconf/repo.conf
517
local: {
518
url: file:///${TMPDIR},
519
enabled: true
520
}
521
EOF
522
523
atf_check \
524
pkg -C /dev/null -o REPOS_DIR="${TMPDIR}/reposconf" -o PKG_CACHEDIR="${TMPDIR}" -r ${TMPDIR}/target install -qy testb
525
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "testa-lib" "testa-lib" "2.0"
526
echo "entry" > a
527
echo "${TMPDIR}/a" > plist
528
atf_check \
529
pkg create -M testa-lib.ucl -p plist
530
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "testa" "testa" "2.1"
531
echo "entry" > c
532
echo "${TMPDIR}/c" > plist
533
atf_check \
534
pkg create -M testa.ucl -p plist
535
cat << EOF >> testa.ucl
536
deps: {
537
testa-lib: {
538
origin: "testa-lib",
539
version: "1"
540
}
541
}
542
EOF
543
544
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "testb" "testb" "2"
545
echo "entry" > b
546
echo "${TMPDIR}/b" > plist
547
cat << EOF >> testb.ucl
548
deps: {
549
testa-lib: {
550
origin: "testa-lib",
551
version: "1"
552
}
553
}
554
EOF
555
atf_check \
556
pkg create -M testb.ucl -p plist
557
pkg repo .
558
559
OUTPUT="Updating local repository catalogue...
560
${JAILED}Fetching meta.conf: done
561
${JAILED}Fetching data.pkg: done
562
Processing entries: done
563
local repository update completed. 4 packages processed.
564
All repositories are up to date.
565
"
566
atf_check \
567
-o inline:"${OUTPUT}" \
568
pkg -C /dev/null -o REPOS_DIR="${TMPDIR}/reposconf" -o PKG_CACHEDIR="${TMPDIR}" -r ${TMPDIR}/target update -f
569
570
OUTPUT="Updating local repository catalogue...
571
local repository is up to date.
572
All repositories are up to date.
573
Checking for upgrades (2 candidates): done
574
Processing candidates (2 candidates): done
575
Checking integrity... done (2 conflicting)
576
- testa-lib-2.0 conflicts with testa-2.0 on ${TMPDIR}/a
577
- testa-lib-2.0 conflicts with testa-2.0 on ${TMPDIR}/a
578
Checking integrity... done (0 conflicting)
579
The following 3 package(s) will be affected (of 0 checked):
580
581
New packages to be INSTALLED:
582
testa-lib: 2.0
583
584
Installed packages to be UPGRADED:
585
testa: 2.0 -> 2.1
586
587
Installed packages to be REINSTALLED:
588
testb-2 (direct dependency changed: testa-lib)
589
590
Number of packages to be installed: 1
591
Number of packages to be upgraded: 1
592
Number of packages to be reinstalled: 1
593
${JAILED}[1/4] Deinstalling testb-2...
594
${JAILED}[1/4] Deleting files for testb-2: done
595
${JAILED}[2/4] Upgrading testa from 2.0 to 2.1...
596
${JAILED}[2/4] Extracting testa-2.1: done
597
${JAILED}[3/4] Installing testa-lib-2.0...
598
${JAILED}[3/4] Extracting testa-lib-2.0: done
599
${JAILED}[4/4] Installing testb-2...
600
${JAILED}[4/4] Extracting testb-2: done
601
"
602
atf_check \
603
-o inline:"${OUTPUT}" \
604
pkg -C /dev/null -o REPOS_DIR="${TMPDIR}/reposconf" -o PKG_CACHEDIR="${TMPDIR}" -r ${TMPDIR}/target upgrade -y
605
}
606
607