X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=tests%2Flib;h=e960c1c62c33f60c76a27f83cd212aac0b8fcc2a;hb=d05936fa35e8fccc8b9eead88379fcdaa2021277;hp=87de19a0af66f70b911917e2bfa1b73841452187;hpb=9ff6957e842708e9641ad00510f336b347bff302;p=dgit.git diff --git a/tests/lib b/tests/lib index 87de19a0..e960c1c6 100644 --- a/tests/lib +++ b/tests/lib @@ -3,13 +3,9 @@ exec 2>&1 set -x -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} - : ${DGIT_INFRA_PFX:=$DGIT_TEST_INTREE${DGIT_TEST_INTREE:+/infra/}} - 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 @@ -28,14 +24,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 @@ -45,11 +41,6 @@ incoming = $tmp/incoming run_dinstall = 0 END -fail () { - echo >&2 "failed: $*" - exit 1 -} - t-expect-fail () { local mpat="$1"; shift LC_MESSAGES=C "$@" 2>&1 | tee $tmp/t.output @@ -99,23 +90,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 [ @@ -137,7 +132,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; @@ -155,15 +152,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 () { @@ -178,6 +177,32 @@ 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} : ' @@ -200,7 +225,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 () { @@ -216,6 +241,10 @@ t-clean-on-branch () { t-git-get-ref () { local ref=$1 + case "$ref" in + refs/*) ;; + *) fail "t-git-get-ref bad $ref" ;; + esac git show-ref -d $1 | perl -ne ' $x = $1 if m#^(\w+) \Q'$1'\E(?:\^\{\})?$#; END { print "$x\n" if length $x; } @@ -302,6 +331,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` @@ -312,8 +370,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 () { @@ -322,12 +390,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 () { @@ -344,33 +421,32 @@ 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 - - ln -sf ${DGIT_INFRA_PFX}dgit-repos-policy-debian \ - $dsd_dispatch/policy-hook + 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 () { local ct=$1 local d=${0%/*}