aboutsummaryrefslogtreecommitdiff
path: root/tests/pkg-configure.testscript
diff options
context:
space:
mode:
Diffstat (limited to 'tests/pkg-configure.testscript')
-rw-r--r--tests/pkg-configure.testscript408
1 files changed, 408 insertions, 0 deletions
diff --git a/tests/pkg-configure.testscript b/tests/pkg-configure.testscript
new file mode 100644
index 0000000..a61bb27
--- /dev/null
+++ b/tests/pkg-configure.testscript
@@ -0,0 +1,408 @@
+# file : tests/pkg-configure.testscript
+# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+# Here we test both pkg-configure and pkg-disfigure commands.
+#
+
+.include common.testscript auth.testscript config.testscript remote.testscript
+
+# Source repository:
+#
+# pkg-configure
+# |-- hello
+# | |-- libhello-1.0.0.tar.gz
+# | `-- repositories.manifest
+# |-- libhello-1.0.0
+# | |-- build
+# | | |-- bootstrap.build
+# | | |-- export.build
+# | | `-- root.build
+# | |-- buildfile
+# | |-- hello
+# | | |-- buildfile
+# | | |-- export
+# | | |-- hello
+# | | `-- hello.cxx
+# | |-- INSTALL
+# | |-- manifest
+# | |-- tests
+# | | |-- build
+# | | | |-- bootstrap.build
+# | | | `-- root.build
+# | | |-- buildfile
+# | | `-- test
+# | | |-- buildfile
+# | | |-- driver.cxx
+# | | `-- test.out
+# | `-- version
+# `-- stable
+# |-- libbar-1.0.0.tar.gz -> libfoo
+# |-- libbar-1.1.0.tar.gz -> libfoo >= 1.1.0
+# |-- libbar-1.2.0.tar.gz -> libfoo >= 1.1.0, libfox | libfoo >= 1.2.0
+# |-- libbar-1.3.0.tar.gz -> libfox | libfoo <= 1.1.0,
+# | libfix | libfoo >= 1.1.0
+# |-- libfoo-1.0.0.tar.gz
+# |-- libfoo-1.1.0.tar.gz
+# |-- libfoo-1.2.0.tar.gz
+# `-- repositories.manifest
+
+# Prepare repositories used by tests if running in the local mode.
+#
++if ($remote != true)
+ rep_create += 2>!
+
+ # Create the signed 'hello' repository.
+ #
+ cp -r $src/hello $out/hello
+ cat <<<$cert_manifest >+$out/hello/repositories.manifest
+
+ $rep_create --key $key $out/hello &$out/hello/packages.manifest \
+ &$out/hello/signature.manifest
+
+ # Create the 'stable' repository.
+ #
+ cp -r $src/stable $out/stable
+ $rep_create $out/stable &$out/stable/packages.manifest
+end
+
+test.arguments += "config.cxx=$config.cxx"
+
+pkg_disfigure += -d cfg
+pkg_fetch += -d cfg 2>!
+pkg_purge += -d cfg
+pkg_status += -d cfg
+pkg_unpack += -d cfg 2>!
+rep_add += -d cfg 2>!
+rep_fetch += -d cfg --auth all 2>!
+
+: no-name
+:
+$clone_cfg;
+$* 2>>EOE != 0
+ error: package name argument expected
+ info: run 'bpkg help pkg-configure' for more information
+ EOE
+
+: var-no-name
+:
+$clone_cfg;
+$* "config.dist.root=$~/opt" 2>>EOE != 0
+ error: package name argument expected
+ info: run 'bpkg help pkg-configure' for more information
+ EOE
+
+: unexpected-arg
+:
+$clone_cfg;
+$* libhello libhello 2>>EOE != 0
+ error: unexpected argument 'libhello'
+ EOE
+
+: fetched
+:
+{
+ +$clone_cfg
+ +$rep_add $rep/hello
+ +$rep_fetch --trust $cert_fp &cfg/.bpkg/certs/**
+
+ : no-such-package
+ :
+ $clone_cfg;
+ $* libhello1 2>>/EOE != 0
+ error: package libhello1 does not exist in configuration cfg/
+ EOE
+
+ : disfigure
+ {
+ : no-name
+ :
+ $clone_root_cfg;
+ $pkg_disfigure 2>>EOE != 0
+ error: package name argument expected
+ info: run 'bpkg help pkg-disfigure' for more information
+ EOE
+
+ : no-such-package
+ :
+ $clone_root_cfg;
+ $pkg_disfigure libhello1 2>>/EOE != 0
+ error: package libhello1 does not exist in configuration cfg/
+ EOE
+ }
+
+ : wrong-state
+ :
+ {
+ $clone_cfg && $pkg_fetch libhello/1.0.0;
+
+ $* libhello 2>>EOE != 0;
+ error: package libhello is fetched
+ info: expected it to be unpacked
+ EOE
+
+ $pkg_disfigure libhello 2>>EOE != 0;
+ error: package libhello is fetched
+ info: expected it to be configured
+ EOE
+
+ $pkg_purge libhello 2>'purged libhello/1.0.0'
+ }
+
+ : src-eq-out
+ :
+ {
+ $clone_cfg;
+ $pkg_fetch libhello/1.0.0 && $pkg_unpack libhello;
+
+ $* libhello 2>'configured libhello/1.0.0';
+ $pkg_status libhello 1>'libhello configured 1.0.0';
+ $pkg_disfigure libhello 2>'disfigured libhello/1.0.0';
+ $pkg_status libhello 1>'libhello unpacked 1.0.0';
+
+ $pkg_purge libhello 2>'purged libhello/1.0.0';
+ $pkg_status libhello/1.0.0 1>'libhello available 1.0.0'
+ }
+}
+
+: src-ne-out
+:
+{
+ $clone_cfg && $pkg_unpack -e $src/libhello-1.0.0;
+
+ $* libhello 2>'configured libhello/1.0.0';
+ $pkg_status libhello 1>'libhello configured 1.0.0';
+ $pkg_disfigure libhello 2>'disfigured libhello/1.0.0';
+ $pkg_status libhello 1>'libhello unpacked 1.0.0';
+
+ $pkg_purge libhello 2>'purged libhello/1.0.0';
+ $pkg_status libhello 1>'libhello unknown';
+ test -d cfg/libhello-1.0.0 == 1
+}
+
+: out-exists-disfigure
+:
+{
+ $clone_cfg && $pkg_unpack -e $src/libhello-1.0.0;
+
+ $* libhello 2>'configured libhello/1.0.0';
+ touch cfg/libhello/stray &!cfg/libhello/stray;
+
+ $pkg_disfigure libhello 2>'disfigured libhello/1.0.0';
+
+ $pkg_status libhello/1.0.0 >'libhello unpacked 1.0.0';
+
+ $pkg_purge -f libhello 2>'purged libhello/1.0.0';
+ $pkg_status libhello/1.0.0 1>'libhello unknown 1.0.0'
+}
+
+: broken
+:
+if ($cxx.target.class != 'windows')
+{
+ : disfigure-failed
+ :
+ {
+ $clone_root_cfg && $pkg_unpack -e $src/libhello-1.0.0;
+
+ $* libhello 2>'configured libhello/1.0.0';
+ chmod 555 cfg/libhello;
+
+ $pkg_disfigure libhello 2>>/~%EOE% != 0;
+ %error: unable to remove directory cfg/libhello/.+%
+ info: package libhello is now broken; use 'pkg-purge' to remove
+ EOE
+
+ $pkg_status libhello >'libhello broken 1.0.0';
+
+ chmod 755 cfg/libhello;
+ rm -r cfg/libhello;
+ $pkg_purge -f libhello 2>'purged libhello/1.0.0';
+ $pkg_status libhello >'libhello unknown'
+ }
+
+ : configure-failed
+ :
+ : Note that pkg-configure in case of build2 process failure implicitly
+ : performs pkg-disfigure, that succeeds.
+ :
+ {
+ $clone_root_cfg && $pkg_unpack -e $src/libhello-1.0.0;
+ mkdir -p cfg/libhello/build &!cfg/libhello/ &!cfg/libhello/build/;
+ chmod 555 cfg/libhello/build;
+
+ $* libhello 2>>/~%EOE% != 0;
+ %error: unable to create directory cfg/libhello/build/.+%
+ EOE
+
+ $pkg_status libhello >'libhello unpacked 1.0.0'
+ }
+
+ : configure-disfigure-failed
+ :
+ : Note that pkg-configure in case of build2 process failure implicitly
+ : performs pkg-disfigure, that also fails.
+ :
+ {
+ $clone_root_cfg && $pkg_unpack -e $src/libhello-1.0.0;
+ mkdir -p cfg/libhello/build &!cfg/libhello/ &!cfg/libhello/build/;
+ chmod 555 cfg/libhello cfg/libhello/build;
+
+ $* libhello 2>>/~%EOE% != 0;
+ %error: unable to create directory cfg/libhello/build/.+%
+ %error: unable to remove directory cfg/libhello/.+%
+ info: package libhello is now broken; use 'pkg-purge' to remove
+ EOE
+
+ $pkg_status libhello >'libhello broken 1.0.0';
+
+ chmod 755 cfg/libhello cfg/libhello/build;
+ rm -r cfg/libhello;
+ $pkg_purge -f libhello 2>'purged libhello/1.0.0';
+ $pkg_status libhello >'libhello unknown'
+ }
+}
+
+: dependency-management
+:
+{
+ +$clone_cfg && $rep_add $rep/stable && $rep_fetch --trust-yes
+
+ : still-has-deps
+ :
+ {
+ $clone_cfg;
+ $pkg_fetch libbar/1.0.0 && $pkg_unpack libbar;
+
+ $* libbar 2>>EOE != 0;
+ error: no configured package satisfies dependency on libfoo
+ EOE
+
+ $pkg_status libbar/1.0.0 1>'libbar unpacked 1.0.0';
+ $pkg_fetch libfoo/1.0.0;
+ $pkg_unpack libfoo;
+
+ $* libbar 2>>EOE != 0;
+ error: no configured package satisfies dependency on libfoo
+ EOE
+
+ $* libfoo 2>'configured libfoo/1.0.0';
+ $* libbar 2>'configured libbar/1.0.0';
+
+ $pkg_disfigure libfoo 2>>EOE != 0;
+ error: package libfoo still has dependencies:
+ info: package libbar
+ EOE
+
+ $pkg_disfigure libbar 2>'disfigured libbar/1.0.0';
+ $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0';
+
+ $pkg_purge libbar 2>'purged libbar/1.0.0';
+ $pkg_purge libfoo 2>'purged libfoo/1.0.0'
+ }
+
+ : no-package-satisfy
+ :
+ {
+ $clone_cfg;
+ $pkg_fetch libfoo/1.0.0 && $pkg_unpack libfoo;
+
+ $* libfoo 2>'configured libfoo/1.0.0';
+ $pkg_fetch libbar/1.1.0;
+ $pkg_unpack libbar;
+
+ $* libbar 2>>EOE != 0;
+ error: no configured package satisfies dependency on libfoo >= 1.1.0
+ EOE
+
+ $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0';
+ $pkg_purge libfoo 2>'purged libfoo/1.0.0';
+ $pkg_fetch libfoo/1.1.0;
+ $pkg_unpack libfoo;
+ $* libfoo 2>'configured libfoo/1.1.0';
+ $* libbar 2>'configured libbar/1.1.0';
+ $pkg_disfigure libbar 2>'disfigured libbar/1.1.0';
+ $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0';
+
+ $pkg_purge libfoo 2>'purged libfoo/1.1.0';
+ $pkg_purge libbar 2>'purged libbar/1.1.0'
+ }
+
+ : no-package-satisfy-alt
+ :
+ {
+ $clone_cfg;
+ $pkg_fetch libfoo/1.1.0 && $pkg_unpack libfoo;
+
+ $* libfoo 2>'configured libfoo/1.1.0';
+ $pkg_fetch libbar/1.2.0;
+ $pkg_unpack libbar;
+
+ $* libbar 2>>EOE != 0;
+ error: no configured package satisfies dependency on libfox | libfoo >= 1.2.0
+ EOE
+
+ $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0';
+ $pkg_purge libfoo 2>'purged libfoo/1.1.0';
+ $pkg_fetch libfoo/1.2.0;
+ $pkg_unpack libfoo;
+ $* libfoo 2>'configured libfoo/1.2.0';
+ $* libbar 2>'configured libbar/1.2.0';
+
+ $pkg_disfigure libfoo 2>>EOE != 0;
+ error: package libfoo still has dependencies:
+ info: package libbar on libfoo >= 1.2.0
+ EOE
+
+ $pkg_disfigure libbar 2>'disfigured libbar/1.2.0';
+ $pkg_disfigure libfoo 2>'disfigured libfoo/1.2.0';
+
+ $pkg_purge libfoo 2>'purged libfoo/1.2.0';
+ $pkg_purge libbar 2>'purged libbar/1.2.0'
+ }
+
+ : incompatible-constraints
+ :
+ {
+ $clone_cfg;
+ $pkg_fetch libfoo/1.1.0 && $pkg_unpack libfoo;
+
+ $* libfoo 2>'configured libfoo/1.1.0';
+ $pkg_fetch libbar/1.3.0;
+ $pkg_unpack libbar;
+
+ $* libbar 2>>EOE != 0;
+ error: multiple dependencies on package libfoo
+ info: libfoo <= 1.1.0
+ info: libfoo >= 1.1.0
+ EOE
+
+ $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0';
+
+ $pkg_purge libfoo 2>'purged libfoo/1.1.0';
+ $pkg_purge libbar 2>'purged libbar/1.3.0'
+ }
+}
+
+: keep-out
+:
+{
+ : fallback
+ :
+ : Test that pkg-disfigure falls back to the external package output directory
+ : removal if the source directory have gone.
+ :
+ {
+ $clone_root_cfg;
+
+ # Configure libhello as an external package.
+ #
+ cp --no-cleanup -r $src/libhello-1.0.0 ./libhello;
+ $pkg_unpack -e ./libhello;
+ $* libhello 2>!;
+
+ rm -r ./libhello;
+ $pkg_disfigure --keep-out libhello 2>'disfigured libhello/1.0.0';
+ test -d cfg/libhello != 0
+ }
+}