##// END OF EJS Templates
tests: use pattern matching to mask `ECONNREFUSED` messages...
tests: use pattern matching to mask `ECONNREFUSED` messages The second and third one of these in `test-http-proxy.t` was failing on Windows. The others were found by grep and by failed tests when output was matched and an attempt was made to emit the mask pattern. The first clonebundles failure on Windows emitted: error fetching bundle: [WinError 10061] $ECONNREFUSED$ We should probably stringify that better to get rid of the "[WinError 10061]" part.

File last commit:

r52147:f94c1033 default
r52835:73a43fe3 default
Show More
test-rust-revlog.py
90 lines | 3.0 KiB | text/x-python | PythonLexer
/ tests / test-rust-revlog.py
Raphaël Gomès
rust-revlog: teach the revlog opening code to read the repo options...
r52084 import struct
Georges Racinet
rust-index: add a struct wrapping the C index...
r44413 import unittest
Georges Racinet
rust-revlog: bare minimal NodeTree exposition...
r52142 from mercurial.node import hex
Georges Racinet
rust-index: add a struct wrapping the C index...
r44413 try:
from mercurial import rustext
rustext.__name__ # trigger immediate actual import
except ImportError:
rustext = None
else:
from mercurial.rustext import revlog
rust-index: handle `MixedIndex` in `pyindex_to_graph`...
r44463 # this would fail already without appropriate ancestor.__package__
from mercurial.rustext.ancestor import LazyAncestors
Georges Racinet
rust-index: add a struct wrapping the C index...
r44413 from mercurial.testing import revlog as revlogtesting
Raphaël Gomès
rust-revlog: teach the revlog opening code to read the repo options...
r52084 header = struct.unpack(">I", revlogtesting.data_non_inlined[:4])[0]
Georges Racinet
rust-index: add a struct wrapping the C index...
r44413
@unittest.skipIf(
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 rustext is None,
"rustext module revlog relies on is not available",
Georges Racinet
rust-index: add a struct wrapping the C index...
r44413 )
class RustRevlogIndexTest(revlogtesting.RevlogBasedTestBase):
def test_heads(self):
idx = self.parseindex()
Georges Racinet on incendie.racinet.fr
rust-index: renamed `MixedIndex` as `Index`...
r52147 rustidx = revlog.Index(revlogtesting.data_non_inlined, header)
Georges Racinet
rust-index: add a struct wrapping the C index...
r44413 self.assertEqual(rustidx.headrevs(), idx.headrevs())
def test_len(self):
idx = self.parseindex()
Georges Racinet on incendie.racinet.fr
rust-index: renamed `MixedIndex` as `Index`...
r52147 rustidx = revlog.Index(revlogtesting.data_non_inlined, header)
Georges Racinet
rust-index: add a struct wrapping the C index...
r44413 self.assertEqual(len(rustidx), len(idx))
rust-index: handle `MixedIndex` in `pyindex_to_graph`...
r44463 def test_ancestors(self):
Georges Racinet on incendie.racinet.fr
rust-index: renamed `MixedIndex` as `Index`...
r52147 rustidx = revlog.Index(revlogtesting.data_non_inlined, header)
rust-index: handle `MixedIndex` in `pyindex_to_graph`...
r44463 lazy = LazyAncestors(rustidx, [3], 0, True)
# we have two more references to the index:
# - in its inner iterator for __contains__ and __bool__
# - in the LazyAncestors instance itself (to spawn new iterators)
self.assertTrue(2 in lazy)
self.assertTrue(bool(lazy))
self.assertEqual(list(lazy), [3, 2, 1, 0])
# a second time to validate that we spawn new iterators
self.assertEqual(list(lazy), [3, 2, 1, 0])
# let's check bool for an empty one
Georges Racinet
rust-index: using the `hg::index::Index` in ancestors iterator and lazy set...
r52132 self.assertFalse(LazyAncestors(rustidx, [0], 0, False))
rust-index: handle `MixedIndex` in `pyindex_to_graph`...
r44463
Georges Racinet
rust-index: add a struct wrapping the C index...
r44413
Georges Racinet
rust-revlog: bare minimal NodeTree exposition...
r52142 @unittest.skipIf(
rustext is None,
"rustext module revlog relies on is not available",
)
class RustRevlogNodeTreeClassTest(revlogtesting.RustRevlogBasedTestBase):
def test_standalone_nodetree(self):
idx = self.parserustindex()
nt = revlog.NodeTree(idx)
for i in range(4):
nt.insert(i)
bin_nodes = [entry[7] for entry in idx]
hex_nodes = [hex(n) for n in bin_nodes]
for i, node in enumerate(hex_nodes):
self.assertEqual(nt.prefix_rev_lookup(node), i)
self.assertEqual(nt.prefix_rev_lookup(node[:5]), i)
# all 4 revisions in idx (standard data set) have different
# first nybbles in their Node IDs,
# hence `nt.shortest()` should return 1 for them, except when
# the leading nybble is 0 (ambiguity with NULL_NODE)
for i, (bin_node, hex_node) in enumerate(zip(bin_nodes, hex_nodes)):
shortest = nt.shortest(bin_node)
expected = 2 if hex_node[0] == ord('0') else 1
self.assertEqual(shortest, expected)
self.assertEqual(nt.prefix_rev_lookup(hex_node[:shortest]), i)
Georges Racinet
rust-revlog: add invalidation detection to `NodeTree` class...
r52144 # test invalidation (generation poisoning) detection
del idx[3]
self.assertTrue(nt.is_invalidated())
Georges Racinet
rust-revlog: bare minimal NodeTree exposition...
r52142
Georges Racinet
rust-index: add a struct wrapping the C index...
r44413 if __name__ == '__main__':
import silenttestrunner
silenttestrunner.main(__name__)