@ -41,7 +41,28 @@ TEST_EXIT_PASSED = 0
TEST_EXIT_FAILED = 1
TEST_EXIT_SKIPPED = 77
class BitcoinTestFramework ( ) :
class BitcoinTestMetaClass ( type ) :
""" Metaclass for BitcoinTestFramework.
Ensures that any attempt to register a subclass of ` BitcoinTestFramework `
adheres to a standard whereby the subclass overrides ` set_test_params ` and
` run_test ` but DOES NOT override either ` __init__ ` or ` main ` . If any of
those standards are violated , a ` ` TypeError ` ` is raised . """
def __new__ ( cls , clsname , bases , dct ) :
if not clsname == ' BitcoinTestFramework ' :
if not ( ' run_test ' in dct and ' set_test_params ' in dct ) :
raise TypeError ( " BitcoinTestFramework subclasses must override "
" ' run_test ' and ' set_test_params ' " )
if ' __init__ ' in dct or ' main ' in dct :
raise TypeError ( " BitcoinTestFramework subclasses may not override "
" ' __init__ ' or ' main ' " )
return super ( ) . __new__ ( cls , clsname , bases , dct )
class BitcoinTestFramework ( metaclass = BitcoinTestMetaClass ) :
""" Base class for a bitcoin test script.
Individual bitcoin test scripts should subclass this class and override the set_test_params ( ) and run_test ( ) methods .
@ -432,6 +453,7 @@ class BitcoinTestFramework():
for i in range ( self . num_nodes ) :
initialize_datadir ( self . options . tmpdir , i )
class SkipTest ( Exception ) :
""" This exception is raised to skip a test """
def __init__ ( self , message ) :