chiark / gitweb /
test suite: tagupl: Test lack of signature
[dgit.git] / tests / tests / tagupl
index 7859400712926c015d5c24423819e27249806a17..80b92bee059d0f004fd3d56dfe05ded2cb0b325f 100755 (executable)
@@ -30,6 +30,133 @@ tagname=test-dummy/$v
 t-tagupl-test --no-push --quilt=gbp
 
 # xxx test pushing
+
 # todo: test each miss/rejection
 
+ident=ok
+
+git cat-file tag $tagname >../basetag
+v=1.0-2
+tagname=test-dummy/$v
+
+perl -i -ne '
+       next if $.==1../^$/;
+       next if m/^----/..0;
+       s/\b1\.0-1\b/1.0-2/g;
+       print or die $!;
+' ../basetag
+
+mv-ident () {
+       local f=$tmp/$1
+       if test -e $f; then
+               mv $f $f--$ident
+       fi
+}
+
+next-mangle () {
+       mv-ident tagupl/overall.log
+       mv-ident sendmail.log
+       ident=$1
+}
+
+with-mangled () {
+       local perl=$1
+       perl <../basetag >../badtag-$ident -pe "$perl"
+       git tag -u Senatus -f -s -m "$(cat ../badtag-$ident)" "$tagname"
+
+       t-tagupl-run-drs
+}
+
+expect-quit () {
+       next-mangle "$1"
+       local perl=$2
+       local mstring=$3
+       with-mangled "$perl"
+       grep ": $mstring" ../tagupl/overall.log
+}
+
+expect-email () {
+       next-mangle "$1"
+       local perl=$2
+       local mstring=$3
+       with-mangled "$perl"
+       grep 'Was not successful' ../sendmail.log
+       grep "$mstring" ../sendmail.log
+       grep ": failed, emailed" ../tagupl/overall.log
+}
+
+raw-mangled () {
+       git update-ref refs/tags/$tagname \
+               $(git hash-object -w -t tag ../tagobj-$ident)
+       t-tagupl-run-drs
+}
+
+tagname=test-dummy/1.2
+t-expect-fail E:'failed command: git fetch' \
+t-tagupl-run-drs
+
+tagname=splorf/$v     ; expect-quit baddistro '' 'tag name not for us'
+tagname=test-dummy/1,2; expect-quit badver    '' 'tag name not for us'
+tagname=test-dummy/$v
+
+expect-quit noplease s/please-upload/plunk/ 'tag missing please-upload'
+
+expect-email vermatch 's/^example release /$&3/' 'reject: version mismatch'
+
+expect-email unkinfo 's/^\[dgit please-upload/$& Rejectme/' \
+       'unknown dgit info in tag'
+
+expect-quit unkdistro 's/test-dummy/ubuntu/ if m/^\[dgit/' \
+       'not for this distro'
+
+expect-email notsplit 's/ split / no-split /' 'reject: missing "split"'
+
+expect-email upsnot1 's/ upstream=/ uxstream=/' \
+       'reject: upstream tag and not commitish'
+
+expect-email upsnot2 's/ upstream-tag=/ uxstream-tag=/' \
+       'reject: upstream tag and not commitish'
+
+expect-email bupstag1 's/ upstream-tag=/$&:/' \
+       "failed command: git check-ref-format"
+
+expect-email bupstag2 's/ upstream-tag=/$&x/' \
+       "Couldn't find remote ref refs/tags/xupstream"
+
+expect-email upsmism 's/ upstream=/$&3/' \
+       "but tag refers to"
+
+# we are going to trash $p because it will contain corrupted objects
+# which makes our end-of-test fsck fail
+cp -al ../$p ../$p.save
+cd ../$p
+
+git cat-file tag $tagname >../raw-base
+
+next-mangle sigfail
+perl -pe <../raw-base >../tagobj-$ident 's/ split / split ignoreme /'
+raw-mangled
+grep 'gpgv: BAD signature' ../sendmail.log
+
+next-mangle nosig
+perl -ne <../raw-base >../tagobj-$ident 'print unless m/^-----/..0'
+raw-mangled
+grep 'missing signature' ../sendmail.log
+
+git cat-file tag test-dummy/1.0-1 >../raw-base
+
+next-mangle badtagger
+perl -pe <../raw-base '
+       s/\+\d+$/xyz/ if m/^tagger /;
+       exit 0 if m/^$/;
+' >../tagobj-$ident
+echo >>../tagobj-$ident
+cat ../basetag >>../tagobj-$ident
+raw-mangled
+grep 'failed to fish tagger out of tag' ../tagupl/overall.log
+
+cd ..
+rm -rf $p
+mv $p.save $p
+
 t-ok