# HG changeset patch # User Pierre-Yves David # Date 2019-09-09 22:30:53 # Node ID 03e769278ef31f648ba5c49be719da5b73587607 # Parent 559ac8411f125fca37577c77402279ac0d4ee9db 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 diff --git a/tests/testlib/ext-sidedata.py b/tests/testlib/ext-sidedata.py --- a/tests/testlib/ext-sidedata.py +++ b/tests/testlib/ext-sidedata.py @@ -12,6 +12,7 @@ import struct from mercurial import ( extensions, + node, revlog, ) @@ -32,5 +33,18 @@ def wrapaddrevision(orig, self, text, tr 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)