tests/test-remotefilelog-datapack.py
changeset 47012 d55b71393907
parent 45942 89a2afe31e82
child 47500 23f5ed6dbcb1
equal deleted inserted replaced
46992:5fa019ceb499 47012:d55b71393907
    14 
    14 
    15 import silenttestrunner
    15 import silenttestrunner
    16 
    16 
    17 # Load the local remotefilelog, not the system one
    17 # Load the local remotefilelog, not the system one
    18 sys.path[0:0] = [os.path.join(os.path.dirname(__file__), '..')]
    18 sys.path[0:0] = [os.path.join(os.path.dirname(__file__), '..')]
    19 from mercurial.node import nullid
    19 from mercurial.node import sha1nodeconstants
    20 from mercurial import policy
    20 from mercurial import policy
    21 
    21 
    22 if not policy._packageprefs.get(policy.policy, (False, False))[1]:
    22 if not policy._packageprefs.get(policy.policy, (False, False))[1]:
    23     if __name__ == '__main__':
    23     if __name__ == '__main__':
    24         msg = "skipped: pure module not available with module policy:"
    24         msg = "skipped: pure module not available with module policy:"
    61             pycompat.bytechr(random.randint(0, 255)) for _ in range(20)
    61             pycompat.bytechr(random.randint(0, 255)) for _ in range(20)
    62         )
    62         )
    63 
    63 
    64     def createPack(self, revisions=None, packdir=None):
    64     def createPack(self, revisions=None, packdir=None):
    65         if revisions is None:
    65         if revisions is None:
    66             revisions = [(b"filename", self.getFakeHash(), nullid, b"content")]
    66             revisions = [
       
    67                 (
       
    68                     b"filename",
       
    69                     self.getFakeHash(),
       
    70                     sha1nodeconstants.nullid,
       
    71                     b"content",
       
    72                 )
       
    73             ]
    67 
    74 
    68         if packdir is None:
    75         if packdir is None:
    69             packdir = self.makeTempDir()
    76             packdir = self.makeTempDir()
    70 
    77 
    71         packer = datapack.mutabledatapack(uimod.ui(), packdir, version=2)
    78         packer = datapack.mutabledatapack(uimod.ui(), packdir, version=2)
    84     def _testAddSingle(self, content):
    91     def _testAddSingle(self, content):
    85         """Test putting a simple blob into a pack and reading it out."""
    92         """Test putting a simple blob into a pack and reading it out."""
    86         filename = b"foo"
    93         filename = b"foo"
    87         node = self.getHash(content)
    94         node = self.getHash(content)
    88 
    95 
    89         revisions = [(filename, node, nullid, content)]
    96         revisions = [(filename, node, sha1nodeconstants.nullid, content)]
    90         pack = self.createPack(revisions)
    97         pack = self.createPack(revisions)
    91         if self.paramsavailable:
    98         if self.paramsavailable:
    92             self.assertEqual(
    99             self.assertEqual(
    93                 pack.params.fanoutprefix, basepack.SMALLFANOUTPREFIX
   100                 pack.params.fanoutprefix, basepack.SMALLFANOUTPREFIX
    94             )
   101             )
   124 
   131 
   125     def testAddDeltas(self):
   132     def testAddDeltas(self):
   126         """Test putting multiple delta blobs into a pack and read the chain."""
   133         """Test putting multiple delta blobs into a pack and read the chain."""
   127         revisions = []
   134         revisions = []
   128         filename = b"foo"
   135         filename = b"foo"
   129         lastnode = nullid
   136         lastnode = sha1nodeconstants.nullid
   130         for i in range(10):
   137         for i in range(10):
   131             content = b"abcdef%d" % i
   138             content = b"abcdef%d" % i
   132             node = self.getHash(content)
   139             node = self.getHash(content)
   133             revisions.append((filename, node, lastnode, content))
   140             revisions.append((filename, node, lastnode, content))
   134             lastnode = node
   141             lastnode = node
   155             filename = b"filename-%d" % i
   162             filename = b"filename-%d" % i
   156             filerevs = []
   163             filerevs = []
   157             for j in range(random.randint(1, 100)):
   164             for j in range(random.randint(1, 100)):
   158                 content = b"content-%d" % j
   165                 content = b"content-%d" % j
   159                 node = self.getHash(content)
   166                 node = self.getHash(content)
   160                 lastnode = nullid
   167                 lastnode = sha1nodeconstants.nullid
   161                 if len(filerevs) > 0:
   168                 if len(filerevs) > 0:
   162                     lastnode = filerevs[random.randint(0, len(filerevs) - 1)]
   169                     lastnode = filerevs[random.randint(0, len(filerevs) - 1)]
   163                 filerevs.append(node)
   170                 filerevs.append(node)
   164                 blobs[(filename, node, lastnode)] = content
   171                 blobs[(filename, node, lastnode)] = content
   165                 revisions.append((filename, node, lastnode, content))
   172                 revisions.append((filename, node, lastnode, content))
   183                 constants.METAKEYFLAG: i ** 4,
   190                 constants.METAKEYFLAG: i ** 4,
   184                 constants.METAKEYSIZE: len(content),
   191                 constants.METAKEYSIZE: len(content),
   185                 b'Z': b'random_string',
   192                 b'Z': b'random_string',
   186                 b'_': b'\0' * i,
   193                 b'_': b'\0' * i,
   187             }
   194             }
   188             revisions.append((filename, node, nullid, content, meta))
   195             revisions.append(
       
   196                 (filename, node, sha1nodeconstants.nullid, content, meta)
       
   197             )
   189         pack = self.createPack(revisions)
   198         pack = self.createPack(revisions)
   190         for name, node, x, content, origmeta in revisions:
   199         for name, node, x, content, origmeta in revisions:
   191             parsedmeta = pack.getmeta(name, node)
   200             parsedmeta = pack.getmeta(name, node)
   192             # flag == 0 should be optimized out
   201             # flag == 0 should be optimized out
   193             if origmeta[constants.METAKEYFLAG] == 0:
   202             if origmeta[constants.METAKEYFLAG] == 0:
   196 
   205 
   197     def testGetMissing(self):
   206     def testGetMissing(self):
   198         """Test the getmissing() api."""
   207         """Test the getmissing() api."""
   199         revisions = []
   208         revisions = []
   200         filename = b"foo"
   209         filename = b"foo"
   201         lastnode = nullid
   210         lastnode = sha1nodeconstants.nullid
   202         for i in range(10):
   211         for i in range(10):
   203             content = b"abcdef%d" % i
   212             content = b"abcdef%d" % i
   204             node = self.getHash(content)
   213             node = self.getHash(content)
   205             revisions.append((filename, node, lastnode, content))
   214             revisions.append((filename, node, lastnode, content))
   206             lastnode = node
   215             lastnode = node
   223 
   232 
   224     def testAddThrows(self):
   233     def testAddThrows(self):
   225         pack = self.createPack()
   234         pack = self.createPack()
   226 
   235 
   227         try:
   236         try:
   228             pack.add(b'filename', nullid, b'contents')
   237             pack.add(b'filename', sha1nodeconstants.nullid, b'contents')
   229             self.assertTrue(False, "datapack.add should throw")
   238             self.assertTrue(False, "datapack.add should throw")
   230         except RuntimeError:
   239         except RuntimeError:
   231             pass
   240             pass
   232 
   241 
   233     def testBadVersionThrows(self):
   242     def testBadVersionThrows(self):
   262         for i in pycompat.xrange(total):
   271         for i in pycompat.xrange(total):
   263             filename = b"filename-%d" % i
   272             filename = b"filename-%d" % i
   264             content = filename
   273             content = filename
   265             node = self.getHash(content)
   274             node = self.getHash(content)
   266             blobs[(filename, node)] = content
   275             blobs[(filename, node)] = content
   267             revisions.append((filename, node, nullid, content))
   276             revisions.append(
       
   277                 (filename, node, sha1nodeconstants.nullid, content)
       
   278             )
   268 
   279 
   269         pack = self.createPack(revisions)
   280         pack = self.createPack(revisions)
   270         if self.paramsavailable:
   281         if self.paramsavailable:
   271             self.assertEqual(
   282             self.assertEqual(
   272                 pack.params.fanoutprefix, basepack.LARGEFANOUTPREFIX
   283                 pack.params.fanoutprefix, basepack.LARGEFANOUTPREFIX
   286         numpacks = 10
   297         numpacks = 10
   287         revisionsperpack = 100
   298         revisionsperpack = 100
   288 
   299 
   289         for i in range(numpacks):
   300         for i in range(numpacks):
   290             chain = []
   301             chain = []
   291             revision = (b'%d' % i, self.getFakeHash(), nullid, b"content")
   302             revision = (
       
   303                 b'%d' % i,
       
   304                 self.getFakeHash(),
       
   305                 sha1nodeconstants.nullid,
       
   306                 b"content",
       
   307             )
   292 
   308 
   293             for _ in range(revisionsperpack):
   309             for _ in range(revisionsperpack):
   294                 chain.append(revision)
   310                 chain.append(revision)
   295                 revision = (
   311                 revision = (
   296                     b'%d' % i,
   312                     b'%d' % i,
   344             revisions = []
   360             revisions = []
   345             for i in pycompat.xrange(packsize):
   361             for i in pycompat.xrange(packsize):
   346                 filename = b"filename-%d" % i
   362                 filename = b"filename-%d" % i
   347                 content = b"content-%d" % i
   363                 content = b"content-%d" % i
   348                 node = self.getHash(content)
   364                 node = self.getHash(content)
   349                 revisions.append((filename, node, nullid, content))
   365                 revisions.append(
       
   366                     (filename, node, sha1nodeconstants.nullid, content)
       
   367                 )
   350 
   368 
   351             path = self.createPack(revisions).path
   369             path = self.createPack(revisions).path
   352 
   370 
   353             # Perf of large multi-get
   371             # Perf of large multi-get
   354             import gc
   372             import gc