diff --git a/daemon/chaintopology.c b/daemon/chaintopology.c index fa65489d9..0456c1a67 100644 --- a/daemon/chaintopology.c +++ b/daemon/chaintopology.c @@ -549,6 +549,27 @@ void json_dev_broadcast(struct command *cmd, command_success(cmd, null_response(cmd)); } +static void json_dev_blockheight(struct command *cmd, + const char *buffer, const jsmntok_t *params) +{ + struct chain_topology *topo = cmd->dstate->topology; + struct json_result *response; + + response = new_json_result(cmd); + json_object_start(response, NULL); + json_add_num(response, "blockheight", get_block_height(topo)); + json_object_end(response); + command_success(cmd, response); +} + +static const struct json_command dev_blockheight = { + "dev-blockheight", + json_dev_blockheight, + "Find out what block height we have", + "Returns { blockheight: u32 } on success" +}; +AUTODATA(json_command, &dev_blockheight); + /* On shutdown, peers get deleted last. That frees from our list, so * do it now instead. */ static void destroy_outgoing_txs(struct chain_topology *topo) diff --git a/tests/test_lightningd.py b/tests/test_lightningd.py index 974b4a8d9..7ceb3cd0f 100644 --- a/tests/test_lightningd.py +++ b/tests/test_lightningd.py @@ -37,6 +37,19 @@ def setupBitcoind(): logging.debug("Insufficient balance, generating 1 block") bitcoind.rpc.generate(1) +def sync_blockheight(*args): + while True: + target = bitcoind.rpc.getblockcount() + all_up_to_date = True + for l in args: + if l.rpc.dev_blockheight()['blockheight'] != target: + all_up_to_date = False + + if all_up_to_date: + return + + # Sleep before spinning. + time.sleep(0.1) def tearDownBitcoind(): global bitcoind