def METHOD_NAME(self):
    import optparse
    parser = optparse.OptionParser(usage="%prog [options]")
    parser.add_option("--nocleanup", dest="nocleanup", default=False, action="store_true",
                      help="Leave bitcoinds and test.* datadir on exit or error")
    parser.add_option("--noshutdown", dest="noshutdown", default=False, action="store_true",
                      help="Don't stop bitcoinds after the test execution")
    parser.add_option("--srcdir", dest="srcdir", default="../../src",
                      help="Source directory containing bitcoind/bitcoin-cli (default: %default)")
    parser.add_option("--tmpdir", dest="tmpdir", default=tempfile.mkdtemp(prefix="test"),
                      help="Root directory for datadirs")
    parser.add_option("--tracerpc", dest="trace_rpc", default=False, action="store_true",
                      help="Print out all RPC calls as they are made")
    self.add_options(parser)
    (self.options, self.args) = parser.parse_args()
    if self.options.trace_rpc:
        import logging
        logging.basicConfig(level=logging.DEBUG)
    os.environ['PATH'] = self.options.srcdir+":"+os.environ['PATH']
    check_json_precision()
    success = False
    try:
        if not os.path.isdir(self.options.tmpdir):
            os.makedirs(self.options.tmpdir)
        self.setup_chain()
        self.setup_network()
        self.run_test()
        success = True
    except JSONRPCException as e:
        print("JSONRPC error: "+e.error['message'])
        traceback.print_tb(sys.exc_info()[2])
    except JSONWSException as e:
        print("JSONWS error: {}".format(e.error))
        traceback.print_tb(sys.exc_info()[2])
    except AssertionError as e:
        print("Assertion failed: " + str(e))
        traceback.print_tb(sys.exc_info()[2])
    except Exception as e:
        print("Unexpected exception caught during testing: " + str(e))
        traceback.print_tb(sys.exc_info()[2])
    if not self.options.noshutdown and len(self.nodes) > 0:
        print("Stopping nodes")
        stop_nodes(self.nodes)
        wait_bitcoinds()
    else:
        print("Note: bitcoinds were not stopped and may still be running")
    if not self.options.nocleanup and not self.options.noshutdown:
        print("Cleaning up")
        shutil.rmtree(self.options.tmpdir)
    if success:
        print("Tests successful")
        sys.exit(0)
    else:
        print("Failed")
        sys.exit(1)