mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-11-19 18:09:47 +01:00
test: Fix feature_init intermittent issues
This commit is contained in:
parent
fa4595deb3
commit
fa7b07571f
@ -3,8 +3,6 @@
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
"""Stress tests related to node initialization."""
|
||||
import random
|
||||
import time
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
@ -26,7 +24,6 @@ class InitStressTest(BitcoinTestFramework):
|
||||
def run_test(self):
|
||||
"""
|
||||
- test terminating initialization after seeing a certain log line.
|
||||
- test terminating init after seeing a random number of log lines.
|
||||
- test removing certain essential files to test startup error paths.
|
||||
"""
|
||||
# TODO: skip Windows for now since it isn't clear how to SIGTERM.
|
||||
@ -76,10 +73,9 @@ class InitStressTest(BitcoinTestFramework):
|
||||
|
||||
for terminate_line in lines_to_terminate_after:
|
||||
self.log.info(f"Starting node and will exit after line '{terminate_line}'")
|
||||
node.start(extra_args=['-txindex=1'])
|
||||
|
||||
num_total_logs = node.wait_for_debug_log([terminate_line], ignore_case=True)
|
||||
self.log.debug(f"Terminating node after {num_total_logs} log lines seen")
|
||||
with node.wait_for_debug_log([terminate_line], ignore_case=True):
|
||||
node.start(extra_args=['-txindex=1'])
|
||||
self.log.debug("Terminating node after terminate line was found")
|
||||
sigterm_node()
|
||||
|
||||
check_clean_start()
|
||||
|
@ -422,7 +422,8 @@ class TestNode():
|
||||
time.sleep(0.05)
|
||||
self._raise_assertion_error('Expected messages "{}" does not partially match log:\n\n{}\n\n'.format(str(expected_msgs), print_log))
|
||||
|
||||
def wait_for_debug_log(self, expected_msgs, timeout=10, ignore_case=False) -> int:
|
||||
@contextlib.contextmanager
|
||||
def wait_for_debug_log(self, expected_msgs, timeout=60, ignore_case=False):
|
||||
"""
|
||||
Block until we see a particular debug log message fragment or until we exceed the timeout.
|
||||
Return:
|
||||
@ -432,6 +433,8 @@ class TestNode():
|
||||
prev_size = self.debug_log_bytes()
|
||||
re_flags = re.MULTILINE | (re.IGNORECASE if ignore_case else 0)
|
||||
|
||||
yield
|
||||
|
||||
while True:
|
||||
found = True
|
||||
with open(self.debug_log_path, encoding='utf-8') as dl:
|
||||
@ -443,8 +446,7 @@ class TestNode():
|
||||
found = False
|
||||
|
||||
if found:
|
||||
num_logs = len(log.splitlines())
|
||||
return num_logs
|
||||
return
|
||||
|
||||
if time.time() >= time_end:
|
||||
print_log = " - " + "\n - ".join(log.splitlines())
|
||||
@ -456,7 +458,6 @@ class TestNode():
|
||||
self._raise_assertion_error(
|
||||
'Expected messages "{}" does not partially match log:\n\n{}\n\n'.format(
|
||||
str(expected_msgs), print_log))
|
||||
return -1 # useless return to satisfy linter
|
||||
|
||||
@contextlib.contextmanager
|
||||
def profile_with_perf(self, profile_name: str):
|
||||
|
Loading…
Reference in New Issue
Block a user