Tests: fail automated tests on memory leaks and other internal errors
This adds a new `--debug-exit-on-error` flag. When it is set, Blender will abort with a non-zero exit code when there are internal errors. Currently, "internal errors" includes memory leaks detected by guardedalloc and error/fatal log entries in clog. The new flag is passed to Blender in various places where automated tests are run. Furthermore, the `--debug-memory` flag is used in tests, because that makes the verbose output more useful, when dealing with memory leaks. Reviewers: brecht, sergey Differential Revision: https://developer.blender.org/D8665
This commit is contained in:
@@ -44,7 +44,7 @@ unset(_default_test_python_exe)
|
||||
|
||||
# Standard Blender arguments for running tests.
|
||||
# Specify exit code so that if a Python script error happens, the test fails.
|
||||
set(TEST_BLENDER_EXE_PARAMS --background -noaudio --factory-startup --python-exit-code 1)
|
||||
set(TEST_BLENDER_EXE_PARAMS --background -noaudio --factory-startup --debug-memory --debug-exit-on-error --python-exit-code 1)
|
||||
|
||||
# Python CTests
|
||||
if(WITH_BLENDER AND WITH_PYTHON)
|
||||
|
@@ -50,6 +50,7 @@ int main(int argc, char **argv)
|
||||
{
|
||||
MEM_use_guarded_allocator();
|
||||
MEM_init_memleak_detection();
|
||||
MEM_enable_fail_on_memleak();
|
||||
testing::InitGoogleTest(&argc, argv);
|
||||
BLENDER_GFLAGS_NAMESPACE::ParseCommandLineFlags(&argc, &argv, true);
|
||||
google::InitGoogleLogging(argv[0]);
|
||||
|
@@ -36,12 +36,12 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${TEST_OUT_DIR})
|
||||
# all calls to blender use this
|
||||
if(APPLE)
|
||||
if(${CMAKE_GENERATOR} MATCHES "Xcode")
|
||||
set(TEST_BLENDER_EXE_PARAMS --background -noaudio --factory-startup)
|
||||
set(TEST_BLENDER_EXE_PARAMS --background -noaudio --factory-startup --debug-memory --debug-exit-on-error)
|
||||
else()
|
||||
set(TEST_BLENDER_EXE_PARAMS --background -noaudio --factory-startup --env-system-scripts ${CMAKE_SOURCE_DIR}/release/scripts)
|
||||
set(TEST_BLENDER_EXE_PARAMS --background -noaudio --factory-startup --debug-memory --debug-exit-on-error --env-system-scripts ${CMAKE_SOURCE_DIR}/release/scripts)
|
||||
endif()
|
||||
else()
|
||||
set(TEST_BLENDER_EXE_PARAMS --background -noaudio --factory-startup --env-system-scripts ${CMAKE_SOURCE_DIR}/release/scripts)
|
||||
set(TEST_BLENDER_EXE_PARAMS --background -noaudio --factory-startup --debug-memory --debug-exit-on-error --env-system-scripts ${CMAKE_SOURCE_DIR}/release/scripts)
|
||||
endif()
|
||||
|
||||
# for testing with valgrind prefix: valgrind --track-origins=yes --error-limit=no
|
||||
|
@@ -20,6 +20,8 @@ def get_arguments(filepath, output_filepath):
|
||||
"-noaudio",
|
||||
"--factory-startup",
|
||||
"--enable-autoexec",
|
||||
"--debug-memory",
|
||||
"--debug-exit-on-error",
|
||||
filepath,
|
||||
"-E", "CYCLES",
|
||||
"-o", output_filepath,
|
||||
|
@@ -103,6 +103,8 @@ def get_arguments(filepath, output_filepath):
|
||||
"-noaudio",
|
||||
"--factory-startup",
|
||||
"--enable-autoexec",
|
||||
"--debug-memory",
|
||||
"--debug-exit-on-error",
|
||||
filepath,
|
||||
"-E", "BLENDER_EEVEE",
|
||||
"-P",
|
||||
|
@@ -448,16 +448,17 @@ class Report:
|
||||
crash = False
|
||||
output = None
|
||||
try:
|
||||
output = subprocess.check_output(command)
|
||||
except subprocess.CalledProcessError as e:
|
||||
crash = True
|
||||
completed_process = subprocess.run(command, stdout=subprocess.PIPE)
|
||||
if completed_process.returncode != 0:
|
||||
crash = True
|
||||
output = completed_process.stdout
|
||||
except BaseException as e:
|
||||
crash = True
|
||||
|
||||
if verbose:
|
||||
print(" ".join(command))
|
||||
if output:
|
||||
print(output.decode("utf-8"))
|
||||
if (verbose or crash) and output:
|
||||
print(output.decode("utf-8"))
|
||||
|
||||
# Detect missing filepaths and consider those errors
|
||||
for filepath, output_filepath in zip(remaining_filepaths[:], output_filepaths):
|
||||
|
@@ -79,6 +79,8 @@ class AbstractBlenderRunnerTest(unittest.TestCase):
|
||||
'-noaudio',
|
||||
'--factory-startup',
|
||||
'--enable-autoexec',
|
||||
'--debug-memory',
|
||||
'--debug-exit-on-error',
|
||||
]
|
||||
|
||||
if blendfile:
|
||||
|
@@ -39,6 +39,8 @@ def get_arguments(filepath, output_filepath):
|
||||
"-noaudio",
|
||||
"--factory-startup",
|
||||
"--enable-autoexec",
|
||||
"--debug-memory",
|
||||
"--debug-exit-on-error",
|
||||
filepath,
|
||||
"-P",
|
||||
os.path.realpath(__file__),
|
||||
|
@@ -30,7 +30,7 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${TEST_OUT_DIR})
|
||||
# endif()
|
||||
|
||||
# for testing with valgrind prefix: valgrind --track-origins=yes --error-limit=no
|
||||
set(TEST_BLENDER_EXE $<TARGET_FILE:blender> --background -noaudio --factory-startup --env-system-scripts ${CMAKE_SOURCE_DIR}/release/scripts)
|
||||
set(TEST_BLENDER_EXE $<TARGET_FILE:blender> --background -noaudio --factory-startup --debug-memory --debug-exit-on-error --env-system-scripts ${CMAKE_SOURCE_DIR}/release/scripts)
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
@@ -39,6 +39,8 @@ def get_arguments(filepath, output_filepath):
|
||||
"-noaudio",
|
||||
"--factory-startup",
|
||||
"--enable-autoexec",
|
||||
"--debug-memory",
|
||||
"--debug-exit-on-error",
|
||||
filepath,
|
||||
"-E", "BLENDER_WORKBENCH",
|
||||
"-P",
|
||||
|
Reference in New Issue
Block a user