@@ -1773,3 +1773,133 @@ impl Burnchain {
1773
1773
Ok ( block_header)
1774
1774
}
1775
1775
}
1776
+
1777
+ #[ cfg( test) ]
1778
+ mod tests {
1779
+ use super :: * ;
1780
+ use crate :: burnchains:: * ;
1781
+ use regex:: Regex ;
1782
+
1783
+ #[ test]
1784
+ fn test_creation_by_new_for_bitcoin_mainnet ( ) {
1785
+ let burn_chain = Burnchain :: new ( "workdir/path" , "bitcoin" , "mainnet" ) ;
1786
+ assert ! ( burn_chain. is_ok( ) ) ;
1787
+
1788
+ let burn_chain = burn_chain. unwrap ( ) ;
1789
+ let first_block_hash = BurnchainHeaderHash :: from_hex ( BITCOIN_MAINNET_FIRST_BLOCK_HASH ) . unwrap ( ) ;
1790
+ assert_eq ! ( PEER_VERSION_MAINNET , burn_chain. peer_version) ;
1791
+ assert_eq ! ( BITCOIN_NETWORK_ID_MAINNET , burn_chain. network_id) ;
1792
+ assert_eq ! ( BITCOIN_MAINNET_NAME , burn_chain. network_name) ;
1793
+ assert_eq ! ( "workdir/path" , burn_chain. working_dir) ;
1794
+ assert_eq ! ( 24 , burn_chain. consensus_hash_lifetime) ;
1795
+ assert_eq ! ( 7 , burn_chain. stable_confirmations) ;
1796
+ assert_eq ! ( BITCOIN_MAINNET_FIRST_BLOCK_HEIGHT , burn_chain. first_block_height) ;
1797
+ assert_eq ! ( first_block_hash, burn_chain. first_block_hash) ;
1798
+ assert_eq ! ( BITCOIN_MAINNET_FIRST_BLOCK_TIMESTAMP , burn_chain. first_block_timestamp) ;
1799
+ assert_eq ! ( PoxConstants :: mainnet_default( ) , burn_chain. pox_constants) ;
1800
+ assert_eq ! ( BITCOIN_MAINNET_INITIAL_REWARD_START_BLOCK , burn_chain. initial_reward_start_block) ;
1801
+ }
1802
+
1803
+ #[ test]
1804
+ fn test_creation_by_new_for_bitcoin_testnet ( ) {
1805
+ let burn_chain = Burnchain :: new ( "workdir/path" , "bitcoin" , "testnet" ) ;
1806
+ assert ! ( burn_chain. is_ok( ) ) ;
1807
+
1808
+ let burn_chain = burn_chain. unwrap ( ) ;
1809
+ let first_block_hash = BurnchainHeaderHash :: from_hex ( BITCOIN_TESTNET_FIRST_BLOCK_HASH ) . unwrap ( ) ;
1810
+ assert_eq ! ( PEER_VERSION_TESTNET , burn_chain. peer_version) ;
1811
+ assert_eq ! ( BITCOIN_NETWORK_ID_TESTNET , burn_chain. network_id) ;
1812
+ assert_eq ! ( BITCOIN_TESTNET_NAME , burn_chain. network_name) ;
1813
+ assert_eq ! ( "workdir/path" , burn_chain. working_dir) ;
1814
+ assert_eq ! ( 24 , burn_chain. consensus_hash_lifetime) ;
1815
+ assert_eq ! ( 7 , burn_chain. stable_confirmations) ;
1816
+ assert_eq ! ( BITCOIN_TESTNET_FIRST_BLOCK_HEIGHT , burn_chain. first_block_height) ;
1817
+ assert_eq ! ( first_block_hash, burn_chain. first_block_hash) ;
1818
+ assert_eq ! ( BITCOIN_TESTNET_FIRST_BLOCK_TIMESTAMP , burn_chain. first_block_timestamp) ;
1819
+ assert_eq ! ( PoxConstants :: testnet_default( ) , burn_chain. pox_constants) ;
1820
+ assert_eq ! ( 1_990_000 , burn_chain. initial_reward_start_block) ;
1821
+ }
1822
+
1823
+ #[ test]
1824
+ fn test_creation_by_new_for_bitcoin_regtest ( ) {
1825
+ let burn_chain = Burnchain :: new ( "workdir/path" , "bitcoin" , "regtest" ) ;
1826
+ assert ! ( burn_chain. is_ok( ) ) ;
1827
+
1828
+ let burn_chain = burn_chain. unwrap ( ) ;
1829
+ let first_block_hash = BurnchainHeaderHash :: from_hex ( BITCOIN_REGTEST_FIRST_BLOCK_HASH ) . unwrap ( ) ;
1830
+ assert_eq ! ( PEER_VERSION_TESTNET , burn_chain. peer_version) ;
1831
+ assert_eq ! ( BITCOIN_NETWORK_ID_REGTEST , burn_chain. network_id) ;
1832
+ assert_eq ! ( BITCOIN_REGTEST_NAME , burn_chain. network_name) ;
1833
+ assert_eq ! ( "workdir/path" , burn_chain. working_dir) ;
1834
+ assert_eq ! ( 24 , burn_chain. consensus_hash_lifetime) ;
1835
+ assert_eq ! ( 1 , burn_chain. stable_confirmations) ;
1836
+ assert_eq ! ( BITCOIN_REGTEST_FIRST_BLOCK_HEIGHT , burn_chain. first_block_height) ;
1837
+ assert_eq ! ( first_block_hash, burn_chain. first_block_hash) ;
1838
+ assert_eq ! ( BITCOIN_REGTEST_FIRST_BLOCK_TIMESTAMP , burn_chain. first_block_timestamp) ;
1839
+ assert_eq ! ( PoxConstants :: regtest_default( ) , burn_chain. pox_constants) ;
1840
+ assert_eq ! ( BITCOIN_REGTEST_FIRST_BLOCK_HEIGHT , burn_chain. initial_reward_start_block) ;
1841
+ }
1842
+
1843
+ #[ test]
1844
+ fn test_creation_by_new_failure ( ) {
1845
+ //case: wrong chain name
1846
+ let burn_chain = Burnchain :: new ( "workdir/path" , "wrong_chain_name" , "regtest" ) ;
1847
+ assert ! ( burn_chain. is_err( ) ) ;
1848
+ assert ! ( matches!( burn_chain. unwrap_err( ) , burnchain_error:: UnsupportedBurnchain ) ) ;
1849
+
1850
+ //case: wrong network name
1851
+ let burn_chain = Burnchain :: new ( "workdir/path" , "bitcoin" , "wrong_net_name" ) ;
1852
+ assert ! ( burn_chain. is_err( ) ) ;
1853
+ assert ! ( matches!( burn_chain. unwrap_err( ) , burnchain_error:: UnsupportedBurnchain ) ) ;
1854
+
1855
+ //case: wrong chain name + wrong network name
1856
+ let burn_chain = Burnchain :: new ( "workdir/path" , "wrong_chain_name" , "wrong_net_name" ) ;
1857
+ assert ! ( burn_chain. is_err( ) ) ;
1858
+ assert ! ( matches!( burn_chain. unwrap_err( ) , burnchain_error:: UnsupportedBurnchain ) ) ;
1859
+ }
1860
+
1861
+ #[ test]
1862
+ fn test_creation_by_default_unittest ( ) {
1863
+ let first_block_height = 0 ;
1864
+ let first_block_hash = BurnchainHeaderHash ( [ 0u8 ; 32 ] ) ;
1865
+ let burn_chain = Burnchain :: default_unittest ( first_block_height, & first_block_hash) ;
1866
+
1867
+ let workdir_re = Regex :: new ( r"^/tmp/stacks-node-tests/unit-tests-[0-9a-f]{32}$" ) . unwrap ( ) ;
1868
+
1869
+ assert_eq ! ( PEER_VERSION_MAINNET , burn_chain. peer_version) ;
1870
+ assert_eq ! ( BITCOIN_NETWORK_ID_MAINNET , burn_chain. network_id) ;
1871
+ assert_eq ! ( BITCOIN_MAINNET_NAME , burn_chain. network_name) ;
1872
+ assert ! ( workdir_re. is_match( & burn_chain. working_dir) ) ;
1873
+ assert_eq ! ( 24 , burn_chain. consensus_hash_lifetime) ;
1874
+ assert_eq ! ( 7 , burn_chain. stable_confirmations) ;
1875
+ assert_eq ! ( first_block_height, burn_chain. first_block_height) ;
1876
+ assert_eq ! ( first_block_hash, burn_chain. first_block_hash) ;
1877
+ assert_eq ! ( BITCOIN_MAINNET_FIRST_BLOCK_TIMESTAMP , burn_chain. first_block_timestamp) ;
1878
+ assert_eq ! ( PoxConstants :: mainnet_default( ) , burn_chain. pox_constants) ;
1879
+ assert_eq ! ( first_block_height, burn_chain. initial_reward_start_block) ;
1880
+ }
1881
+
1882
+ #[ test]
1883
+ fn test_nakamoto_reward_cycle_boundaries ( ) {
1884
+ let first_block_height = 0 ;
1885
+ let first_block_hash = BurnchainHeaderHash ( [ 0u8 ; 32 ] ) ;
1886
+ let burn_chain = Burnchain :: default_unittest ( first_block_height, & first_block_hash) ;
1887
+
1888
+ //making obvious the reward cycle length used
1889
+ assert_eq ! ( 2100 , burn_chain. pox_constants. reward_cycle_length) ;
1890
+
1891
+ //Reward Cycle: 0
1892
+ let rc = 0 ;
1893
+ let rc_first_block = burn_chain. nakamoto_first_block_of_cycle ( rc) ;
1894
+ let rc_last_block = burn_chain. nakamoto_last_block_of_cycle ( rc) ;
1895
+ assert_eq ! ( 0 , rc_first_block) ;
1896
+ assert_eq ! ( 2099 , rc_last_block) ;
1897
+
1898
+ //Reward Cycle: 1
1899
+ let rc = 1 ;
1900
+ let rc_first_block = burn_chain. nakamoto_first_block_of_cycle ( rc) ;
1901
+ let rc_last_block = burn_chain. nakamoto_last_block_of_cycle ( rc) ;
1902
+ assert_eq ! ( 2100 , rc_first_block) ;
1903
+ assert_eq ! ( 4199 , rc_last_block) ;
1904
+ }
1905
+ }
0 commit comments