Skip to content

Commit

Permalink
cmake: run tests with Valgrind
Browse files Browse the repository at this point in the history
This patch enables running tests with Valgrind. Custom Valgrind testing
options can be configured by setting the `VALGRIND_OPTIONS` variable.
Please note that this environment variable must be set before building,
and any updates to it will require a project rebuild. By default, the
suppression file is set to `src/lj.supp`.

Also this patch disables the following tests when running with Valgrind
due to failures:

For SIGPROF:
  - test/tarantool-tests/gh-7264-add-proto-trace-sysprof-default.test.lua
  - test/tarantool-tests/lj-512-profiler-hook-finalizers.test.lua
  - test/tarantool-tests/lj-726-profile-flush-close.test.lua
  - test/tarantool-tests/misclib-sysprof-lapi.test.lua

For TIMEOUT:
  - test/tarantool-tests/gh-7745-oom-on-trace.test.lua
  - test/tarantool-tests/lj-1034-tabov-error-frame.test.lua
  • Loading branch information
mandesero committed Sep 18, 2024
1 parent d9e19ae commit d40aacd
Show file tree
Hide file tree
Showing 9 changed files with 33 additions and 3 deletions.
5 changes: 5 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,11 @@ endif()
# ASan enabled.
option(LUAJIT_USE_ASAN "Build LuaJIT with AddressSanitizer" OFF)
if(LUAJIT_USE_ASAN)
if(LUAJIT_USE_VALGRIND)
message(FATAL_ERROR
"AddressSanitizer and Valgrind cannot be used simultaneously."
)
endif()
if(NOT LUAJIT_USE_SYSMALLOC)
message(WARNING
"Unfortunately, internal LuaJIT memory allocator is not instrumented yet,"
Expand Down
16 changes: 16 additions & 0 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,22 @@ add_custom_target(${PROJECT_NAME}-lint DEPENDS
)

set(LUAJIT_TEST_COMMAND "${LUAJIT_TEST_BINARY} -e dofile[[${LUAJIT_TEST_INIT}]]")

if(LUAJIT_USE_VALGRIND)
if (NOT LUAJIT_USE_SYSMALLOC)
message(WARNING
"LUAJIT_USE_SYSMALLOC option is mandatory for Valgrind's memcheck tool"
" on x64 and the only way to get useful results from it for all other"
" architectures.")
endif()

find_program(VALGRIND valgrind)
set(LUAJIT_TEST_VALGRIND_OPTS
"--suppressions=${LUAJIT_SOURCE_DIR}/lj.supp $ENV{VALGRIND_OPTIONS}")
set(LUAJIT_TEST_COMMAND
"${VALGRIND} ${LUAJIT_TEST_VALGRIND_OPTS} ${LUAJIT_TEST_COMMAND}")
endif()

separate_arguments(LUAJIT_TEST_COMMAND)

set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
Expand Down
3 changes: 2 additions & 1 deletion test/tarantool-tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,8 @@ foreach(test_path ${tests})
# LUA_CPATH and LD_LIBRARY_PATH variables and also
# dependencies list with libraries are set in scope of
# BuildTestLib macro.
ENVIRONMENT "LUA_PATH=${LUA_PATH};LUA_CPATH=${LUA_CPATH};${LUA_TEST_ENV_MORE}"
ENVIRONMENT "LUA_PATH=${LUA_PATH};LUA_CPATH=${LUA_CPATH};${LUA_TEST_ENV_MORE};\
LJ_USE_VALGRIND=${LUAJIT_USE_VALGRIND}"
LABELS ${TEST_SUITE_NAME}
DEPENDS tarantool-tests-deps
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ local test = tap.test('gh-7264-add-proto-trace-sysprof-default'):skipcond({
['Sysprof is implemented for x86_64 only'] = jit.arch ~= 'x86' and
jit.arch ~= 'x64',
['Sysprof is implemented for Linux only'] = jit.os ~= 'Linux',
['Disabled with Valgrind (SIGPROF)'] = os.getenv("LJ_USE_VALGRIND") == 'ON',
})

test:plan(2)
Expand Down
1 change: 1 addition & 0 deletions test/tarantool-tests/gh-7745-oom-on-trace.test.lua
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ local test = tap.test('OOM on trace'):skipcond({
(jit.os == 'OSX'),
['Disabled on MacOS due to #8652'] = jit.os == 'OSX',
['Test requires JIT enabled'] = not jit.status(),
['Disabled with Valgrind (Timeout)'] = os.getenv("LJ_USE_VALGRIND") == 'ON',
})

test:plan(1)
Expand Down
1 change: 1 addition & 0 deletions test/tarantool-tests/lj-1034-tabov-error-frame.test.lua
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ local test = tap.test('lj-1034-tabov-error-frame'):skipcond({
['Test requires JIT enabled'] = not jit.status(),
['Test requires GC64 mode enabled'] = not ffi.abi('gc64'),
['Disabled on MacOS due to #8652'] = jit.os == 'OSX',
['Disabled with Valgrind (Timeout)'] = os.getenv("LJ_USE_VALGRIND") == 'ON',
})

-- XXX: The test for the problem uses the table of GC
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
local tap = require('tap')
local profile = require('jit.profile')

local test = tap.test('lj-512-profiler-hook-finalizers')
local test = tap.test('lj-512-profiler-hook-finalizers'):skipcond({
['Disabled with Valgrind (SIGPROF)'] = os.getenv("LJ_USE_VALGRIND") == 'ON',
})
test:plan(1)

-- Sampling interval in ms.
Expand Down
4 changes: 3 additions & 1 deletion test/tarantool-tests/lj-726-profile-flush-close.test.lua
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
local tap = require('tap')

local test = tap.test('lj-726-profile-flush-close')
local test = tap.test('lj-726-profile-flush-close'):skipcond({
['Disabled with Valgrind (SIGPROF)'] = os.getenv("LJ_USE_VALGRIND") == 'ON',
})
test:plan(1)

local TEST_FILE = 'lj-726-profile-flush-close.profile'
Expand Down
1 change: 1 addition & 0 deletions test/tarantool-tests/misclib-sysprof-lapi.test.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ local test = tap.test("misc-sysprof-lapi"):skipcond({
["Sysprof is implemented for x86_64 only"] = jit.arch ~= "x86" and
jit.arch ~= "x64",
["Sysprof is implemented for Linux only"] = jit.os ~= "Linux",
['Disabled with Valgrind (SIGPROF)'] = os.getenv("LJ_USE_VALGRIND") == 'ON',
})

test:plan(19)
Expand Down

0 comments on commit d40aacd

Please sign in to comment.