[Tarantool-patches] [PATCH v2 luajit 25/26] test: enable <catch_wrap.lua> LuaJIT test
Sergey Bronnikov
sergeyb at tarantool.org
Mon Feb 5 16:32:16 MSK 2024
Hi, Sergey
thanks for the patch! LGTM
On 1/29/24 13:45, Sergey Kaplun wrote:
> This patch moves the <catch_wrap.lua> test from the <misc> to <lang>
> directory, includes it in <index>, and names subtests. Also, since the
> tests may be shuffled, `cp.wrapon()` and `cp.wrapoff()` are used for
> each test separately. Also, this patch adds a workaround for the
> internal ASAN bug, see details in the comment in the <CMakeLists.txt>.
>
> Part of tarantool/tarantool#9398
> ---
> test/LuaJIT-tests/CMakeLists.txt | 16 ++++++++++
> .../{misc => lang}/catch_wrap.lua | 29 +++++++++++++------
> test/LuaJIT-tests/lang/index | 1 +
> 3 files changed, 37 insertions(+), 9 deletions(-)
> rename test/LuaJIT-tests/{misc => lang}/catch_wrap.lua (71%)
>
> diff --git a/test/LuaJIT-tests/CMakeLists.txt b/test/LuaJIT-tests/CMakeLists.txt
> index c52bcc71..8ecfe3f6 100644
> --- a/test/LuaJIT-tests/CMakeLists.txt
> +++ b/test/LuaJIT-tests/CMakeLists.txt
> @@ -24,6 +24,22 @@ else()
> list(APPEND LUAJIT_TESTS_ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}")
> endif()
>
> +if(LUAJIT_USE_ASAN)
> + # When running LuaJIT-tests under ASAN, the internal ASAN check
> + # failed:
> + # AddressSanitizer: CHECK failed: asan_interceptors.cpp:356
> + # "((__interception::real___cxa_throw)) != (0)" (0x0, 0x0)
> + # This is a workaround suggested at
> + # https://github.com/google/sanitizers/issues/934.
> + execute_process(
> + COMMAND ${CMAKE_CXX_COMPILER} -print-file-name=libstdc++.so
> + OUTPUT_VARIABLE LIB_STDCPP
> + OUTPUT_STRIP_TRAILING_WHITESPACE
> + )
> + # Fortunately, we are not interested in macOS here.
> + list(APPEND LUAJIT_TESTS_ENV LD_PRELOAD="${LIB_STDCPP}")
> +endif()
> +
> add_custom_command(TARGET LuaJIT-tests
> COMMENT "Running LuaJIT-tests"
> COMMAND
> diff --git a/test/LuaJIT-tests/misc/catch_wrap.lua b/test/LuaJIT-tests/lang/catch_wrap.lua
> similarity index 71%
> rename from test/LuaJIT-tests/misc/catch_wrap.lua
> rename to test/LuaJIT-tests/lang/catch_wrap.lua
> index 7f656bcc..9d1e3478 100644
> --- a/test/LuaJIT-tests/misc/catch_wrap.lua
> +++ b/test/LuaJIT-tests/lang/catch_wrap.lua
> @@ -1,45 +1,56 @@
> +local cp = require("libcpptest")
>
> -local cp = require("cpptest")
> -cp.wrapon()
> +local unwind
>
> -do
> +do --- catch, no error
> + cp.wrapon()
> local a, b = pcall(cp.catch, function() return "x" end)
> assert(a == true and b == "x")
> + cp.wrapoff()
> end
>
> -do
> +do --- pcall throw
> + cp.wrapon()
> local a, b = pcall(function() cp.throw("foo") end)
> assert(a == false and b == "foo")
> + cp.wrapoff()
> end
>
> -local unwind
> -do
> +do --- catch throw
> + cp.wrapon()
> local a, b = pcall(cp.catch, function() cp.throw("foo") end)
> unwind = a
> assert((a == false and b == "foo") or (a == true and b == "catch ..."))
> + cp.wrapoff()
> end
>
> -do
> +do --- alloc, no error
> + cp.wrapon()
> local st = cp.alloc(function() return cp.isalloc() end)
> assert(st == true)
> assert(cp.isalloc() == false)
> + cp.wrapoff()
> end
>
> -do
> +do --- throw in alloc
> + cp.wrapon()
> local a, b = pcall(cp.alloc, function()
> assert(cp.isalloc() == true)
> return "foo", cp.throw
> end)
> assert(a == false and b == "foo")
> assert(cp.isalloc() == false)
> + cp.wrapoff()
> end
>
> -do
> +do --- error in alloc
> + cp.wrapon()
> local a, b = pcall(cp.alloc, function()
> assert(cp.isalloc() == true)
> return "foo", error
> end)
> assert(a == false and b == "foo")
> if unwind then assert(cp.isalloc() == false) end
> + cp.wrapoff()
> end
>
> diff --git a/test/LuaJIT-tests/lang/index b/test/LuaJIT-tests/lang/index
> index dc0c2e14..87b0c5a0 100644
> --- a/test/LuaJIT-tests/lang/index
> +++ b/test/LuaJIT-tests/lang/index
> @@ -1,6 +1,7 @@
> andor.lua
> api_call.lua
> assignment.lua
> +catch_wrap.lua
> compare.lua
> compare_nan.lua
> constant
More information about the Tarantool-patches
mailing list