|
18 | 18 | import re |
19 | 19 | import subprocess |
20 | 20 | import threading |
| 21 | +import time |
21 | 22 | import unittest |
22 | 23 |
|
23 | 24 |
|
@@ -4250,3 +4251,41 @@ def censoring_sendrawtx(r): |
4250 | 4251 | bitcoind.generate_block(1) |
4251 | 4252 | height = bitcoind.rpc.getblockchaininfo()['blocks'] |
4252 | 4253 | l1.daemon.wait_for_log(r"Low-priority anchorspend aiming for block {} \(feerate 7500\)".format(height + 12)) |
| 4254 | + |
| 4255 | + |
| 4256 | +@pytest.mark.slow_test |
| 4257 | +@pytest.mark.xfail(strict=True) |
| 4258 | +def test_slow_startup_many_addresses(node_factory, bitcoind): |
| 4259 | + l1, l2 = node_factory.get_nodes(2) |
| 4260 | + |
| 4261 | + # Use really high key, to make scanning work hard. |
| 4262 | + l1.stop() |
| 4263 | + l1.db_manip("INSERT INTO vars (name, intval) VALUES ('bip32_max_index', 10000);") |
| 4264 | + l1.start() |
| 4265 | + |
| 4266 | + NUM_CHANS = 20 |
| 4267 | + FUND = 100000 |
| 4268 | + |
| 4269 | + addr = l1.rpc.newaddr()['bech32'] |
| 4270 | + bitcoind.rpc.sendtoaddress(addr, (FUND * NUM_CHANS + 1000000) / 10**8) |
| 4271 | + |
| 4272 | + bitcoind.generate_block(1) |
| 4273 | + sync_blockheight(bitcoind, [l1]) |
| 4274 | + l1.rpc.connect(l2.info['id'], 'localhost', l2.port) |
| 4275 | + |
| 4276 | + channels = [] |
| 4277 | + for _ in range(NUM_CHANS): |
| 4278 | + channels.append(l1.rpc.fundchannel(l2.info['id'], FUND)['channel_id']) |
| 4279 | + bitcoind.generate_block(1) |
| 4280 | + wait_for(lambda: all([c['state'] == 'CHANNELD_NORMAL' for c in l1.rpc.listpeerchannels()['channels']])) |
| 4281 | + |
| 4282 | + for c in channels: |
| 4283 | + l1.rpc.close(c) |
| 4284 | + |
| 4285 | + l1.stop() |
| 4286 | + start = time.time() |
| 4287 | + l1.start() |
| 4288 | + end = time.time() |
| 4289 | + |
| 4290 | + # Normally less than a second: give it 10. |
| 4291 | + assert end - start < 10 |
0 commit comments