diff options
Diffstat (limited to 'tests/pkg-drop.test')
-rw-r--r-- | tests/pkg-drop.test | 448 |
1 files changed, 448 insertions, 0 deletions
diff --git a/tests/pkg-drop.test b/tests/pkg-drop.test new file mode 100644 index 0000000..500d611 --- /dev/null +++ b/tests/pkg-drop.test @@ -0,0 +1,448 @@ +# file : tests/pkg-drop.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include common.test config.test remote.test + +# Source repository: +# +# pkg-drop +# |-- t4a +# | |-- libfoo-1.1.0.tar.gz +# | `-- repositories +# |-- t4b -> t4a (prerequisite) +# | |-- libbar-1.1.0.tar.gz -> libfoo == 1.1.0 +# | `-- repositories +# |-- t4c -> t4b (prerequisite) +# | |-- libbaz-1.1.0.tar.gz -> libfoo, libbar +# | |-- libfoo-1.0.0.tar.gz +# | `-- repositories +# `-- t4d -> t4c (prerequisite) +# |-- libbiz-1.0.0.tar.gz -> libfox, libfoo, libbaz +# |-- libfox-1.0.0.tar.gz +# `-- repositories + +# Prepare repositories used by tests if running in the local mode. +# ++if ($remote != true) + rep_create += 2>- + + cp -r $src/t4a $out/t4a && $rep_create $out/t4a &$out/t4a/packages + cp -r $src/t4b $out/t4b && $rep_create $out/t4b &$out/t4b/packages + cp -r $src/t4c $out/t4c && $rep_create $out/t4c &$out/t4c/packages + cp -r $src/t4d $out/t4d && $rep_create $out/t4d &$out/t4d/packages +end + +pkg_build += -d cfg --yes 2>- +pkg_status += -d cfg +rep_add += -d cfg 2>- +rep_fetch += -d cfg --auth all --trust-yes 2>- + +: no-name +: +$clone_cfg; +$* 2>>EOE != 0 + error: package name argument expected + info: run 'bpkg help pkg-drop' for more information + EOE + +: unknown-package +: +$clone_cfg; +$* libfoo 2>>/EOE != 0 + error: package libfoo does not exist in configuration cfg/ + EOE + +: unknown-package-ver +: +$clone_cfg; +$* libfoo/1.0.0 2>>~%EOE% != 0 + %error: package libfoo/1.0.0 does not exist in configuration cfg[/\\]% + EOE + +: prerequisites-or-dependents +: +{ + +$clone_cfg && $rep_add $rep/t4c && $rep_fetch + +$pkg_build libbaz + + test.arguments += --print-only + + : foo-baz-bar + : + $clone_cfg; + $* -y libfoo libbaz libbar >>EOO + drop libbaz + drop libbar + drop libfoo + EOO + + : dependents + : + { + # Prepare the nested tests to use configuration from the enclosing + # 'prerequisites-or-dependents' group scope. + # + clone_cfg = cp -r $~/../cfg ./ + + : unconfirmed + : + { + test.arguments += --yes + + : libfoo + : + $clone_cfg; + $* libfoo 2>>EOE != 0 + following dependent packages will have to be dropped as well: + libbar (requires libfoo) + libbaz (requires libbar) + error: refusing to drop dependent packages with just --yes + info: specify --drop-dependent to confirm + EOE + + : libfoo-libbar + : + $clone_cfg; + $* libfoo libbar 2>>EOE != 0 + following dependent packages will have to be dropped as well: + libbaz (requires libbar) + error: refusing to drop dependent packages with just --yes + info: specify --drop-dependent to confirm + EOE + + : libfoo-libbaz + : + $clone_cfg; + $* libfoo libbaz 2>>EOE != 0 + following dependent packages will have to be dropped as well: + libbar (requires libfoo) + error: refusing to drop dependent packages with just --yes + info: specify --drop-dependent to confirm + EOE + } + + : confirmed + : + { + test.arguments += --drop-dependent + + : libfoo + : + $clone_cfg; + $* libfoo >>EOO + drop libbaz + drop libbar + drop libfoo + EOO + + : libfoo-libbaz + : + $clone_cfg; + $* libfoo libbaz >>EOO + drop libbaz + drop libbar + drop libfoo + EOO + + : libbaz-libfoo + : + $clone_cfg; + $* libbaz libfoo >>EOO + drop libbaz + drop libbar + drop libfoo + EOO + } + } + + : prerequisites + : + { + # Prepare the nested tests to use configuration from the enclosing + # 'prerequisites-or-dependents' group scope. + # + clone_cfg = cp -r $~/../cfg ./ + + : libbaz + : + $clone_cfg; + $* -y libbaz >>EOO + drop libbaz + drop libbar + drop libfoo + EOO + + : libbaz-only + : + $clone_cfg; + $* -n libbaz >>EOO + drop libbaz + EOO + + : libbar-libbaz + : + $clone_cfg; + $* -n libbar libbaz >>EOO + drop libbaz + drop libbar + EOO + + : libbaz-libbar + : + $clone_cfg; + $* -n libbaz libbar >>EOO + drop libbaz + drop libbar + EOO + + : dependencies + : + : Note that we don't move this test to the prerequisites-and-dependents + : group as the configuration repository set would be different. + : + $clone_cfg; + $* -y --drop-dependent libbar >>EOO + drop libbaz + drop libbar + drop libfoo + EOO + } + + # Here we combine the test group teardown and the "actual drop" test. + # + -$pkg_drop -d cfg --yes libbaz 2>>EOE + disfigured libbaz + disfigured libbar + disfigured libfoo + purged libbaz + purged libbar + purged libfoo + EOE + + -$pkg_status libbar/1.1.0 >'unknown' + -$pkg_status libbaz/1.1.0 >'available' + -$pkg_status libfoo/1.1.0 >'available' +} + +: prerequisites-and-dependents +: +{ + +$clone_cfg && $rep_add $rep/t4d && $rep_fetch + +$pkg_build libbiz + + clone_cfg = cp -r ../../cfg ./ + test.arguments += --print-only + + : drop-prerequisites-no-dependents + : + { + test.arguments += --yes + + : libbiz + : + $clone_cfg; + $* libbiz >>EOO + drop libbiz + drop libbaz + drop libbar + drop libfoo + drop libfox + EOO + + : libfox-libbiz + : + $clone_cfg; + $* libfox libbiz >>EOO + drop libbiz + drop libfox + drop libbaz + drop libbar + drop libfoo + EOO + } + + : drop-prerequisites + : + { + test.arguments += --yes --drop-dependent + + : libfox + : + $clone_cfg; + $* libfox >>EOO + drop libbiz + drop libfox + drop libbaz + drop libbar + drop libfoo + EOO + + : libbaz + : + $clone_cfg; + $* libbaz >>EOO + drop libbiz + drop libbaz + drop libbar + drop libfoo + drop libfox + EOO + + : libbar + : + $clone_cfg; + $* libbar >>EOO + drop libbiz + drop libbaz + drop libbar + drop libfoo + drop libfox + EOO + + : libfoo + : + $clone_cfg; + $* libfoo >>EOO + drop libbiz + drop libbaz + drop libbar + drop libfoo + drop libfox + EOO + } + + : keep-prerequisites + { + test.arguments += --no --drop-dependent + + : fox-baz + : + $clone_cfg; + $* libfox libbaz >>EOO + drop libbiz + drop libfox + drop libbaz + EOO + + : libbaz-libfox + : + $clone_cfg; + $* libbaz libfox >>EOO + drop libbiz + drop libbaz + drop libfox + EOO + + : libfox-libbar + : + $clone_cfg; + $* libfox libbar >>EOO + drop libbiz + drop libfox + drop libbaz + drop libbar + EOO + + : libbar-libfox + : + $clone_cfg; + $* libbar libfox >>EOO + drop libbiz + drop libbaz + drop libbar + drop libfox + EOO + } + + -$pkg_drop -d cfg --yes --drop-dependent libbar 2>>EOE + disfigured libbiz + disfigured libbaz + disfigured libbar + disfigured libfoo + disfigured libfox + purged libbiz + purged libbaz + purged libbar + purged libfoo + purged libfox + EOE + + -$pkg_status libfox/1.0.0 >'available' + -$pkg_status libfoo/1.1.0 >'unknown' + -$pkg_status libbar/1.1.0 >'unknown' + -$pkg_status libbaz/1.1.0 >'unknown' + -$pkg_status libbiz/1.0.0 >'available' +} + +: keep-drop-options +: +: Test --drop-dependent, --keep-dependent, --drop-prerequisite, +: --keep-prerequisite option. +: +{ + +$clone_cfg && $rep_add $rep/t4b && $rep_fetch + + : keep-drop-dependent + : + { + $clone_cfg && $pkg_build libbar; + + $* --keep-dependent libfoo 2>>EOE != 0; + error: following dependent packages will have to be dropped as well: + libbar (requires libfoo) + EOE + + $* --drop-dependent libfoo 2>>EOE + disfigured libbar + disfigured libfoo + purged libbar + purged libfoo + EOE + } + + : drop-prerequisite + : + { + $clone_cfg && $pkg_build libbar; + + $* --drop-prerequisite libbar 2>>EOE + disfigured libbar + disfigured libfoo + purged libbar + purged libfoo + EOE + } + + : keep-prerequisite + : + { + $clone_cfg && $pkg_build libbar; + + $* --keep-prerequisite libbar 2>>EOE; + disfigured libbar + purged libbar + EOE + + $pkg_status libfoo >'configured 1.1.0'; + + $* libfoo 2>>EOE + disfigured libfoo + purged libfoo + EOE + } +} + +: disfigure-only +: +: Test --disfigure-only option. +: +{ + $clone_cfg && $rep_add $rep/t4a && $rep_fetch; + $pkg_build libfoo; + + $* --disfigure-only libfoo 2>'disfigured libfoo'; + $pkg_status libfoo >'unpacked 1.1.0 hold_package; available sys:?'; + + $* libfoo 2>'purged libfoo' +} |