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)
pull/145/head
Gavin Andresen
10 years ago
No known key found for this signature in database
GPG Key ID: 7588242FBE38D3A8
6 changed files with
45 additions and
8 deletions
qa/pull-tester/rpc-tests.sh
qa/rpc-tests/util.py
src/rpcclient.cpp
src/rpcmisc.cpp
src/rpcserver.cpp
src/rpcserver.h
@ -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
@ -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 ( ) :
@ -25,6 +25,7 @@ public:
static const CRPCConvertParam vRPCConvertParams [ ] =
{
{ " stop " , 0 } ,
{ " setmocktime " , 0 } ,
{ " getaddednodeinfo " , 0 } ,
{ " setgenerate " , 0 } ,
{ " setgenerate " , 1 } ,
@ -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 "
" \n Set the local time to given timestamp (-regtest only) \n "
" \n Arguments: \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 ;
}
@ -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 } ,
@ -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 ) ;