--- a/tests/test-push.t Thu Nov 03 04:58:46 2016 +0100
+++ b/tests/test-push.t Thu Nov 03 05:10:14 2016 +0100
@@ -147,3 +147,99 @@
4 files, 9 changesets, 7 total revisions
$ cd ..
+
+Test server side validation during push
+=======================================
+
+ $ hg init test-validation
+ $ cd test-validation
+
+ $ cat > .hg/hgrc <<EOF
+ > [server]
+ > validate=1
+ > EOF
+
+ $ echo alpha > alpha
+ $ echo beta > beta
+ $ hg addr
+ adding alpha
+ adding beta
+ $ hg ci -m 1
+
+ $ cd ..
+ $ hg clone test-validation test-validation-clone
+ updating to branch default
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+Test spurious filelog entries:
+
+ $ cd test-validation-clone
+ $ echo blah >> beta
+ $ cp .hg/store/data/beta.i tmp1
+ $ hg ci -m 2
+ $ cp .hg/store/data/beta.i tmp2
+ $ hg -q rollback
+ $ mv tmp2 .hg/store/data/beta.i
+ $ echo blah >> beta
+ $ hg ci -m '2 (corrupt)'
+
+Expected to fail:
+
+ $ hg verify
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ beta@1: dddc47b3ba30 not in manifests
+ 2 files, 2 changesets, 4 total revisions
+ 1 integrity errors encountered!
+ (first damaged changeset appears to be 1)
+ [1]
+
+ $ hg push
+ pushing to $TESTTMP/test-validation (glob)
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ transaction abort!
+ rollback completed
+ abort: received spurious file revlog entry
+ [255]
+
+ $ hg -q rollback
+ $ mv tmp1 .hg/store/data/beta.i
+ $ echo beta > beta
+
+Test missing filelog entries:
+
+ $ cp .hg/store/data/beta.i tmp
+ $ echo blah >> beta
+ $ hg ci -m '2 (corrupt)'
+ $ mv tmp .hg/store/data/beta.i
+
+Expected to fail:
+
+ $ hg verify
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ beta@1: manifest refers to unknown revision dddc47b3ba30
+ 2 files, 2 changesets, 2 total revisions
+ 1 integrity errors encountered!
+ (first damaged changeset appears to be 1)
+ [1]
+
+ $ hg push
+ pushing to $TESTTMP/test-validation (glob)
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ transaction abort!
+ rollback completed
+ abort: missing file data for beta:dddc47b3ba30e54484720ce0f4f768a0f4b6efb9 - run hg verify
+ [255]
+
+ $ cd ..