From 1b83a1d09a12e0bf2925ef47ae734fe23be69779 Mon Sep 17 00:00:00 2001 From: Victor Shyba <victor1984@riseup.net> Date: Fri, 27 Mar 2020 22:53:55 -0300 Subject: [PATCH] test and fix verifying from middle --- lbry/wallet/header.py | 7 +++++-- tests/unit/wallet/test_headers.py | 3 +++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lbry/wallet/header.py b/lbry/wallet/header.py index 0daf49cc1..2fa066cdf 100644 --- a/lbry/wallet/header.py +++ b/lbry/wallet/header.py @@ -311,12 +311,15 @@ class Headers: headers = headers[:(len(headers) // self.header_size) * self.header_size] for header_hash, header in self._iterate_headers(height, headers): height = header['block_height'] - if height: + if previous_header_hash: if header['prev_block_hash'] != previous_header_hash: fail = True - else: + elif height == 0: if header_hash != self.genesis_hash: fail = True + else: + # for sanity and clarity, since it is the only way we can end up here + assert start_height > 0 and height == start_height if fail: log.warning("Header file corrupted at height %s, truncating it.", height - 1) def __truncate(at_height): diff --git a/tests/unit/wallet/test_headers.py b/tests/unit/wallet/test_headers.py index 425d825e3..5ebb333c3 100644 --- a/tests/unit/wallet/test_headers.py +++ b/tests/unit/wallet/test_headers.py @@ -143,6 +143,9 @@ class TestHeaders(AsyncioTestCase): self.assertEqual(7, headers.height) await headers.connect(len(headers), HEADERS[block_bytes(8):]) self.assertEqual(19, headers.height) + # verify from middle + await headers.repair(start_height=10) + self.assertEqual(19, headers.height) async def test_misalignment_triggers_repair_on_open(self): headers = Headers(':memory:')