D7652: test: extract some generic data and utility from test-rust-ancestor.py

marmoute (Pierre-Yves David) phabricator at mercurial-scm.org
Fri Dec 13 20:11:39 UTC 2019


marmoute created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  We will reuse this for more tests related to revlog index. In pratice this
  series of changesets add an index implementation provided from Rust and we want
  to be able to test it.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D7652

AFFECTED FILES
  mercurial/testing/revlog.py
  tests/test-rust-ancestor.py

CHANGE DETAILS

diff --git a/tests/test-rust-ancestor.py b/tests/test-rust-ancestor.py
--- a/tests/test-rust-ancestor.py
+++ b/tests/test-rust-ancestor.py
@@ -7,6 +7,8 @@
     node,
 )
 
+from mercurial.testing import revlog as revlogtesting
+
 try:
     from mercurial import rustext
 
@@ -27,34 +29,16 @@
 except ImportError:
     cparsers = None
 
-# picked from test-parse-index2, copied rather than imported
-# so that it stays stable even if test-parse-index2 changes or disappears.
-data_non_inlined = (
-    b'\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01D\x19'
-    b'\x00\x07e\x12\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff'
-    b'\xff\xff\xff\xff\xd1\xf4\xbb\xb0\xbe\xfc\x13\xbd\x8c\xd3\x9d'
-    b'\x0f\xcd\xd9;\x8c\x07\x8cJ/\x00\x00\x00\x00\x00\x00\x00\x00\x00'
-    b'\x00\x00\x00\x00\x00\x00\x01D\x19\x00\x00\x00\x00\x00\xdf\x00'
-    b'\x00\x01q\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\xff'
-    b'\xff\xff\xff\xc1\x12\xb9\x04\x96\xa4Z1t\x91\xdfsJ\x90\xf0\x9bh'
-    b'\x07l&\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
-    b'\x00\x01D\xf8\x00\x00\x00\x00\x01\x1b\x00\x00\x01\xb8\x00\x00'
-    b'\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\xff\xff\xff\xff\x02\n'
-    b'\x0e\xc6&\xa1\x92\xae6\x0b\x02i\xfe-\xe5\xbao\x05\xd1\xe7\x00'
-    b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01F'
-    b'\x13\x00\x00\x00\x00\x01\xec\x00\x00\x03\x06\x00\x00\x00\x01'
-    b'\x00\x00\x00\x03\x00\x00\x00\x02\xff\xff\xff\xff\x12\xcb\xeby1'
-    b'\xb6\r\x98B\xcb\x07\xbd`\x8f\x92\xd9\xc4\x84\xbdK\x00\x00\x00'
-    b'\x00\x00\x00\x00\x00\x00\x00\x00\x00'
-)
-
 
 @unittest.skipIf(
-    rustext is None or cparsers is None,
+    rustext is None, "rustext module ancestor relies on is not available",
+)
+ at unittest.skipIf(
+    rustext is None,
     "rustext or the C Extension parsers module "
     "ancestor relies on is not available",
 )
-class rustancestorstest(unittest.TestCase):
+class rustancestorstest(revlogtesting.RevlogBasedTestBase):
     """Test the correctness of binding to Rust code.
 
     This test is merely for the binding to Rust itself: extraction of
@@ -67,9 +51,6 @@
     Algorithmic correctness is asserted by the Rust unit tests.
     """
 
-    def parseindex(self):
-        return cparsers.parse_index2(data_non_inlined, False)[0]
-
     def testiteratorrevlist(self):
         idx = self.parseindex()
         # checking test assumption about the index binary data:
@@ -150,7 +131,9 @@
 
     def testgrapherror(self):
         data = (
-            data_non_inlined[: 64 + 27] + b'\xf2' + data_non_inlined[64 + 28 :]
+            revlogtesting.data_non_inlined[: 64 + 27]
+            + b'\xf2'
+            + revlogtesting.data_non_inlined[64 + 28 :]
         )
         idx = cparsers.parse_index2(data, False)[0]
         with self.assertRaises(rustext.GraphError) as arc:
diff --git a/mercurial/testing/revlog.py b/mercurial/testing/revlog.py
new file mode 100644
--- /dev/null
+++ b/mercurial/testing/revlog.py
@@ -0,0 +1,38 @@
+from __future__ import absolute_import
+import unittest
+
+# picked from test-parse-index2, copied rather than imported
+# so that it stays stable even if test-parse-index2 changes or disappears.
+data_non_inlined = (
+    b'\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01D\x19'
+    b'\x00\x07e\x12\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff'
+    b'\xff\xff\xff\xff\xd1\xf4\xbb\xb0\xbe\xfc\x13\xbd\x8c\xd3\x9d'
+    b'\x0f\xcd\xd9;\x8c\x07\x8cJ/\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+    b'\x00\x00\x00\x00\x00\x00\x01D\x19\x00\x00\x00\x00\x00\xdf\x00'
+    b'\x00\x01q\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\xff'
+    b'\xff\xff\xff\xc1\x12\xb9\x04\x96\xa4Z1t\x91\xdfsJ\x90\xf0\x9bh'
+    b'\x07l&\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+    b'\x00\x01D\xf8\x00\x00\x00\x00\x01\x1b\x00\x00\x01\xb8\x00\x00'
+    b'\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\xff\xff\xff\xff\x02\n'
+    b'\x0e\xc6&\xa1\x92\xae6\x0b\x02i\xfe-\xe5\xbao\x05\xd1\xe7\x00'
+    b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01F'
+    b'\x13\x00\x00\x00\x00\x01\xec\x00\x00\x03\x06\x00\x00\x00\x01'
+    b'\x00\x00\x00\x03\x00\x00\x00\x02\xff\xff\xff\xff\x12\xcb\xeby1'
+    b'\xb6\r\x98B\xcb\x07\xbd`\x8f\x92\xd9\xc4\x84\xbdK\x00\x00\x00'
+    b'\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+)
+
+
+try:
+    from ..cext import parsers as cparsers
+except ImportError:
+    cparsers = None
+
+
+ at unittest.skipIf(
+    cparsers is None,
+    "The C Extension parsers module tests relies on is not available",
+)
+class RevlogBasedTestBase(unittest.TestCase):
+    def parseindex(self):
+        return cparsers.parse_index2(data_non_inlined, False)[0]



To: marmoute, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list