sidedata: check that the sidedata safely roundtrip
We actually use the data we stored during the test. It is a way to make sure
their content is not corrupted.
Differential Revision: https://phab.mercurial-scm.org/D6898
--- a/tests/testlib/ext-sidedata.py Tue Sep 10 00:15:47 2019 +0200
+++ b/tests/testlib/ext-sidedata.py Tue Sep 10 00:30:53 2019 +0200
@@ -12,6 +12,7 @@
from mercurial import (
extensions,
+ node,
revlog,
)
@@ -32,5 +33,18 @@
sd[sidedata.SD_TEST2] = struct.pack('>32s', sha256)
return orig(self, text, transaction, link, p1, p2, *args, **kwargs)
+def wraprevision(orig, self, nodeorrev, *args, **kwargs):
+ text = orig(self, nodeorrev, *args, **kwargs)
+ if nodeorrev != node.nullrev and nodeorrev != node.nullid:
+ sd = self.sidedata(nodeorrev)
+ if len(text) != struct.unpack('>I', sd[sidedata.SD_TEST1])[0]:
+ raise RuntimeError('text size mismatch')
+ expected = sd[sidedata.SD_TEST2]
+ got = hashlib.sha256(text).digest()
+ if got != expected:
+ raise RuntimeError('sha256 mismatch')
+ return text
+
def extsetup(ui):
extensions.wrapfunction(revlog.revlog, 'addrevision', wrapaddrevision)
+ extensions.wrapfunction(revlog.revlog, 'revision', wraprevision)