Browse Source

Merge pull request #5280

3c30f27 travis: disable rpc tests for windows until they're not so flaky (Cory Fields)
daf03e7 RPC tests: create initial chain with specific timestamps (Gavin Andresen)
a8b2ce5 regression test only setmocktime RPC call (Gavin Andresen)
tags/v0.15.1
Gavin Andresen 5 years ago
parent
commit
fd3777b0b2
No account linked to committer's email address
6 changed files with 45 additions and 8 deletions
  1. 5
    0
      qa/pull-tester/rpc-tests.sh
  2. 17
    8
      qa/rpc-tests/util.py
  3. 1
    0
      src/rpcclient.cpp
  4. 20
    0
      src/rpcmisc.cpp
  5. 1
    0
      src/rpcserver.cpp
  6. 1
    0
      src/rpcserver.h

+ 5
- 0
qa/pull-tester/rpc-tests.sh View File

@@ -8,6 +8,11 @@ CURDIR=$(cd $(dirname "$0"); pwd)
export BITCOINCLI=${BUILDDIR}/qa/pull-tester/run-bitcoin-cli
export BITCOIND=${REAL_BITCOIND}

if [ "x${EXEEXT}" = "x.exe" ]; then
echo "Win tests currently disabled"
exit 0
fi

#Run the tests

if [ "x${ENABLE_BITCOIND}${ENABLE_UTILS}${ENABLE_WALLET}" = "x111" ]; then

+ 17
- 8
qa/rpc-tests/util.py View File

@@ -103,12 +103,17 @@ def initialize_chain(test_dir):

# Create a 200-block-long chain; each of the 4 nodes
# gets 25 mature blocks and 25 immature.
for i in range(4):
rpcs[i].setgenerate(True, 25)
sync_blocks(rpcs)
for i in range(4):
rpcs[i].setgenerate(True, 25)
sync_blocks(rpcs)
# blocks are created with timestamps 10 minutes apart, starting
# at 1 Jan 2014
block_time = 1388534400
for i in range(2):
for peer in range(4):
for j in range(25):
set_node_times(rpcs, block_time)
rpcs[peer].setgenerate(True, 1)
block_time += 10*60
# Must sync before next peer starts generating blocks
sync_blocks(rpcs)

# Shut them down, and clean up cache directories:
stop_nodes(rpcs)
@@ -179,10 +184,14 @@ def stop_node(node, i):
del bitcoind_processes[i]

def stop_nodes(nodes):
for i in range(len(nodes)):
nodes[i].stop()
for node in nodes:
node.stop()
del nodes[:] # Emptying array closes connections as a side effect

def set_node_times(nodes, t):
for node in nodes:
node.setmocktime(t)

def wait_bitcoinds():
# Wait for all bitcoinds to cleanly exit
for bitcoind in bitcoind_processes.values():

+ 1
- 0
src/rpcclient.cpp View File

@@ -25,6 +25,7 @@ public:
static const CRPCConvertParam vRPCConvertParams[] =
{
{ "stop", 0 },
{ "setmocktime", 0 },
{ "getaddednodeinfo", 0 },
{ "setgenerate", 0 },
{ "setgenerate", 1 },

+ 20
- 0
src/rpcmisc.cpp View File

@@ -354,3 +354,23 @@ Value verifymessage(const Array& params, bool fHelp)

return (pubkey.GetID() == keyID);
}

Value setmocktime(const Array& params, bool fHelp)
{
if (fHelp || params.size() != 1)
throw runtime_error(
"setmocktime timestamp\n"
"\nSet the local time to given timestamp (-regtest only)\n"
"\nArguments:\n"
"1. timestamp (integer, required) Unix seconds-since-epoch timestamp\n"
" Pass 0 to go back to using the system time."
);

if (!Params().MineBlocksOnDemand())
throw runtime_error("setmocktime for regression testing (-regtest mode) only");

RPCTypeCheck(params, boost::assign::list_of(int_type));
SetMockTime(params[0].get_int64());

return Value::null;
}

+ 1
- 0
src/rpcserver.cpp View File

@@ -246,6 +246,7 @@ static const CRPCCommand vRPCCommands[] =
{ "control", "getinfo", &getinfo, true, false, false }, /* uses wallet if enabled */
{ "control", "help", &help, true, true, false },
{ "control", "stop", &stop, true, true, false },
{ "control", "setmocktime", &setmocktime, true, false, false },

/* P2P networking */
{ "network", "getnetworkinfo", &getnetworkinfo, true, false, false },

+ 1
- 0
src/rpcserver.h View File

@@ -194,6 +194,7 @@ extern json_spirit::Value getinfo(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getwalletinfo(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getblockchaininfo(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value getnetworkinfo(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value setmocktime(const json_spirit::Array& params, bool fHelp);

extern json_spirit::Value getrawtransaction(const json_spirit::Array& params, bool fHelp); // in rcprawtransaction.cpp
extern json_spirit::Value listunspent(const json_spirit::Array& params, bool fHelp);

Loading…
Cancel
Save