set smart default timeout

pull/2302/head
bohendo 9 months ago
parent 89e2318fd8
commit 61242af57a
No known key found for this signature in database
  1. 22
      slither/tools/mutator/__main__.py

@ -1,14 +1,15 @@
import argparse import argparse
import inspect import inspect
import logging import logging
import sys
import os import os
import shutil import shutil
import sys
import time
from typing import Type, List, Any, Optional from typing import Type, List, Any, Optional
from crytic_compile import cryticparser from crytic_compile import cryticparser
from slither import Slither from slither import Slither
from slither.tools.mutator.mutators import all_mutators from slither.tools.mutator.mutators import all_mutators
from slither.utils.colors import blue, magenta from slither.utils.colors import blue, green, magenta, red
from slither.tools.mutator.utils.testing_generated_mutant import run_test_cmd from slither.tools.mutator.utils.testing_generated_mutant import run_test_cmd
from .mutators.abstract_mutator import AbstractMutator from .mutators.abstract_mutator import AbstractMutator
from .utils.command_line import output_mutators from .utils.command_line import output_mutators
@ -201,11 +202,24 @@ def main() -> (None): # pylint: disable=too-many-statements,too-many-branches,t
CR_RR_list.insert(1, M) CR_RR_list.insert(1, M)
mutators_list = CR_RR_list + mutators_list mutators_list = CR_RR_list + mutators_list
if not run_test_cmd(test_command, "", timeout): # run and time tests, abort if they're broken
start_time = time.time()
if not run_test_cmd(test_command, "", 600): # use a very long timeout this first time
logger.error(red("Test suite fails before mutation, aborting")) logger.error(red("Test suite fails before mutation, aborting"))
return return
elapsed_time = round(time.time() - start_time)
# set default timeout
# default to twice as long as it usually takes to run the test suite
if timeout is None:
timeout = int(elapsed_time * 2)
else: else:
logger.info(green("Test suite passes, commencing mutation campaign")) timeout = int(timeout)
if timeout < elapsed_time:
logger.info(red(f"Provided timeout {timeout} is too short for tests that run in {elapsed_time} seconds"))
logger.info(green(f"Test suite passes in {elapsed_time} seconds, commencing mutation campaign with a timeout of {timeout} seconds\n"))
for filename in sol_file_list: # pylint: disable=too-many-nested-blocks for filename in sol_file_list: # pylint: disable=too-many-nested-blocks
file_name = os.path.split(filename)[1].split(".sol")[0] file_name = os.path.split(filename)[1].split(".sol")[0]

Loading…
Cancel
Save