Merge bitcoin/bitcoin#28118: test: Add SyncWithValidationInterfaceQueue to mockscheduler RPC

fabef121b0 refactor: Use EnsureAnyNodeContext (MarcoFalke)
fa1640617e test: Add SyncWithValidationInterfaceQueue to mockscheduler RPC (MarcoFalke)

Pull request description:

  There should be no risk or downside in adding a call to `SyncWithValidationInterfaceQueue` here. In fact, it will make tests less brittle. For example,

  * If one sets the timeouts in `test/functional/feature_fee_estimation.py` to `0`, on `master` the test will fail and here it will pass.
  * It may avoid a rare (theoretic) intermittent issue in https://github.com/bitcoin/bitcoin/pull/28108/files#r1268966663

ACKs for top commit:
  TheCharlatan:
    ACK fabef121b0
  furszy:
    Code review ACK fabef121. Convinced by checking all current tests usages.

Tree-SHA512: c9e9a536a8721d1b3f267a66b40578b34948892301affdcad121ef8e02bf17037305d0dd53aa94b1b064753e66f9cfb31823b916b707a9d812627f502b818003
pull/28188/head
fanquake 1 year ago
commit 64440bb733
No known key found for this signature in database
GPG Key ID: 2EEB9F5CC09526C1

@ -57,11 +57,9 @@ static RPCHelpMan setmocktime()
throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Mocktime cannot be negative: %s.", time)); throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Mocktime cannot be negative: %s.", time));
} }
SetMockTime(time); SetMockTime(time);
auto node_context = util::AnyPtr<NodeContext>(request.context); const NodeContext& node_context{EnsureAnyNodeContext(request.context)};
if (node_context) { for (const auto& chain_client : node_context.chain_clients) {
for (const auto& chain_client : node_context->chain_clients) { chain_client->setMockTime(time);
chain_client->setMockTime(time);
}
} }
return UniValue::VNULL; return UniValue::VNULL;
@ -89,10 +87,9 @@ static RPCHelpMan mockscheduler()
throw std::runtime_error("delta_time must be between 1 and 3600 seconds (1 hr)"); throw std::runtime_error("delta_time must be between 1 and 3600 seconds (1 hr)");
} }
auto node_context = CHECK_NONFATAL(util::AnyPtr<NodeContext>(request.context)); const NodeContext& node_context{EnsureAnyNodeContext(request.context)};
// protect against null pointer dereference CHECK_NONFATAL(node_context.scheduler)->MockForward(std::chrono::seconds{delta_seconds});
CHECK_NONFATAL(node_context->scheduler); SyncWithValidationInterfaceQueue();
node_context->scheduler->MockForward(std::chrono::seconds(delta_seconds));
return UniValue::VNULL; return UniValue::VNULL;
}, },

Loading…
Cancel
Save