chiark / gitweb /
By default, generate a DEP-14 tag as well as a dgit archive/* tag
[dgit.git] / tests / tests / trustingpolicy-replay
index 57ef2866a601647d5f933b6214fb46d93a607c02..2039ec6c243db92b40dae0b15d946cb870e0cde8 100755 (executable)
@@ -4,6 +4,8 @@ set -e
 
 t-tstunt-parsechangelog
 
 
 t-tstunt-parsechangelog
 
+t-git-config dgit.default.dep14tag no
+
 t-dsd
 t-policy dgit-repos-policy-trusting
 t-prep-newpackage example 1.0
 t-dsd
 t-policy dgit-repos-policy-trusting
 t-prep-newpackage example 1.0
@@ -15,21 +17,69 @@ git tag start
 t-dgit build
 t-dgit push --new
 
 t-dgit build
 t-dgit push --new
 
-t-commit 'Prep v2 which will be rewound'
+t-commit 'Prep v1.1 which will be rewound'
 t-dgit build
 t-dgit push
 
 t-rm-dput-dropping
 t-dgit build
 t-dgit push
 
 t-rm-dput-dropping
-git checkout debian/1.0
+git checkout $tagpfx/1.0
 t-dgit build
 t-dgit push --deliberately-fresh-repo
 
 remote="`git config dgit-distro.test-dummy.git-url`/$p.git"
 
 t-dgit build
 t-dgit push --deliberately-fresh-repo
 
 remote="`git config dgit-distro.test-dummy.git-url`/$p.git"
 
-t-expect-fail 'Replay of previously-rewound upload' \
+t-expect-push-fail 'Replay of previously-rewound upload' \
 git push "$remote" \
 git push "$remote" \
-       debian/1.1 \
-       debian/1.1~0:refs/dgit/sid
+       $tagpfx/1.1 \
+       $tagpfx/1.1~0:refs/dgit/sid
+
+git checkout master
+
+
+: "More subtle replay prevention checks"
+
+prepare-replay () {
+       delib=$1
+
+       # We have to stop the pushes succeeding because if they work they
+       # record the tag, which prevents the replays.  We are simulating
+       # abortive pushes (since we do want to avoid a situation where
+       # dangerous old signed tags can exist).
+       t-policy-nonexist
+
+       t-commit "request with $delib that we will replay"
+       t-dgit build
+       t-expect-push-fail 'system: No such file or directory' \
+       t-dgit push $delib
+
+       t-policy dgit-repos-policy-trusting
+
+       replayv=$v
+}
+
+attempt-replay () {
+       local mpat=$1
+       git show $tagpfx/$replayv | grep -e $delib
+       t-expect-push-fail "$mpat" \
+       git push "$remote" \
+               $tagpfx/$replayv \
+               +$tagpfx/$replayv~0:refs/dgit/sid
+}
+
+prepare-replay --deliberately-fresh-repo
+
+# simulate some other thing that we shouldn't delete
+git push $dgitrepo +master:refs/heads/for-testing
+
+attempt-replay 'does not declare previously heads/for-testing'
+
+prepare-replay --deliberately-not-fast-forward
+
+t-commit 'later version to stop not fast forward rewinding'
+t-dgit build
+t-dgit push
+
+attempt-replay "does not declare previously tags/$tagpfx/$v"
+
 
 echo ok.
 
 echo ok.
-echo xxx want to check replay prevention insufficient proofs in tag