Skip to content

Commit

Permalink
gitlab-ci: ASAN testing memory leaks add
Browse files Browse the repository at this point in the history
Added memory leaks detection to ASAN testing. Added files for exceptions:
 - address sanitizer on compilation:  asan/ignore_asan.txt
 - memory leak sanitizer on run-time: asan/ignore_lsan.txt
Cmake updated with asan/ignore_asan.txt file added and test run rules
changed with asan/ignore_lsan.txt file. Added 'engine' and replication'
suites into the testing and blocked 'box/on_shutdown.test.lua' test
that breaks the testing, all of excepted tests will be enabled durring
issue #4360.

Close #2058

(cherry picked from commit bdc6ae5)
  • Loading branch information
avtikhon committed Nov 21, 2019
1 parent 2ce0288 commit eac137d
Show file tree
Hide file tree
Showing 5 changed files with 146 additions and 8 deletions.
13 changes: 7 additions & 6 deletions .travis.mk
Expand Up @@ -107,15 +107,16 @@ coverage_debian: deps_debian test_coverage_debian_no_deps
# ASAN

build_asan_debian:
CC=clang-8 CXX=clang++-8 cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_WERROR=ON ${CMAKE_EXTRA_PARAMS}
CC=clang-8 CXX=clang++-8 cmake . -DENABLE_ASAN=ON ${CMAKE_EXTRA_PARAMS}
CC=clang-8 CXX=clang++-8 cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_WERROR=ON -DENABLE_ASAN=ON ${CMAKE_EXTRA_PARAMS}
make -j

test_asan_debian_no_deps: build_asan_debian
# temporary excluded engine/ and replication/ suites with some tests from other suites by issue #4360
cd test && ASAN=ON ASAN_OPTIONS=detect_leaks=0 ./test-run.py --force $(TEST_RUN_EXTRA_PARAMS) \
app/ app-tap/ box/ box-py/ box-tap/ engine_long/ long_run-py/ luajit-tap/ \
replication-py/ small/ sql/ sql-tap/ swim/ unit/ vinyl/ wal_off/ xlog/ xlog-py/
# temporary excluded some tests by issue #4360
# ASAN environment flag shows the excluded tests to skip the testing
cd test && ASAN=ON \
LSAN_OPTIONS=suppressions=${PWD}/asan/ignore_lsan.txt \
ASAN_OPTIONS=heap_profile=0:unmap_shadow_on_exit=1:detect_invalid_pointer_pairs=1:symbolize=1:detect_leaks=1:dump_instruction_bytes=1:print_suppressions=0 \
./test-run.py --force $(TEST_RUN_EXTRA_PARAMS)

test_asan_debian: deps_debian deps_buster_clang_8 test_asan_debian_no_deps

Expand Down
21 changes: 21 additions & 0 deletions asan/ignore_asan.txt
@@ -0,0 +1,21 @@
# File format:
#fun:*
#src:*

# !test: app-tap/json.test.lua
# source: third_party/lua-cjson/lua_cjson.c
fun:json_decode

# test: engine/replica_join.test.lua
# source: src/box/memtx_engine.c
fun:memtx_tuple_delete

# test: unit/base64.test.lua
# source: third_party/base64.c
fun:base64_decode_block
# source: test/unit/base64.c
fun:base64_test

# !test: unit/msgpack.test
# source: src/lib/msgpuck/test/msgpuck.c
fun:test_mp_print
109 changes: 109 additions & 0 deletions asan/ignore_lsan.txt
@@ -0,0 +1,109 @@
# File format:
#leak:*

# test: app/crypto.test.lua
# source: /usr/lib/x86_64-linux-gnu/libcrypto.so
leak:CRYPTO_zalloc

# test: app/fiber_cond.test.lua
# source: /usr/lib/x86_64-linux-gnu/libcrypto.so
leak:EVP_MD_CTX_copy_ex

# test: app-tap/http_client.test.lua
# source: src/tarantool
leak:Curl_setstropt
leak:create_conn
leak:Curl_conncache_add_conn
leak:alloc_addbyter
leak:Curl_getaddrinfo_ex
leak:Curl_cache_addr
leak:Curl_hash_init
leak:Curl_hash_add
leak:Curl_he2ai
leak:Curl_open
leak:Curl_resolver_init

# test: app-tap/iconv.test.lua
# source: /usr/lib/x86_64-linux-gnu/gconv/UTF-16.so
leak:gconv_init

# test: box*/
# source: third_party/luajit
leak:lj_BC_FUNCC

# test: box/access.test.lua
# test: box/access_bin.test.lua
# test: box/access_misc.test.lua
# source: src/box/error.cc
leak:AccessDeniedError::AccessDeniedError

# test: box/bitset.test.lua
# source: src/lib/bitset/iterator.c
leak:tt_bitset_iterator_init

# test: box-py/args.test.py
# source: /lib/x86_64-linux-gnu/libc.so*
leak:libc.so*

# test: box-tap/schema-mt.test.lua
# source: src/lib/core/coio_task.c
leak:coio_on_start
# source: src/lib/salad/mhash.h
leak:mh_i32ptr_new

# test: replication/misc.test.lua
# source: src/box/vy_log.c
leak:vy_recovery_new_f
# source: src/lib/salad/mhash.h
leak:mh_i64ptr_new

# test: sql-tap/gh2250-trigger-chain-limit.test.lua
# source: src/lib/core/exception.cc
leak:Exception::operator new

# test: sql-tap/trigger9.test.lua
# source: src/lib/core/fiber.c
leak:cord_start

# test: sql-tap/tkt-7bbfb7d442.test.lua
# test: sql-tap/view.test.lua
# test: sql-tap/with1.test.lua
# test: sql-tap/with2.test.lua
# source: src/box/sql/malloc.c
leak:sql_sized_malloc

# test: swim/errinj.test.lua
# test: swim/swim.test.lua
# source: src/lib/swim/swim.c
leak:swim_member_new
leak:swim_update_member_payload

# !test: unit/bps_tree.test.lua
# source: src/lib/salad/bps_tree.h
leak:bps_tree_test_create_leaf
leak:bps_tree_test_process_insert_leaf

# !test: unit/heap.test.lua
# source: test/unit/heap.c
leak:test_random_delete_workload
leak:test_delete_last_node

# !test: unit/heap_iterator.test.lua
# source: src/lib/salad/heap.h
leak:test_heap_reserve

# !test: unit/swim.test.lua
# source: src/lib/swim/swim_io.c
leak:swim_scheduler_set_codec

# test: vinyl/errinj.test.lua
# source: src/lib/core/fiber.h
leak:fiber_cxx_invoke

# test: vinyl/errinj_ddl.test.lua
# source: src/box/vy_stmt.c
leak:vy_stmt_alloc

# test: vinyl/recover.test.lua
# source: src/lib/core/fiber.c
leak:cord_costart_thread_func
4 changes: 2 additions & 2 deletions cmake/profile.cmake
Expand Up @@ -53,7 +53,7 @@ if (ENABLE_ASAN)
"\n")
endif()

set(CMAKE_REQUIRED_FLAGS "-fsanitize=address")
set(CMAKE_REQUIRED_FLAGS "-fsanitize=address -fsanitize-blacklist=${CMAKE_SOURCE_DIR}/asan/ignore_asan.txt")
check_c_source_compiles("int main(void) {
#include <sanitizer/asan_interface.h>
void *x;
Expand All @@ -76,5 +76,5 @@ if (ENABLE_ASAN)
message(FATAL_ERROR "Cannot enable AddressSanitizer")
endif()

add_compile_flags("C;CXX" -fsanitize=address)
add_compile_flags("C;CXX" -fsanitize=address -fsanitize-blacklist=${CMAKE_SOURCE_DIR}/asan/ignore_asan.txt)
endif()
7 changes: 7 additions & 0 deletions test/box/on_shutdown.skipcond
@@ -0,0 +1,7 @@
import os

# Disabled at ASAN build due to issue #4360.
if os.getenv("ASAN") == 'ON':
self.skip = 1

# vim: set ft=python:

0 comments on commit eac137d

Please sign in to comment.