##// END OF EJS Templates
tests: finally fix up test-fuzz-targets.t...
tests: finally fix up test-fuzz-targets.t It's been failing on my workstation for a while, since I have a new enough LLVM that I had the fuzzer goo, but not so new that I actually had FuzzedDataProvider. This is a better solution all around in my opinion. I _believe_ this should let us run these tests on most systems, even those using GCC instead of clang. That said, my one attempt to test this on my macOS laptop failed miserably, and I don't feel like doing more work on this right now. Differential Revision: https://phab.mercurial-scm.org/D7566

File last commit:

r43404:75ad8af9 default
r44267:19da643d default
Show More
ext-sidedata.py
83 lines | 2.7 KiB | text/x-python | PythonLexer
sidedata: test we can successfully write sidedata...
r43308 # ext-sidedata.py - small extension to test the sidedata logic
#
# Copyright 2019 Pierre-Yves David <pierre-yves.david@octobus.net)
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
from __future__ import absolute_import
import hashlib
import struct
from mercurial import (
extensions,
upgrade: allow upgrade to repository using sidedata...
r43404 localrepo,
sidedata: check that the sidedata safely roundtrip...
r43310 node,
sidedata: test we can successfully write sidedata...
r43308 revlog,
upgrade: allow upgrade to repository using sidedata...
r43404 upgrade,
sidedata: test we can successfully write sidedata...
r43308 )
Augie Fackler
formatting: blacken the codebase...
r43346 from mercurial.revlogutils import sidedata
sidedata: test we can successfully write sidedata...
r43308
Augie Fackler
formatting: blacken the codebase...
r43346 def wrapaddrevision(
orig, self, text, transaction, link, p1, p2, *args, **kwargs
):
sidedata: test we can successfully write sidedata...
r43308 if kwargs.get('sidedata') is None:
kwargs['sidedata'] = {}
sd = kwargs['sidedata']
## let's store some arbitrary data just for testing
# text length
sd[sidedata.SD_TEST1] = struct.pack('>I', len(text))
# and sha2 hashes
sha256 = hashlib.sha256(text).digest()
sd[sidedata.SD_TEST2] = struct.pack('>32s', sha256)
return orig(self, text, transaction, link, p1, p2, *args, **kwargs)
Augie Fackler
formatting: blacken the codebase...
r43346
sidedata: check that the sidedata safely roundtrip...
r43310 def wraprevision(orig, self, nodeorrev, *args, **kwargs):
text = orig(self, nodeorrev, *args, **kwargs)
upgrade: allow upgrade to repository using sidedata...
r43404 if getattr(self, 'sidedatanocheck', False):
return text
sidedata: check that the sidedata safely roundtrip...
r43310 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
Augie Fackler
formatting: blacken the codebase...
r43346
upgrade: allow upgrade to repository using sidedata...
r43404 def wrapgetsidedatacompanion(orig, srcrepo, dstrepo):
sidedatacompanion = orig(srcrepo, dstrepo)
addedreqs = dstrepo.requirements - srcrepo.requirements
if localrepo.SIDEDATA_REQUIREMENT in addedreqs:
assert sidedatacompanion is None # deal with composition later
def sidedatacompanion(revlog, rev):
update = {}
revlog.sidedatanocheck = True
try:
text = revlog.revision(rev)
finally:
del revlog.sidedatanocheck
## let's store some arbitrary data just for testing
# text length
update[sidedata.SD_TEST1] = struct.pack('>I', len(text))
# and sha2 hashes
sha256 = hashlib.sha256(text).digest()
update[sidedata.SD_TEST2] = struct.pack('>32s', sha256)
return False, (), update
return sidedatacompanion
sidedata: test we can successfully write sidedata...
r43308 def extsetup(ui):
extensions.wrapfunction(revlog.revlog, 'addrevision', wrapaddrevision)
sidedata: check that the sidedata safely roundtrip...
r43310 extensions.wrapfunction(revlog.revlog, 'revision', wraprevision)
upgrade: allow upgrade to repository using sidedata...
r43404 extensions.wrapfunction(
upgrade, 'getsidedatacompanion', wrapgetsidedatacompanion
)