2017-12-21 20:33:47 +01:00
#!/usr/bin/env python3
2016-03-22 23:11:04 +01:00
# Copyright (c) 2014-2015 The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
#
# Test timestampindex generation and fetching
#
from test_framework . test_framework import BitcoinTestFramework
2021-04-08 22:29:01 +02:00
from test_framework . test_node import ErrorMatch
2022-09-24 14:36:35 +02:00
from test_framework . util import assert_equal
2016-03-22 23:11:04 +01:00
class TimestampIndexTest ( BitcoinTestFramework ) :
2019-09-24 00:56:31 +02:00
def set_test_params ( self ) :
2018-04-18 13:48:59 +02:00
self . setup_clean_chain = True
self . num_nodes = 4
2016-03-22 23:11:04 +01:00
def setup_network ( self ) :
2019-09-24 00:56:31 +02:00
self . add_nodes ( self . num_nodes )
2016-03-22 23:11:04 +01:00
# Nodes 0/1 are "wallet" nodes
2019-09-24 00:56:31 +02:00
self . start_node ( 0 )
self . start_node ( 1 , [ " -timestampindex " ] )
2016-03-22 23:11:04 +01:00
# Nodes 2/3 are used for testing
2019-09-24 00:56:31 +02:00
self . start_node ( 2 )
self . start_node ( 3 , [ " -timestampindex " ] )
2022-09-24 14:36:35 +02:00
self . connect_nodes ( 0 , 1 )
self . connect_nodes ( 0 , 2 )
self . connect_nodes ( 0 , 3 )
2016-03-22 23:11:04 +01:00
self . sync_all ( )
def run_test ( self ) :
2024-08-12 13:12:53 +02:00
self . log . info ( " Test that settings can be disabled without -reindex... " )
self . restart_node ( 1 , [ " -timestampindex=0 " ] )
2022-09-24 14:36:35 +02:00
self . connect_nodes ( 0 , 1 )
2019-10-31 18:30:42 +01:00
self . sync_all ( )
2024-08-12 13:12:53 +02:00
self . log . info ( " Test that settings can ' t be enabled without -reindex... " )
2019-10-31 18:30:42 +01:00
self . stop_node ( 1 )
2024-08-12 13:12:53 +02:00
self . nodes [ 1 ] . assert_start_raises_init_error ( [ " -timestampindex " ] , " You need to rebuild the database using -reindex to enable -timestampindex " , match = ErrorMatch . PARTIAL_REGEX )
2019-10-31 18:30:42 +01:00
self . start_node ( 1 , [ " -timestampindex " , " -reindex " ] )
2022-09-24 14:36:35 +02:00
self . connect_nodes ( 0 , 1 )
2019-10-31 18:30:42 +01:00
self . sync_all ( )
2019-03-08 09:05:00 +01:00
self . log . info ( " Mining 5 blocks... " )
2024-10-01 21:25:52 +02:00
blockhashes = self . generate ( self . nodes [ 0 ] , 5 )
2016-03-22 23:11:04 +01:00
low = self . nodes [ 0 ] . getblock ( blockhashes [ 0 ] ) [ " time " ]
high = self . nodes [ 0 ] . getblock ( blockhashes [ 4 ] ) [ " time " ]
2019-03-08 09:05:00 +01:00
self . log . info ( " Checking timestamp index... " )
2016-03-22 23:11:04 +01:00
hashes = self . nodes [ 1 ] . getblockhashes ( high , low )
assert_equal ( len ( hashes ) , 5 )
assert_equal ( sorted ( blockhashes ) , sorted ( hashes ) )
2019-03-08 09:05:00 +01:00
self . log . info ( " Passed " )
2016-03-22 23:11:04 +01:00
if __name__ == ' __main__ ' :
TimestampIndexTest ( ) . main ( )