Add a test to ensure txs and blocks are added to Chronik in the right order when doing a reorg with mempool txs present. If e.g. a mempool tx would be added before blocks, Chronik would crash under stome circumstances, which is currently not tested.
Details
Details
- Reviewers
Fabien bytesofman - Group Reviewers
Restricted Project - Commits
- rABC49b888f4c71e: [Chronik] Add test for disconnectpool
./test/functional/test_runner.py chronik_mempool_disconnectpool
Diff Detail
Diff Detail
- Repository
- rABC Bitcoin ABC
- Branch
- chronik-fix-disconnectpool
- Lint
Lint Passed - Unit
No Test Coverage - Build Status
Buildable 29986 Build 59506: Build Diff build-diff · build-clang · build-clang-tidy · build-without-wallet · build-debug Build 59505: arc lint + arc unit
Event Timeline
Comment Actions
Build Bitcoin ABC Diffs / Diff Testing (build-chronik) failed.
Failed tests logs:
====== Bitcoin ABC functional tests: chronik_mempool_disconnectpool.py ====== ------- Stdout: ------- 2024-07-27T11:42:54.088000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-chronik/test/tmp/test_runner_₿₵_🏃_20240727_113758/chronik_mempool_disconnectpool_268 2024-07-27T11:43:24.867000Z TestFramework.p2p (WARNING): Connection lost to 127.0.0.1:21413 due to [Errno 104] Connection reset by peer 2024-07-27T11:43:24.890000Z TestFramework (ERROR): Assertion failed Traceback (most recent call last): File "/work/test/functional/test_framework/test_framework.py", line 147, in main self._run_test_internal() File "/work/test/functional/test_framework/test_framework.py", line 137, in _run_test_internal self.run_test() File "/work/test/functional/chronik_mempool_disconnectpool.py", line 94, in run_test peer.send_blocks_and_test([reorg_block1, reorg_block2], node) File "/work/test/functional/test_framework/p2p.py", line 912, in send_blocks_and_test test() File "/work/test/functional/test_framework/p2p.py", line 899, in test self.sync_with_ping(timeout=timeout) File "/work/test/functional/test_framework/p2p.py", line 705, in sync_with_ping self.wait_until(test_function, timeout=timeout) File "/work/test/functional/test_framework/p2p.py", line 581, in wait_until wait_until_helper( File "/work/test/functional/test_framework/util.py", line 280, in wait_until_helper if predicate(): File "/work/test/functional/test_framework/p2p.py", line 578, in test_function assert self.is_connected AssertionError 2024-07-27T11:43:24.944000Z TestFramework (INFO): Stopping nodes [node 0] Cleaning up leftover process ------- Stderr: ------- Traceback (most recent call last): File "/work/test/functional/test_framework/authproxy.py", line 124, in _request self.__conn.request(method, path, postdata, headers) File "/usr/lib/python3.9/http/client.py", line 1255, in request self._send_request(method, url, body, headers, encode_chunked) File "/usr/lib/python3.9/http/client.py", line 1301, in _send_request self.endheaders(body, encode_chunked=encode_chunked) File "/usr/lib/python3.9/http/client.py", line 1250, in endheaders self._send_output(message_body, encode_chunked=encode_chunked) File "/usr/lib/python3.9/http/client.py", line 1049, in _send_output self.send(chunk) File "/usr/lib/python3.9/http/client.py", line 971, in send self.sock.sendall(data) BrokenPipeError: [Errno 32] Broken pipe During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/work/test/functional/chronik_mempool_disconnectpool.py", line 103, in <module> ChronikMempoolDisconnectPool().main() File "/work/test/functional/test_framework/test_framework.py", line 170, in main exit_code = self.shutdown() File "/work/test/functional/test_framework/test_framework.py", line 396, in shutdown self.stop_nodes() File "/work/test/functional/test_framework/test_framework.py", line 645, in stop_nodes node.stop_node(wait=wait, wait_until_stopped=False) File "/work/test/functional/test_framework/test_node.py", line 512, in stop_node self.stop(wait=wait) File "/work/test/functional/test_framework/coverage.py", line 46, in __call__ return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs) File "/work/test/functional/test_framework/authproxy.py", line 176, in __call__ response, status = self._request( File "/work/test/functional/test_framework/authproxy.py", line 130, in _request self.__conn.request(method, path, postdata, headers) File "/usr/lib/python3.9/http/client.py", line 1255, in request self._send_request(method, url, body, headers, encode_chunked) File "/usr/lib/python3.9/http/client.py", line 1301, in _send_request self.endheaders(body, encode_chunked=encode_chunked) File "/usr/lib/python3.9/http/client.py", line 1250, in endheaders self._send_output(message_body, encode_chunked=encode_chunked) File "/usr/lib/python3.9/http/client.py", line 1010, in _send_output self.send(msg) File "/usr/lib/python3.9/http/client.py", line 950, in send self.connect() File "/usr/lib/python3.9/http/client.py", line 921, in connect self.sock = self._create_connection( File "/usr/lib/python3.9/socket.py", line 843, in create_connection raise err File "/usr/lib/python3.9/socket.py", line 831, in create_connection sock.connect(sa) ConnectionRefusedError: [Errno 111] Connection refused
Each failure log is accessible here:
Bitcoin ABC functional tests: chronik_mempool_disconnectpool.py
Comment Actions
If e.g. a mempool tx would be added before blocks, Chronik would crash under stome circumstances, which is currently not tested.
this is still not tested...? at least, it does not look like we expect a crash?
is the point to prove that it doesn't crash in the scenario of this test file? are there still other known crash scenarios?
Comment Actions
Yes, we wanna make sure we don't crash in this scenario. There might be others too, but I hadn't had the time to cover them yet, we might do so in the future and amend this test.