nodemap: test various corruption scenario for the persistent nodemap
Corruption can happens in the wild, either because some of our code is buggy or
because repository were shared/transfered in a strange manners.
Currently one of the corruption case (not enough data) lead to a crash. We add
explicit tests for theses cases.
Differential Revision: https://phab.mercurial-scm.org/D10457
--- a/tests/test-persistent-nodemap.t Sat Apr 17 00:28:21 2021 -0400
+++ b/tests/test-persistent-nodemap.t Fri Apr 16 14:59:13 2021 +0200
@@ -747,6 +747,63 @@
data-unused: 0
data-unused: 0.000%
+Test various corruption case
+============================
+
+Missing datafile
+----------------
+
+Test behavior with a missing datafile
+
+ $ hg clone --quiet --pull test-repo corruption-test-repo
+ $ ls -1 corruption-test-repo/.hg/store/00changelog*
+ corruption-test-repo/.hg/store/00changelog-*.nd (glob)
+ corruption-test-repo/.hg/store/00changelog.d
+ corruption-test-repo/.hg/store/00changelog.i
+ corruption-test-repo/.hg/store/00changelog.n
+ $ rm corruption-test-repo/.hg/store/00changelog*.nd
+ $ hg log -R corruption-test-repo -r .
+ changeset: 5005:90d5d3ba2fc4
+ tag: tip
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: a2
+
+ $ ls -1 corruption-test-repo/.hg/store/00changelog*
+ corruption-test-repo/.hg/store/00changelog.d
+ corruption-test-repo/.hg/store/00changelog.i
+ corruption-test-repo/.hg/store/00changelog.n
+
+Truncated data file
+-------------------
+
+Test behavior with a too short datafile
+
+rebuild the missing data
+ $ hg -R corruption-test-repo debugupdatecache
+ $ ls -1 corruption-test-repo/.hg/store/00changelog*
+ corruption-test-repo/.hg/store/00changelog-*.nd (glob)
+ corruption-test-repo/.hg/store/00changelog.d
+ corruption-test-repo/.hg/store/00changelog.i
+ corruption-test-repo/.hg/store/00changelog.n
+
+truncate the file
+
+ $ datafilepath=`ls corruption-test-repo/.hg/store/00changelog*.nd`
+ $ f -s $datafilepath
+ corruption-test-repo/.hg/store/00changelog-*.nd: size=121088 (glob)
+ $ dd if=$datafilepath bs=1000 count=10 of=$datafilepath-tmp status=none
+ $ mv $datafilepath-tmp $datafilepath
+ $ f -s $datafilepath
+ corruption-test-repo/.hg/store/00changelog-*.nd: size=10000 (glob)
+
+Check that Mercurial reaction to this event
+
+ $ hg -R corruption-test-repo log -r .
+ abort: index 00changelog.i is corrupted
+ [50]
+
+
stream clone
------------