aboutsummaryrefslogtreecommitdiff
path: root/tests/pkg-unpack.testscript
diff options
context:
space:
mode:
Diffstat (limited to 'tests/pkg-unpack.testscript')
-rw-r--r--tests/pkg-unpack.testscript301
1 files changed, 301 insertions, 0 deletions
diff --git a/tests/pkg-unpack.testscript b/tests/pkg-unpack.testscript
new file mode 100644
index 0000000..f866fd2
--- /dev/null
+++ b/tests/pkg-unpack.testscript
@@ -0,0 +1,301 @@
+# file : tests/pkg-unpack.testscript
+# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+.include common.testscript \
+ auth.testscript \
+ config.testscript \
+ remote.testscript \
+ remote-git.testscript
+
+# Source repository:
+#
+# pkg-unpack
+# |-- hello
+# | |-- libhello-1.0.0.tar.gz
+# | `-- repositories.manifest
+# |-- libfoo-1.1.0
+# | |-- build
+# | | `-- bootstrap.build
+# | |-- buildfile
+# | `-- manifest
+# |-- t1
+# | |-- libfoo-1.0.0.tar.gz
+# | |-- libfoo-1.1.0.tar.gz
+# | `-- repositories.manifest
+# |
+# `-- git
+# `-- style-basic.git
+
+# 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 't1' repository.
+ #
+ cp -r $src/t1 $out/t1 && $rep_create $out/t1 &$out/t1/packages.manifest
+
+ # Create git repositories.
+ #
+ $git_extract $src/git/style-basic.tar &$out_git/state0/***
+end
+
+pkg_fetch += -d cfg 2>!
+pkg_purge += -d cfg
+pkg_status += -d cfg
+rep_add += -d cfg 2>!
+rep_fetch += -d cfg --auth all 2>!
+pkg_configure += -d cfg
+pkg_disfigure += -d cfg
+
+: replace-with-existing
+:
+$clone_cfg;
+$* foo -r 2>>EOE != 0
+ error: --replace|-r can only be specified with external package
+ EOE
+
+: no-dir
+:
+$clone_cfg;
+$* -e 2>>EOE != 0
+ error: package directory argument expected
+ info: run 'bpkg help pkg-unpack' for more information
+ EOE
+
+: not-package-dir
+:
+$clone_cfg;
+$* -e ./ 2>>/EOE != 0
+ error: no manifest file in package directory ./
+ EOE
+
+: dir-not-exist
+:
+$clone_cfg;
+$* -e ./no-such-dir 2>>/EOE != 0
+ error: package directory ./no-such-dir/ does not exist
+ EOE
+
+: no-name
+:
+$clone_cfg;
+$* 2>>EOE != 0
+ error: package name argument expected
+ info: run 'bpkg help pkg-unpack' for more information
+ EOE
+
+: fetched-rep
+:
+{
+ +$clone_cfg && $rep_add $rep/t1 && $rep_fetch --trust-yes
+
+ : package-exists
+ :
+ {
+ $clone_cfg && $pkg_fetch libfoo/1.0.0;
+
+ $* -e $src/libfoo-1.1.0 2>>/EOE != 0;
+ error: package libfoo already exists in configuration cfg/
+ info: version: 1.0.0, state: fetched, substate: none
+ info: use 'pkg-unpack --replace|-r' to replace
+ EOE
+
+ $pkg_purge libfoo 2>'purged libfoo/1.0.0';
+ $* -e $src/libfoo-1.1.0 2>'using libfoo/1.1.0 (external)';
+ $pkg_status libfoo/1.1.0 1>'libfoo unpacked 1.1.0';
+
+ $pkg_configure libfoo 2>'configured libfoo/1.1.0';
+ test -d cfg/libfoo;
+ $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0';
+
+ $pkg_purge libfoo 2>'purged libfoo/1.1.0'
+ }
+
+ : replace-fetched
+ :
+ {
+ $clone_cfg && $pkg_fetch libfoo/1.0.0;
+
+ $* -e $src/libfoo-1.1.0 2>>/EOE != 0;
+ error: package libfoo already exists in configuration cfg/
+ info: version: 1.0.0, state: fetched, substate: none
+ info: use 'pkg-unpack --replace|-r' to replace
+ EOE
+
+ $* -r -e $src/libfoo-1.1.0 2>'using libfoo/1.1.0 (external)';
+ $pkg_status libfoo/1.1.0 1>'libfoo unpacked 1.1.0';
+
+ $pkg_purge libfoo 2>'purged libfoo/1.1.0'
+ }
+
+ : replace-unpacked
+ :
+ {
+ $clone_cfg && $pkg_fetch libfoo/1.0.0;
+
+ $* libfoo 2>'unpacked libfoo/1.0.0';
+
+ $* -e $src/libfoo-1.1.0 2>>/EOE != 0;
+ error: package libfoo already exists in configuration cfg/
+ info: version: 1.0.0, state: unpacked, substate: none
+ info: use 'pkg-unpack --replace|-r' to replace
+ EOE
+
+ $* -r -e $src/libfoo-1.1.0 2>'using libfoo/1.1.0 (external)';
+ $pkg_status libfoo/1.1.0 1>'libfoo unpacked 1.1.0';
+
+ $pkg_purge libfoo 2>'purged libfoo/1.1.0'
+ }
+
+ : wrong-state
+ :
+ {
+ $clone_cfg;
+
+ $* libfoo 2>>/EOE != 0;
+ error: package libfoo does not exist in configuration cfg/
+ EOE
+
+ $* -e $src/libfoo-1.1.0 2>'using libfoo/1.1.0 (external)';
+
+ $* libfoo 2>>EOE != 0;
+ error: package libfoo is unpacked
+ info: expected it to be fetched
+ EOE
+
+ $pkg_purge libfoo 2>'purged libfoo/1.1.0'
+ }
+
+ : right-state
+ :
+ {
+ $clone_cfg && $pkg_fetch libfoo/1.0.0;
+
+ $pkg_status libfoo/1.0.0 1>'libfoo fetched 1.0.0';
+ $* libfoo 2>'unpacked libfoo/1.0.0';
+ $pkg_status libfoo/1.0.0 1>'libfoo unpacked 1.0.0';
+
+ $pkg_configure libfoo 2>'configured libfoo/1.0.0';
+ test -d cfg/libfoo-1.0.0;
+ $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0';
+
+ $pkg_purge libfoo 2>'purged libfoo/1.0.0'
+ }
+
+ : purge-existing
+ :
+ {
+ $clone_cfg;
+ cp --no-cleanup -r $src/libfoo-1.1.0 ./;
+
+ $* -p -e libfoo-1.1.0 2>'using libfoo/1.1.0 (external)';
+
+ $pkg_purge libfoo 2>'purged libfoo/1.1.0'
+ }
+}
+
+: dir-rep
+:
+{
+ rep_add += --type dir
+
+ : no-repos
+ :
+ {
+ $clone_root_cfg;
+
+ $* libfoo/1.1.0 2>>/EOE != 0
+ error: configuration cfg/ has no repositories
+ info: use 'bpkg rep-add' to add a repository
+ EOE
+ }
+
+ : unfetched
+ :
+ {
+ $clone_root_cfg && $rep_add $src/libfoo-1.1.0;
+
+ $* libfoo/1.1.0 2>>/EOE != 0
+ error: configuration cfg/ has no available packages
+ info: use 'bpkg rep-fetch' to fetch available packages list
+ EOE
+ }
+
+ : unavailable
+ :
+ {
+ $clone_root_cfg && $rep_add $src/libfoo-1.1.0 && $rep_fetch;
+
+ $* libfoo/1.0.0 2>>EOE != 0
+ error: package libfoo 1.0.0 is not available
+ EOE
+ }
+
+ : unavailable-dir-based
+ :
+ {
+ $clone_root_cfg && $rep_add $rep/t1 --type pkg && $rep_fetch --trust-yes;
+
+ $* libfoo/1.0.0 2>>EOE != 0
+ error: package libfoo 1.0.0 is not available from a directory-based repository
+ EOE
+ }
+
+ : available
+ :
+ {
+ $clone_root_cfg && $rep_add $src/libfoo-1.1.0 && $rep_fetch;
+
+ $* libfoo/1.1.0 2>>EOE;
+ using libfoo/1.1.0 (external)
+ EOE
+
+ $pkg_status libfoo 1>'libfoo unpacked 1.1.0';
+
+ $pkg_configure libfoo 2>'configured libfoo/1.1.0';
+ test -d cfg/libfoo;
+ $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'
+ }
+}
+
+: existing
+:
+{
+ : version-fixup
+ :
+ : Test that the version is populated with the snapshot information for the
+ : package directory that is under the version control.
+ :
+ if ($remote != true)
+ {
+ $clone_root_cfg;
+
+ rep = $canonicalize([dir_path] $out_git/state0);
+
+ $* -e $rep/style-basic.git 2>>~%EOE%
+ %using style-basic/1\.1\.0-a\.0\.\d+\..+ \(external\)%
+ EOE
+ }
+}
+
+: hello
+:
+{
+ $clone_cfg;
+ $rep_add $rep/hello && $rep_fetch --trust $cert_fp &cfg/.bpkg/certs/**;
+ $pkg_fetch libhello/1.0.0;
+
+ $* libhello 2>'unpacked libhello/1.0.0';
+
+ $pkg_purge libhello 2>'purged libhello/1.0.0'
+}