X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=tests%2Flib;h=776e2a3e40f42bf426365d96f2894e57795044e7;hp=7a5ede52f9f96178d17f513454448ecd4a331482;hb=9f377842120dd8d6206a3f3f2eb297b3e4907fa8;hpb=bb53fd896dbd2e5d09c56d01b5e0337b865c043d diff --git a/tests/lib b/tests/lib index 7a5ede52..776e2a3e 100644 --- a/tests/lib +++ b/tests/lib @@ -2,13 +2,14 @@ exec 2>&1 set -x +set -o pipefail -if [ "x$DGIT_TEST_INTREE" != x ]; then - : ${DGIT_TEST:=$DGIT_TEST_INTREE/dgit} - : ${DGIT_REPOS_SERVER_TEST:=$DGIT_TEST_INTREE/infra/dgit-repos-server} - : ${DGIT_SSH_DISPATCH_TEST:=$DGIT_TEST_INTREE/infra/dgit-ssh-dispatch} - export DGIT_TEST DGIT_REPOS_SERVER_TEST DGIT_SSH_DISPATCH_TEST -fi +. tests/lib-core + +t-set-intree + +: ${DGIT_TEST_DEBUG:=-D} +export DGIT_TEST_DEBUG root=`pwd` troot=$root/tests @@ -24,14 +25,14 @@ fi cd $tmp tmp=`pwd` -export HOME=$tmp -export DGIT_TEST_DUMMY_DIR=$tmp + +t-set-using-tmp + ln -f $troot/ssh ssh mkdir -p $tmp/gnupg cp $troot/gnupg/* $tmp/gnupg chmod go-rw $tmp/gnupg/* -export GNUPGHOME=$tmp/gnupg mkdir -p $tmp/incoming cat <$tmp/dput.cf @@ -41,18 +42,27 @@ incoming = $tmp/incoming run_dinstall = 0 END -fail () { - echo >&2 "failed: $*" - exit 1 -} - t-expect-fail () { local mpat="$1"; shift + set +o pipefail LC_MESSAGES=C "$@" 2>&1 | tee $tmp/t.output - test ${PIPESTATUS[0]} != 0 + local gotstatus=${PIPESTATUS[0]} + set -o pipefail + test $gotstatus != 0 egrep "$mpat" $tmp/t.output ||false } +t-reporefs () { + local whichoutput=$1; shift + local outputfile="$tmp/show-refs.$whichoutput" + (set -e + exec >"$outputfile" + if test -d $tmp/git/$p.git; then + cd $tmp/git/$p.git + git show-ref |sort + fi) +} + t-untar () { local tarfile=$1.tar local edittree=$1.edit @@ -95,23 +105,27 @@ t-prep-newpackage () { v=$2 t-archive-none $p t-git-none - v=3-1 t-worktree $v cd $p - git branch -m dgit/sid master - git remote rm dgit + if ! git-show-ref --verify --quiet refs/heads/master; then + git branch -m dgit/sid master + git remote rm dgit + fi cd .. } t-archive-none () { p=$1 mkdir -p $tmp/aq $tmp/mirror/pool/main - mkdir -p $tmp/aq/dsc_in_suite $tmp/aq/dsc_in_suite/sid local suite=sid + >$tmp/aq/package.$suite.$p t-archive-updated $suite $p + >$tmp/aq/package.new.$p + t-archive-updated new $p + ln -s sid $tmp/aq/dsc_in_suite/unstable cat <<'END' >$tmp/aq/suites [ @@ -133,7 +147,9 @@ END t-archive-updated () { local suite=$1 local p=$2 - perl <$tmp/aq/package.$suite.$p >$tmp/aq/dsc_in_suite/$suite/$p -wne ' + local suitedir=$tmp/aq/dsc_in_suite/$suite + mkdir -p $suitedir + perl <$tmp/aq/package.$suite.$p >$suitedir/$p -wne ' use JSON; use strict; our @v; @@ -151,15 +167,17 @@ t-archive-updated () { } t-archive-process-incoming () { - mv incoming/${p}_${v}[._]* mirror/pool/main/ - t-archive-query + local suite=$1 + mv $tmp/incoming/${p}_${v}[._]* $tmp/mirror/pool/main/ + t-archive-query "$suite" } t-archive-query () { + local suite=${1-sid} local dscf=main/${p}_${v}.dsc - local sha=`sha256sum >$tmp/aq/package.sid.${p} - t-archive-updated sid $p + local sha=`sha256sum <$tmp/mirror/pool/$dscf` + echo "${v} ${sha% -} $dscf" >>$tmp/aq/package.$suite.${p} + t-archive-updated $suite $p } t-archive () { @@ -174,12 +192,38 @@ t-archive () { (set -e; cd $tmp/extract; dpkg-source -x ../mirror/pool/main/$dscf) } +t-git-dir-time-passes () { + touch -d 'last year' $tmp/git/$p.git +} + +t-git-dir-check () { + local gitdir=$tmp/git/$p.git + case "$1" in + enoent) + if test -e "$gitdir"; then fail "$gitdir exists"; fi + return + ;; + public) wantstat='7[75]5' ;; + secret) wantstat='7[70]0' ;; + *) fail "$1 t-git-dir-check ?" ;; + esac + gotstat=`stat -c%a $gitdir` + case "$gotstat" in + *$wantstat) return ;; + *) fail "$gitdir has mode $gotstat, expected $wantstat" ;; + esac +} + +t-rm-dput-dropping () { + rm -f $tmp/${p}_${v}_*.upload +} + t-dgit () { local dgit=${DGIT_TEST-dgit} : ' {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{' $dgit --dgit=$dgit --dget:-u --dput:--config=$tmp/dput.cf \ - -dtest-dummy $DGIT_TEST_OPTS ${DGIT_TEST_DEBUG--D} \ + -dtest-dummy $DGIT_TEST_OPTS $DGIT_TEST_DEBUG \ -k39B13D8A "$@" : '}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} ' @@ -196,7 +240,7 @@ t-cloned-fetched-good () { t-refs-same \ refs/heads/dgit/sid \ refs/remotes/dgit/dgit/sid - t-refs-notexist dgit/unstable remotes/dgit/dgit/unstable + t-refs-notexist refs/dgit/unstable refs/remotes/dgit/dgit/unstable } t-output () { @@ -212,7 +256,11 @@ t-clean-on-branch () { t-git-get-ref () { local ref=$1 - git show-ref -d $1 | perl -ne ' + case "$ref" in + refs/*) ;; + *) fail "t-git-get-ref bad $ref" ;; + esac + (git show-ref -d $1 || test $? = 1) | perl -ne ' $x = $1 if m#^(\w+) \Q'$1'\E(?:\^\{\})?$#; END { print "$x\n" if length $x; } ' @@ -298,6 +346,35 @@ t-822-field () { ' <$file } +t-stunt-envvar () { + local var=$1 + local tstunt=$2 + eval ' + case "'$var'" in + "$tstunt:"*) ;; + *":$tstunt:"*) ;; + *) '$var'="$tstunt:$'$var'" ;; + esac + ' +} + +t-tstunt () { + local tstunt=$tmp/tstunt + t-stunt-envvar PATH $tstunt + t-stunt-envvar PERLLIB $tstunt + local f + for f in "$@"; do + f="./$f" + local d="$tstunt/${f%/*}" + mkdir -p $d + ln -sf "$troot/tstunt/$f" "$d"/. + done +} + +t-tstunt-parsechangelog () { + t-tstunt dpkg-parsechangelog Dpkg/Changelog/Parse.pm +} + t-ref-dsc-dgit () { local dsc=${p}_${v}.dsc local val=`t-822-field $tmp/incoming/$dsc Dgit` @@ -308,8 +385,18 @@ t-ref-dsc-dgit () { t-apply-diff () { local v1=$1 local v2=$2 - (cd $troot/pkg-srcs; debdiff ${p}_${v1}.dsc ${p}_${v2}.dsc) \ - | patch -p1 -u + (cd $troot/pkg-srcs; + debdiff ${p}_${v1}.dsc ${p}_${v2}.dsc || test $? = 1) \ + | patch -p1 -u +} + +t-commit () { + local msg=$1 + v=1.$revision + dch -v$v --distribution unstable "$1" + git add debian/changelog + debcommit + revision=$(( $revision + 1 )) } t-git-config () { @@ -318,12 +405,21 @@ t-git-config () { t-drs () { export DGIT_TEST_TROOT=$troot - export DGIT_TEST_TMP=$tmp t-git-config dgit-distro.test-dummy.git-url "ext::$troot/drs-git-ext %S " t-git-config dgit-distro.test-dummy.git-check true t-git-config dgit-distro.test-dummy.git-create true cp $root/tests/gnupg/{dd.gpg,dm.gpg,dm.txt} $tmp/. cp $root/tests/suites $tmp/. + + drs_dispatch=$tmp/distro=test-dummy + mkdir $drs_dispatch + ln -sf $root $drs_dispatch/dgit-live + ln -sf $tmp/git $drs_dispatch/repos + ln -sf $tmp/suites $tmp/dm.txt $drs_dispatch/ + mkdir -p $drs_dispatch/keyrings + ln -sf $tmp/dd.gpg $drs_dispatch/keyrings/debian-keyring.gpg + ln -sf $tmp/dm.gpg $drs_dispatch/keyrings/debian-maintainers.gpg + ln -sf /bin/true $drs_dispatch/policy-hook } t-dsd () { @@ -340,17 +436,30 @@ t-dsd () { t-git-config dgit-distro.test-dummy/drs.git-check ssh-cmd t-git-config dgit-distro.test-dummy/drs.git-create ssh-cmd - dsd_dispatch=$tmp/dispatch-dir/distro=test-dummy - mkdir -p $dsd_dispatch - ln -sf $root $dsd_dispatch/dgit-live - ln -sf $tmp/git $dsd_dispatch/repos - ln -sf $tmp/suites $tmp/dm.txt $dsd_dispatch/ - mkdir -p $dsd_dispatch/keyrings - ln -sf $tmp/dd.gpg $dsd_dispatch/keyrings/debian-keyring.gpg - ln -sf $tmp/dm.gpg $dsd_dispatch/keyrings/debian-maintainers.gpg - ln -sf /bin/true $dsd_dispatch/policy-hook - - echo 'no-such-package* drs' >$dsd_dispatch/diverts + echo 'no-such-package* drs' >$drs_dispatch/diverts +} + +t-policy-admin () { + ${DGIT_INFRA_PFX}dgit-repos-admin-debian --repos $tmp/git "$@" +} + +t-policy () { + local policyhook=$1 + ln -sf ${DGIT_INFRA_PFX}$policyhook \ + $drs_dispatch/policy-hook +} + +t-debpolicy () { + t-dsd + t-policy dgit-repos-policy-debian + + mkdir $tmp/git + t-policy-admin create-db +} + +t-policy-periodic () { + ${DGIT_REPOS_SERVER_TEST-dgit-repos-server} \ + test-dummy $drs_dispatch '' --cron } t-chain-test () {