mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-21 07:39:08 +01:00
Merge #18037: Util: Allow scheduler to be mocked
8bca30ea17[rpc] expose ability to mock scheduler via the rpc (Amiti Uttarwar)7c8b6e5b52[lib] add scheduler to node context (Amiti Uttarwar)930d837542[test] add chainparams property to indicate chain allows time mocking (Amiti Uttarwar)1cd43e83c6[test] unit test for new MockForward scheduler method (Amiti Uttarwar)a6f63598ad[util] allow scheduler to be mocked (Amiti Uttarwar) Pull request description: This PR is to support functional tests by allowing the scheduler to be mocked via the RPC. It adds a `MockForward` method to the scheduler class that iterates through the task queue and reschedules them to be `delta_seconds` sooner. This is currently used to support functional testing of the "unbroadcast" set tracking in #18038. If this patch is accepted, it would also be useful to simplify the code in #16698. ACKs for top commit: MarcoFalke: ACK8bca30ea17, only change is some style fixups 🕓 Tree-SHA512: 2a97fe8ade2b7fd1fb5cdfa1dcafb3227a377d7a847e3845a228bc119eb77824b4aefa43d922a06d583939b22725e223f308cf092961048079d36f6b1d9a639b
This commit is contained in:
@@ -5,10 +5,12 @@
|
||||
|
||||
#include <httpserver.h>
|
||||
#include <key_io.h>
|
||||
#include <node/context.h>
|
||||
#include <outputtype.h>
|
||||
#include <rpc/blockchain.h>
|
||||
#include <rpc/server.h>
|
||||
#include <rpc/util.h>
|
||||
#include <scheduler.h>
|
||||
#include <script/descriptor.h>
|
||||
#include <util/check.h>
|
||||
#include <util/strencodings.h>
|
||||
@@ -371,6 +373,36 @@ static UniValue setmocktime(const JSONRPCRequest& request)
|
||||
return NullUniValue;
|
||||
}
|
||||
|
||||
static UniValue mockscheduler(const JSONRPCRequest& request)
|
||||
{
|
||||
RPCHelpMan{"mockscheduler",
|
||||
"\nBump the scheduler into the future (-regtest only)\n",
|
||||
{
|
||||
{"delta_time", RPCArg::Type::NUM, RPCArg::Optional::NO, "Number of seconds to forward the scheduler into the future." },
|
||||
},
|
||||
RPCResults{},
|
||||
RPCExamples{""},
|
||||
}.Check(request);
|
||||
|
||||
if (!Params().IsMockableChain()) {
|
||||
throw std::runtime_error("mockscheduler is for regression testing (-regtest mode) only");
|
||||
}
|
||||
|
||||
// check params are valid values
|
||||
RPCTypeCheck(request.params, {UniValue::VNUM});
|
||||
int64_t delta_seconds = request.params[0].get_int64();
|
||||
if ((delta_seconds <= 0) || (delta_seconds > 3600)) {
|
||||
throw std::runtime_error("delta_time must be between 1 and 3600 seconds (1 hr)");
|
||||
}
|
||||
|
||||
// protect against null pointer dereference
|
||||
CHECK_NONFATAL(g_rpc_node);
|
||||
CHECK_NONFATAL(g_rpc_node->scheduler);
|
||||
g_rpc_node->scheduler->MockForward(boost::chrono::seconds(delta_seconds));
|
||||
|
||||
return NullUniValue;
|
||||
}
|
||||
|
||||
static UniValue RPCLockedMemoryInfo()
|
||||
{
|
||||
LockedPool::Stats stats = LockedPoolManager::Instance().stats();
|
||||
@@ -575,6 +607,7 @@ static const CRPCCommand commands[] =
|
||||
|
||||
/* Not shown in help */
|
||||
{ "hidden", "setmocktime", &setmocktime, {"timestamp"}},
|
||||
{ "hidden", "mockscheduler", &mockscheduler, {"delta_time"}},
|
||||
{ "hidden", "echo", &echo, {"arg0","arg1","arg2","arg3","arg4","arg5","arg6","arg7","arg8","arg9"}},
|
||||
{ "hidden", "echojson", &echo, {"arg0","arg1","arg2","arg3","arg4","arg5","arg6","arg7","arg8","arg9"}},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user