#! /usr/bin/env bash # Usage: test.sh [test-options] [bpkg-common-options] # # Test options are: # # -v # Run verbose. By default, this script runs bpkg quiet and suppresses # error messages in the fail tests. Note that when this options is # specified, bpkg is called with default verbosity level. If you want # more bpkg diagnostics, add the --verbose N option. # # --remote # Test using the remote repositories. Normally, you would first run the # local test in order to create the repositories, then publish them (see # pkg/publish.sh), and finally run the remote test. # # -c # Use the compiler specified to configure cxx module. # # --valgrind # Run under valgrind (takes forever). # # Some common bpkg use-cases worth testing: # # --fetch wget # --fetch curl # --fetch fetch --fetch-option --no-verify-peer # # --tar bsdtar # # --sha256 shasum # --sha256 sha256-freebsd # trap 'exit 1' ERR tmp_file=`mktemp` # Remove temporary file on exit. Cover the case when exit due to an error. # trap 'rm -f $tmp_file' EXIT function error () { echo "$*" 1>&2 exit 1 } bpkg="../bpkg/bpkg" cfg=/tmp/conf if [ "${MSYSTEM:0:5}" = "MINGW" -o "${MSYSTEM:0:4}" = "MSYS" ]; then msys=y fi verbose=n remote=n options= cxx_options= while [ $# -gt 0 ]; do case $1 in -v) verbose=y shift ;; --remote) remote=y shift ;; --valgrind) bpkg="valgrind -q $bpkg" shift ;; -c) shift cxx_options="config.cxx=$1" shift ;; *) # If this is the --verbose bpkg option, switch to the verbose # mode as well. # if [ "$1" == "--verbose" ]; then verbose=y fi options="$options $1" shift ;; esac done if [ "$verbose" != "y" ]; then options="$options -q" fi bpkg="$bpkg $options" # Repository location and name prefixes. Note that the local path is carefully # crafted so that we end up with the same repository names in both cases. This # is necessary for the authentication tests to work in both cases. # if [ "$remote" = "y" ]; then rep=https://build2.org/bpkg/1 repn=build2.org/ else rep=pkg/1/build2.org repn=build2.org/ fi # # function test () { local cmd=$1; shift local ops= if [ "$cmd" != "rep-create" -a \ "$cmd" != "rep-info" -a \ "$cmd" != "pkg-verify" ]; then ops="-d $cfg" fi if [ "$cmd" = "rep-fetch" -o \ "$cmd" = "rep-info" ]; then ops="$ops --auth all" fi if [ -t 0 ]; then $bpkg $cmd $ops $* else $bpkg $cmd $ops $* >$tmp_file diff --strip-trailing-cr -u - $tmp_file fi if [ $? -ne 0 ]; then error "failed: $bpkg $cmd $ops $*" fi } function fail () { local cmd=$1; shift local ops= if [ "$cmd" != "rep-create" -a \ "$cmd" != "rep-info" -a \ "$cmd" != "pkg-verify" ]; then ops="-d $cfg" fi if [ "$cmd" = "rep-fetch" -o \ "$cmd" = "rep-info" ]; then ops="$ops --auth all" fi if [ "$verbose" = "y" ]; then $bpkg $cmd $ops $* else $bpkg $cmd $ops $* 2>/dev/null fi if [ $? -eq 0 ]; then error "succeeded: $bpkg $cmd $ops $*" fi return 0 } # Verify package status. # function stat () { local s=`$bpkg pkg-status -d $cfg $1` if [ "$s" != "$2" ]; then error "status $1: '$s', expected: '$2'" fi } # Verify path is gone (no longer exists) # function gone () { if [ -e "$1" ]; then error "path $1 still exists" fi } # Repository certificate fingerprint. # function rep_cert_fp () { cat $1/repositories | \ sed -n '/^-----BEGIN CERTIFICATE-----$/,/^-----END CERTIFICATE-----$/p' | \ openssl x509 -sha256 -noout -fingerprint | \ sed -n 's/^SHA256 Fingerprint=\(.*\)$/\1/p' } # Edit file with sed. # function edit () { local path=$1; shift sed "$@" $path > $path.bak mv $path.bak $path } # Repository absolute location from a relative path. # function location () { if [ "$remote" = "y" ]; then echo "$rep/$1" elif [ "$msys" = "y" ]; then # Convert Windows path like c:/abc/xyz to the c:\abc\xyz canonical form. # echo "`pwd -W`/$rep/$1" | sed 's%/%\\%g' else echo "`pwd`/$rep/$1" fi } ## ## Low-level commands. ## ## ## pkg-verify ## fail pkg-verify # archive expected fail pkg-verify ./no-such-file # archive does not exist fail pkg-verify pkg/1/build2.org/common/not-a-package.tar.gz fail pkg-verify --silent pkg/1/build2.org/common/not-a-package.tar.gz test pkg-verify pkg/1/build2.org/common/hello/libhello-1.0.0.tar.gz ## ## rep-create ## fail rep-create # no 'repositories' file fail rep-create pkg/1/build2.org/satisfy # unexpected files test rep-create pkg/1/build2.org/common/hello --key key.pem test rep-create pkg/1/build2.org/common/foo/stable test rep-create pkg/1/build2.org/common/foo/testing test rep-create pkg/1/build2.org/common/bar/stable test rep-create pkg/1/build2.org/common/bar/testing test rep-create pkg/1/build2.org/common/bar/unstable ## ## rep-info ## fail rep-info # repository location expected test rep-info --trust-yes $rep/common/foo/testing <= 1.1.0 location: libbar-1.1.1.tar.gz sha256sum: d09700602ff78ae405b6d4850e34660e939d27676e015a23b549884497c8bb45 EOF hello_fp=`rep_cert_fp pkg/1/build2.org/common/hello` test rep-info -m -p --trust $hello_fp $rep/common/hello <= 0.4.0 location: libhello-1.0.0.tar.gz sha256sum: d18d1472980399dd1fdbc776cb3eb3f7b2f62447210c8cfbcf1a8dd52a468395 EOF ## ## cfg-create ## test cfg-create --wipe cxx $cxx_options config.install.root=/tmp/install stat libfoo unknown test cfg-create --wipe config.install.root=/tmp/install cxx $cxx_options stat libfoo unknown ## ## rep-add ## test cfg-create --wipe fail rep-add # repository location expected fail rep-add stable # invalid location fail rep-add http:// # invalid location # relative path # test rep-add ./1/bar/stable fail rep-add ./1/../1/bar/stable # duplicate # absolute path # test rep-add /tmp/1/foo/stable fail rep-add /tmp/1/../1/foo/stable # duplicate # remote URL # test rep-add http://pkg.example.org/1/testing fail rep-add https://www.example.org/1/testing # duplicate ## ## rep-fetch ## test cfg-create --wipe fail rep-fetch # no repositories # hello repository # test cfg-create --wipe test rep-add $rep/common/hello test rep-fetch --trust $hello_fp test rep-fetch # bar/unstable repository # test cfg-create --wipe test rep-add $rep/common/bar/unstable test rep-fetch --trust-yes test rep-fetch # both # test cfg-create --wipe test rep-add $rep/common/hello test rep-add $rep/common/bar/unstable test rep-fetch --trust-yes test rep-fetch ## ## pkg-fetch ## test rep-create pkg/1/build2.org/fetch/t1 test cfg-create --wipe fail pkg-fetch -e # archive expected fail pkg-fetch -e ./no-such-file # archive does not exist fail pkg-fetch # package name expected fail pkg-fetch libfoo # package version expected fail pkg-fetch libfoo/1/2/3 # invalid package version fail pkg-fetch libfoo/1.0.0 # no repositories test rep-add $rep/fetch/t1 fail pkg-fetch libfoo/1.0.0 # no packages test rep-fetch --trust-yes fail pkg-fetch libfoo/2+1.0.0 # not available test cfg-create --wipe test rep-add $rep/fetch/t1 test rep-fetch --trust-yes test pkg-fetch libfoo/1.0.0 stat libfoo/1.0.0 "fetched; available" fail pkg-fetch libfoo/1.0.0 fail pkg-fetch -e pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz test pkg-purge libfoo test pkg-fetch -e pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz stat libfoo/1.0.0 "fetched; available" test pkg-unpack libfoo test pkg-fetch -r libfoo/1.1.0 stat libfoo/1.1.0 "fetched; available" test pkg-unpack libfoo test pkg-fetch -r -e pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz stat libfoo/1.0.0 "fetched; available" test pkg-fetch -r libfoo/1.1.0 stat libfoo/1.1.0 "fetched; available" test pkg-fetch -r -e pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz stat libfoo/1.0.0 "fetched; available" test pkg-purge libfoo # hello # test cfg-create --wipe test rep-add $rep/common/hello test rep-fetch --trust $hello_fp test pkg-fetch libhello/1.0.0 test pkg-purge libhello ## ## pkg-unpack ## test cfg-create --wipe fail pkg-unpack -r # replace only with existing fail pkg-unpack -e # package directory expected fail pkg-unpack # package name expected test rep-add $rep/fetch/t1 test rep-fetch --trust-yes # existing # fail pkg-unpack -e ./no-such-dir # package directory does not exist fail pkg-unpack -e ./pkg # not a package directory test pkg-fetch libfoo/1.0.0 fail pkg-unpack -e pkg/1/build2.org/fetch/libfoo-1.1.0 # already exists test pkg-purge libfoo test pkg-unpack -e pkg/1/build2.org/fetch/libfoo-1.1.0 stat libfoo/1.1.0 "unpacked; available" test pkg-purge libfoo # existing & replace # test pkg-fetch libfoo/1.0.0 fail pkg-unpack -e pkg/1/build2.org/fetch/libfoo-1.1.0 test pkg-unpack -r -e pkg/1/build2.org/fetch/libfoo-1.1.0 stat libfoo/1.1.0 "unpacked; available" test pkg-purge libfoo test pkg-fetch libfoo/1.0.0 test pkg-unpack libfoo fail pkg-unpack -e pkg/1/build2.org/fetch/libfoo-1.1.0 test pkg-unpack -r -e pkg/1/build2.org/fetch/libfoo-1.1.0 stat libfoo/1.1.0 "unpacked; available" test pkg-purge libfoo # package name # fail pkg-unpack libfoo # no such package in configuration test pkg-unpack -e pkg/1/build2.org/fetch/libfoo-1.1.0 fail pkg-unpack libfoo # wrong package state test pkg-purge libfoo test pkg-fetch libfoo/1.0.0 stat libfoo/1.0.0 "fetched; available" test pkg-unpack libfoo stat libfoo/1.0.0 "unpacked; available" test pkg-purge libfoo # hello # test cfg-create --wipe test rep-add $rep/common/hello test rep-fetch --trust $hello_fp test pkg-fetch libhello/1.0.0 test pkg-unpack libhello test pkg-purge libhello ## ## pkg-purge ## test cfg-create --wipe fail pkg-purge # missing package name fail pkg-purge libfoo # no such package # purge fetched # test pkg-fetch -e pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz test pkg-purge libfoo stat libfoo unknown # --keep # test pkg-fetch -e pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz test pkg-purge -k libfoo stat libfoo "fetched 1.0.0" test pkg-purge libfoo # archive and --purge # cp pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz $cfg/ test pkg-fetch -e -p $cfg/libfoo-1.0.0.tar.gz test pkg-purge libfoo stat libfoo unknown gone $cfg/libfoo-1.0.0.tar.gz # no archive but --keep # test pkg-unpack -e pkg/1/build2.org/fetch/libfoo-1.1.0 fail pkg-purge --keep libfoo stat libfoo "unpacked 1.1.0" test pkg-purge libfoo # purge unpacked directory # test pkg-unpack -e pkg/1/build2.org/fetch/libfoo-1.1.0 test pkg-purge libfoo stat libfoo unknown # purge unpacked archive # test pkg-fetch -e pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz test pkg-unpack libfoo test pkg-purge libfoo stat libfoo unknown gone $cfg/libfoo-1.0.0 # purge unpacked archive but --keep # test pkg-fetch -e pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz test pkg-unpack libfoo test pkg-purge --keep libfoo stat libfoo "fetched 1.0.0" gone $cfg/libfoo-1.0.0 test pkg-purge libfoo stat libfoo unknown # directory and --purge # cp -r pkg/1/build2.org/fetch/libfoo-1.1.0 $cfg/ test pkg-unpack -e -p $cfg/libfoo-1.1.0 test pkg-purge libfoo stat libfoo unknown gone $cfg/libfoo-1.1.0 # archive and --purge # cp pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz $cfg/ test pkg-fetch -e -p $cfg/libfoo-1.0.0.tar.gz test pkg-unpack libfoo test pkg-purge libfoo stat libfoo unknown gone $cfg/libfoo-1.0.0 gone $cfg/libfoo-1.0.0.tar.gz # broken # cp pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz $cfg/ test pkg-fetch -e -p $cfg/libfoo-1.0.0.tar.gz test pkg-unpack libfoo chmod 000 $cfg/libfoo-1.0.0 fail pkg-purge libfoo stat libfoo/1.0.0 broken fail pkg-purge libfoo # need --force fail pkg-purge -f -k libfoo # can't keep broken fail pkg-purge -f libfoo # out directory still exists chmod 755 $cfg/libfoo-1.0.0 rm -r $cfg/libfoo-1.0.0 fail pkg-purge -f libfoo # archive still exists rm $cfg/libfoo-1.0.0.tar.gz test pkg-purge -f libfoo stat libfoo unknown ## ## pkg-configure/pkg-disfigure ## test cfg-create --wipe test rep-add $rep/common/hello test rep-fetch --trust $hello_fp fail pkg-configure # package name expected fail pkg-configure config.dist.root=/tmp # ditto fail pkg-configure libhello libhello # unexpected argument fail pkg-configure libhello1 # no such package fail pkg-disfigure # package name expected fail pkg-disfigure libhello1 # no such package test pkg-fetch libhello/1.0.0 fail pkg-configure libhello $cxx_options # wrong package state fail pkg-disfigure libhello # wrong package state test pkg-purge libhello # src == out # test pkg-fetch libhello/1.0.0 test pkg-unpack libhello test pkg-configure libhello $cxx_options stat libhello "configured 1.0.0; available sys:?" test pkg-disfigure libhello stat libhello "unpacked 1.0.0; available sys:?" test pkg-purge libhello stat libhello/1.0.0 "available" # src != out # test cfg-create --wipe test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0 test pkg-configure libhello $cxx_options stat libhello "configured 1.0.0" test pkg-disfigure libhello stat libhello "unpacked 1.0.0" test pkg-purge libhello stat libhello unknown gone $cfg/libhello-1.0.0 # out still exists after disfigure # test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0 test pkg-configure libhello $cxx_options touch $cfg/libhello-1.0.0/stray fail pkg-disfigure libhello stat libhello/1.0.0 broken rm -r $cfg/libhello-1.0.0 test pkg-purge -f libhello stat libhello unknown # disfigure failed # test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0 test pkg-configure libhello $cxx_options chmod 555 $cfg/libhello-1.0.0 fail pkg-disfigure libhello stat libhello/1.0.0 broken chmod 755 $cfg/libhello-1.0.0 rm -r $cfg/libhello-1.0.0 test pkg-purge -f libhello stat libhello unknown # While it's forbidden to delete a directory with write permissions being # revoked with the 'chmod 555' command in MSYS, it's still allowed to create # subdirectories and files inside such a directory. This is why the following # 'fail pkg-configure libhello' test cases undesirably succeed in MSYS. # if [ "$msys" != "y" ]; then # configure failed but disfigure succeeds # test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0 mkdir -p $cfg/libhello-1.0.0/build chmod 555 $cfg/libhello-1.0.0/build fail pkg-configure libhello $cxx_options stat libhello "unpacked 1.0.0" test pkg-purge libhello stat libhello unknown # configure and disfigure both failed # test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0 mkdir -p $cfg/libhello-1.0.0/build # Trip both con/dis. # chmod 555 $cfg/libhello-1.0.0 $cfg/libhello-1.0.0/build fail pkg-configure libhello $cxx_options stat libhello/1.0.0 broken chmod 755 $cfg/libhello-1.0.0 $cfg/libhello-1.0.0/build rm -r $cfg/libhello-1.0.0 test pkg-purge -f libhello stat libhello unknown fi # dependency management # test rep-create pkg/1/build2.org/depend/stable test cfg-create --wipe test rep-add $rep/depend/stable test rep-fetch --trust-yes test pkg-fetch libbar/1.0.0 test pkg-unpack libbar fail pkg-configure libbar # no libfoo stat libbar/1.0.0 "unpacked; available" test pkg-fetch libfoo/1.0.0 test pkg-unpack libfoo fail pkg-configure libbar # libfoo not configured test pkg-configure libfoo test pkg-configure libbar fail pkg-disfigure libfoo # libbar still depends on libfoo test pkg-disfigure libbar test pkg-disfigure libfoo test pkg-purge libbar test pkg-purge libfoo test pkg-fetch libfoo/1.0.0 test pkg-unpack libfoo test pkg-configure libfoo test pkg-fetch libbar/1.1.0 test pkg-unpack libbar fail pkg-configure libbar # libfoo >= 1.1.0 test pkg-disfigure libfoo test pkg-purge libfoo test pkg-fetch libfoo/1.1.0 test pkg-unpack libfoo test pkg-configure libfoo test pkg-configure libbar test pkg-disfigure libbar test pkg-disfigure libfoo test pkg-purge libfoo test pkg-purge libbar test pkg-fetch libfoo/1.1.0 test pkg-unpack libfoo test pkg-configure libfoo test pkg-fetch libbar/1.2.0 test pkg-unpack libbar fail pkg-configure libbar # libfoo >= 1.2.0 test pkg-disfigure libfoo test pkg-purge libfoo test pkg-fetch libfoo/1.2.0 test pkg-unpack libfoo test pkg-configure libfoo test pkg-configure libbar fail pkg-disfigure libfoo # "package libbar on libfoo >= 1.2.0" test pkg-disfigure libbar test pkg-disfigure libfoo test pkg-purge libfoo test pkg-purge libbar test pkg-fetch libfoo/1.1.0 test pkg-unpack libfoo test pkg-configure libfoo test pkg-fetch libbar/1.3.0 test pkg-unpack libbar fail pkg-configure libbar # incompatible constraints test pkg-disfigure libfoo test pkg-purge libfoo test pkg-purge libbar ## ## pkg-status (also tested in pkg-{fetch,unpack,configure,disfigure,purge}) ## test rep-create pkg/1/build2.org/status/stable test rep-create pkg/1/build2.org/status/extra test rep-create pkg/1/build2.org/status/testing test rep-create pkg/1/build2.org/status/unstable # basics # test cfg-create --wipe stat libfoo/1.0.0 "unknown" stat libfoo "unknown" test rep-add $rep/status/stable test rep-fetch --trust-yes stat libfoo/1.0.0 "available" stat libfoo "available 1.0.0 sys:?" test pkg-fetch libfoo/1.0.0 stat libfoo/1.0.0 "fetched; available" stat libfoo "fetched 1.0.0; available sys:?" # multiple versions/revisions # test cfg-create --wipe test rep-add $rep/status/extra test rep-fetch --trust-yes stat libbar "available 1.1.0+1 sys:?" test rep-add $rep/status/stable test rep-fetch --trust-yes stat libbar "available 1.1.0+1 1.0.0 sys:?" test cfg-create --wipe test rep-add $rep/status/testing test rep-fetch --trust-yes stat libbar "available 1.1.0 1.0.0+1 1.0.0 sys:?" test cfg-create --wipe test rep-add $rep/status/unstable test rep-fetch --trust-yes stat libbar "available 2.0.0 1.1.0 1.0.0+1 1.0.0 sys:?" test pkg-fetch libbar/1.0.0+1 stat libbar "fetched 1.0.0+1; available 2.0.0 1.1.0 sys:?" test pkg-purge libbar test pkg-fetch libbar/2.0.0 stat libbar "fetched 2.0.0; available sys:?" ## ## pkg-update ## test cfg-create --wipe test rep-add $rep/common/hello test rep-fetch --trust $hello_fp fail pkg-update # package name expected fail pkg-update libhello # no such package test pkg-fetch libhello/1.0.0 fail pkg-update libhello # wrong package state test pkg-purge libhello # src == out # test pkg-fetch libhello/1.0.0 test pkg-unpack libhello test pkg-configure libhello $cxx_options test pkg-update libhello test pkg-update libhello test pkg-disfigure libhello test pkg-purge libhello # src != out # test cfg-create --wipe test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0 test pkg-configure libhello $cxx_options test pkg-update libhello test pkg-update libhello test pkg-disfigure libhello test pkg-purge libhello ## ## pkg-clean ## test cfg-create --wipe test rep-add $rep/common/hello test rep-fetch --trust $hello_fp fail pkg-clean # package name expected fail pkg-clean libhello # no such package test pkg-fetch libhello/1.0.0 fail pkg-clean libhello # wrong package state test pkg-purge libhello # src == out # test pkg-fetch libhello/1.0.0 test pkg-unpack libhello test pkg-configure libhello $cxx_options test pkg-update libhello test pkg-clean libhello test pkg-clean libhello test pkg-disfigure libhello test pkg-purge libhello # src != out # test cfg-create --wipe test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0 test pkg-configure libhello $cxx_options test pkg-update libhello test pkg-clean libhello test pkg-clean libhello test pkg-disfigure libhello test pkg-purge libhello ## ## Low-level command scenarios. ## # build and clean package # test cfg-create --wipe cxx $cxx_options test rep-add $rep/common/hello test rep-fetch --trust $hello_fp test pkg-fetch libhello/1.0.0 test pkg-unpack libhello test pkg-configure libhello $cxx_options test pkg-update libhello test pkg-clean libhello test pkg-disfigure libhello test pkg-purge libhello ## ## pkg-build ## # 1 (libfoo) # test rep-create pkg/1/build2.org/satisfy/t1 test cfg-create --wipe fail pkg-build -p # package name expected fail pkg-build -p libfoo # unknown package fail pkg-build -p libfoo/1.0.0 # unknown package test pkg-build -p pkg/1/build2.org/satisfy/libfoo-1.1.0.tar.gz <= 1.1.0) # test rep-create pkg/1/build2.org/satisfy/t4a test rep-create pkg/1/build2.org/satisfy/t4b test rep-create pkg/1/build2.org/satisfy/t4c test rep-create pkg/1/build2.org/satisfy/t4d test cfg-create --wipe test rep-add $rep/satisfy/t4c test rep-fetch --trust-yes test pkg-build -p libbaz <> pkg/1/build2.org/auth/signature-mismatch/signature << EOF signature: \\ XBjnmXXVHY0RqMI0gL/P4t/vuWwK9JJkLl4Qf2gMxq5k2WQ2CIE56DfG0RaGklgKcI3UxsQZvMQI 5PNtAHJDjteQ+BqY0io8A43KPX+2LKMU+I825sKmPRjCLYleGM3mNndDkWfYtAzYk5AmR2piqRz0 D7CLq9GIoQQZO4Fw44muaQDMCRcXy8Txx2jDnretQjx/C0ZQw4M/cd6/cKEKUmLITDkBig9oVlSh tpxHqWz5NTbO3vm8ILc03AwiOJHwZweLb6ocJ6a467IJa+F/xUm9B09k8wFWMs+jHXXzHDE0syv7 lqWL7SvHSjVFrGVFKS6nx7lCj2b8XFiGlwWIwjY4m/VK/5QmbL/lC4f+ww5XT5NG5iYh/eMaCxCJ zTg5iZsWNLhrx9uKNrL5xC4z0OONRVOwzu7gsqr0GLWewPyhH0AqJLgOSkw9N7FJwbv2IKNZ88YA u2YMXNkXytcQvENLVQDX5oxvUMEurUJFOCuYB/SEnpcwkV5h9RtXzIFVy4OCTU2MhQHDEldI8s7w Hga/ct4WupgE228gGdgwJLCbHx6AWBlS9iL10AdS8JkQ9LaZwTMHHz44f8y00X4MiT06gpgDeoQD rUyP0KNG65tdWnVTMqg6Q/YXhtRZLHoD6+QbiYLlruR1phu4y4fDt7AKxoXfeme/a86A37UogZY= \\ EOF # rep-fetch # signed_fp=`rep_cert_fp pkg/1/build2.org/auth/signed` test cfg-create --wipe test rep-add $rep/auth/signed test rep-fetch --trust $signed_fp test rep-fetch test cfg-create --wipe test rep-add $rep/auth/signed test rep-fetch --trust-no --trust $signed_fp test rep-fetch test rep-fetch --trust-no # certificate is already trusted test cfg-create --wipe test rep-add $rep/auth/signed test rep-fetch --trust-yes test rep-fetch test cfg-create --wipe test rep-add $rep/auth/signed fail rep-fetch --trust-no test cfg-create --wipe test rep-add $rep/auth/signed fail rep-fetch --trust-yes --trust-no # inconsistent options test cfg-create --wipe test rep-add $rep/auth/unsigned1 test rep-fetch --trust-yes test rep-fetch test rep-add $rep/auth/unsigned2 test rep-fetch test rep-fetch --trust-no # certificates are already trusted test cfg-create --wipe test rep-add $rep/auth/unsigned1 fail rep-fetch --trust-no test cfg-create --wipe test rep-add $rep/auth/name-mismatch fail rep-fetch --trust-yes # certificate name mismatch test cfg-create --wipe test rep-add $rep/auth/expired fail rep-fetch --trust-yes # certificate expired test cfg-create --wipe test rep-add $rep/auth/sha256sum-mismatch fail rep-fetch --trust-yes # packages file checksum mismatch test cfg-create --wipe test rep-add $rep/auth/signature-mismatch fail rep-fetch --trust-yes # packages file signature:mismatch # rep-info # test cfg-create --wipe test rep-info --trust-no --trust $signed_fp -d $cfg $rep/auth/signed <libbar>=2), libbar/2 test rep-create pkg/1/build2.org/system/t2 # foo/2 (->libbar>=2), libbar/0+1 test rep-create pkg/1/build2.org/system/t3 # ->t2; foo/2 (->libbar>=2) function build () { test build -p $* test build -y $* } # Fetch system/t1 repository: foo/2 (->libbar/2), libbar/2 # test cfg-create --wipe test rep-add $rep/system/t1 test rep-fetch --trust-yes # Fail to build different combinations of package duplicates on the command # line. # fail build sys:libbar ?sys:libbar fail build ?sys:libbar sys:libbar fail build ?sys:libbar libbar fail build libbar ?sys:libbar fail build sys:libbar libbar fail build libbar sys:libbar # Build sys:libbar/*. # build sys:libbar <<< 'configure sys:libbar/*' stat libbar \ 'configured,system * hold_package hold_version; available 2 1 sys:?' stat libbaz 'available 2 sys:?' # Build foo with preconfigured sys:libbar/*. # build foo <<< "build foo/2" stat foo 'configured 2 hold_package; available sys:?' stat libbar \ 'configured,system * hold_package hold_version; available 2 1 sys:?' stat libbaz 'available 2 sys:?' # Reconfigure sys:libbar/* to 2. # build sys:libbar/2 <libbar>=2), libbar/0+1 # test cfg-create --wipe test rep-add $rep/system/t2 test rep-fetch --trust-yes # Fail to build foo having no system package configured. # fail build foo fail build foo libbar stat foo 'available 2 sys:?' stat libbar 'available sys:?' # Build foo configuring sys:libbar. # build foo sys:libbar <libbar>=2), libbar/0+1 # test cfg-create --wipe test rep-add $rep/system/t3 # ->t2; foo/2 (->libbar>=2) test rep-fetch --trust-yes # After test number of faulty builds, then build foo ?sys:libbar/2. Afterwards # fail attempts to reconfigure libbar. # fail build foo fail build sys:libbar/1 fail build foo sys:libbar/1 fail build foo ?sys:libbar/1 stat foo 'available 2 sys:?' stat libbar 'unknown' build foo ?sys:libbar/2 <