Skip to content

Commit ff182aa

Browse files
committed
cmake: integrate Lua API tests
Build Tarantool: ``` CFLAGS="-fsanitize=fuzzer-no-link" LDFLAGS="-fsanitize=fuzzer-no-link" CC=clang CXX=clang++ cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DENABLE_FUZZER=ON -DLUAJIT_NUMMODE=2 ``` Build luzer: ``` git clone https://github.com/ligurio/luzer CC=clang-21 CXX=clang++-21 cmake -S . -B build cmake --build build/ --parallel ``` Run test: ``` LUA_CPATH='./luzer/build/luzer/?.so;;' LUA_PATH='./luzer/?/init.lua;;' ./src/tarantool ./test/fuzz/lua-tests/src/tests/lapi/bitop_bxor_test.lua LSAN_OPTIONS=suppressions=$(pwd)/asan/lsan.supp ASAN_OPTIONS=heap_profile=0:unmap_shadow_on_exit=1:print_suppressions=0 tarantool tarantool_csv.lua ``` Follows up commit 8ad443d ("cmake: introduce a module to build fuzzing tests"). TODO: - integrate with LSAN_OPTIONS and ASAN_OPTIONS 1. ligurio/lua-c-api-tests#121 NO_CHANGELOG=internal NO_DOC=internal NO_TEST=internal
1 parent cd82d64 commit ff182aa

File tree

1 file changed

+83
-6
lines changed

1 file changed

+83
-6
lines changed

cmake/BuildLuaTests.cmake

Lines changed: 83 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ set(LUA_TESTS_PREFIX
77
# The test `luaL_loadbuffer_proto_test` is not enabled, because
88
# it is quite similar to `luaL_loadbuffer_fuzzer` located in
99
# test/fuzz/luaL_loadbuffer/.
10-
string(JOIN ";" LUA_TESTS
10+
string(JOIN ";" CAPI_TESTS
1111
ffi_cdef_proto_test
1212
lua_dump_test
1313
luaL_gsub_test
@@ -17,6 +17,21 @@ string(JOIN ";" LUA_TESTS
1717
torture_test
1818
)
1919

20+
string(JOIN ";" LAPI_TESTS
21+
bitop_arshift_test
22+
bitop_band_test
23+
bitop_bnot_test
24+
bitop_bor_test
25+
bitop_bswap_test
26+
bitop_bxor_test
27+
bitop_lshift_test
28+
bitop_rol_test
29+
bitop_ror_test
30+
bitop_rshift_test
31+
bitop_tobit_test
32+
bitop_tohex_test
33+
)
34+
2035
list(APPEND LUA_TESTS_CMAKE_FLAGS
2136
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
2237
"-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}"
@@ -31,6 +46,7 @@ list(APPEND LUA_TESTS_CMAKE_FLAGS
3146
"-DLUA_LIBRARIES=${LUAJIT_LIBRARIES}"
3247
"-DLUA_EXECUTABLE=${LUAJIT_TEST_BINARY}"
3348
"-DLUA_VERSION_STRING=\"tarantool\""
49+
"-DENABLE_LAPI_TESTS=ON"
3450
)
3551

3652
if (ENABLE_ASAN)
@@ -43,7 +59,9 @@ endif()
4359

4460
include(ExternalProject)
4561

46-
set(GIT_REF "68e62715310f197f489f03a33dce501c0a2e4450")
62+
# FIXME: Update Git reference after merging
63+
# https://github.com/ligurio/lua-c-api-tests/pull/121.
64+
set(GIT_REF "ligurio/gh-xxxx-lapi-bitop")
4765
# Git reference can be overridden with environment variable. It is
4866
# needed for checking build by project itself.
4967
if (DEFINED ENV{LUA_TESTS_GIT_REF})
@@ -64,10 +82,10 @@ ExternalProject_Add(${LUA_TESTS_TARGET_NAME}
6482
-B <BINARY_DIR>
6583
-G ${CMAKE_GENERATOR}
6684
"${LUA_TESTS_CMAKE_FLAGS}"
67-
BUILD_COMMAND cd <BINARY_DIR> && ${CMAKE_MAKE_PROGRAM} "${LUA_TESTS}"
85+
BUILD_COMMAND cd <BINARY_DIR> && ${CMAKE_MAKE_PROGRAM} "${CAPI_TESTS}"
6886
INSTALL_COMMAND ""
6987
CMAKE_GENERATOR ${CMAKE_GENERATOR}
70-
BUILD_BYPRODUCTS "${LUA_TESTS}"
88+
BUILD_BYPRODUCTS "${CAPI_TESTS}"
7189
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
7290
)
7391

@@ -81,7 +99,7 @@ add_dependencies(${LUA_TESTS_TARGET_NAME} libluajit_static)
8199
# environment variable `RUNS`.
82100
#
83101
# 1. https://github.com/ligurio/lua-c-api-tests/blob/ef74f0558bb913edef85e7a774fada4ecc82247b/tests/capi/CMakeLists.txt#L46-L58
84-
foreach(test ${LUA_TESTS})
102+
foreach(test ${CAPI_TESTS})
85103
set(test_title test/fuzz/${test})
86104
add_test(NAME ${test_title}
87105
COMMAND ${CMAKE_CTEST_COMMAND}
@@ -96,8 +114,67 @@ foreach(test ${LUA_TESTS})
96114
)
97115
endforeach()
98116

117+
set(DEFAULT_RUNS_NUMBER 5)
118+
119+
string(JOIN " " LIBFUZZER_OPTS
120+
-print_final_stats=1
121+
-print_pcs=1
122+
-reduce_inputs=1
123+
-reload=1
124+
-report_slow_units=5
125+
# Shell parameter expansion,
126+
# https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
127+
-runs=\${RUNS:-${DEFAULT_RUNS_NUMBER}}
128+
)
129+
130+
make_lua_path(LUA_CPATH
131+
PATHS
132+
${PROJECT_BINARY_DIR}/luzer/build/luzer/?.so
133+
)
134+
135+
make_lua_path(LUA_PATH
136+
PATHS
137+
${PROJECT_BINARY_DIR}/luzer/?/init.lua
138+
${CMAKE_CURRENT_SOURCE_DIR}/?.lua
139+
)
140+
141+
function(create_lapi_test)
142+
cmake_parse_arguments(
143+
FUZZ
144+
""
145+
"FILENAME"
146+
""
147+
${ARGN}
148+
)
149+
get_filename_component(test_name ${FUZZ_FILENAME} NAME_WE)
150+
string(REPLACE "_test" "" test_prefix ${test_name})
151+
set(dict_path ${PROJECT_SOURCE_DIR}/corpus/${test_prefix}.dict)
152+
set(corpus_path ${PROJECT_SOURCE_DIR}/corpus/${test_prefix})
153+
if (EXISTS ${dict_path})
154+
set(LIBFUZZER_OPTS "${LIBFUZZER_OPTS} -dict=${dict_path}")
155+
endif ()
156+
if (EXISTS ${corpus_path})
157+
set(LIBFUZZER_OPTS "${LIBFUZZER_OPTS} ${corpus_path}")
158+
endif ()
159+
160+
add_test(NAME ${test_name}
161+
COMMAND ${BASH} -c "${LUAJIT_TEST_BINARY} ${FUZZ_FILENAME} ${LIBFUZZER_OPTS}"
162+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
163+
)
164+
set_tests_properties(${test_name} PROPERTIES
165+
LABELS "lapi"
166+
ENVIRONMENT "LUA_PATH=${LUA_PATH};LUA_CPATH=${LUA_CPATH};ASAN_OPTIONS=detect_odr_violation=0"
167+
DEPENDS ${LUAJIT_TEST_BINARY}
168+
)
169+
endfunction()
170+
171+
foreach(filename ${LAPI_TESTS})
172+
create_lapi_test(FILENAME ${LUA_TESTS_PREFIX}/src/tests/lapi/${filename}.lua)
173+
endforeach()
174+
99175
unset(GIT_REF)
100-
unset(LUA_TESTS)
176+
unset(CAPI_TESTS)
177+
unset(LAPI_TESTS)
101178
unset(LUA_TESTS_CMAKE_FLAGS)
102179
unset(LUA_TESTS_PREFIX)
103180
unset(LUA_TESTS_TARGET_NAME)

0 commit comments

Comments
 (0)