changeset 43042:03e769278ef3

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
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 10 Sep 2019 00:30:53 +0200
parents 559ac8411f12
children e370f9e4bfad
files tests/testlib/ext-sidedata.py
diffstat 1 files changed, 14 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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)