Tarantool development patches archive
 help / color / mirror / Atom feed
From: "Alexander V. Tikhonov" <avtikhon@tarantool.org>
To: Igor Munkin <imun@tarantool.org>,
	Alexander Turenko <alexander.turenko@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
Subject: [Tarantool-patches] [PATCH v2 2/2] gitlab-ci: add memory leaks detection via LSAN
Date: Mon, 20 Jan 2020 13:50:13 +0300	[thread overview]
Message-ID: <5389982521711291bcf39b477e6a348b965971b9.1579509793.git.avtikhon@tarantool.org> (raw)
In-Reply-To: <cover.1579509793.git.avtikhon@tarantool.org>
In-Reply-To: <cover.1579509793.git.avtikhon@tarantool.org>

The change enables memory leaks detection to existing ASAN testing
routine and introduces suppression files with the corresponding
exception list:
 * address sanitizer for compile-time: asan/asan.supp
 * memory leak sanitizer for run-time: asan/lsan.supp

Furthermore, added engine and replication suites for ASAN testing
routine.

Additionally to the tests blacklisted within #4359,
'box/on_shutdown.test.lua' is also disabled since it fails the
introduced leak check. All blacklisted tests have to be enabled
within #4360.

Close #2058
---
 .travis.mk                    |  17 ++++--
 asan/asan.supp                |  17 ++++++
 asan/lsan.supp                | 105 ++++++++++++++++++++++++++++++++++
 cmake/profile.cmake           |   4 +-
 test/box/on_shutdown.skipcond |   7 +++
 5 files changed, 142 insertions(+), 8 deletions(-)
 create mode 100644 asan/asan.supp
 create mode 100644 asan/lsan.supp
 create mode 100644 test/box/on_shutdown.skipcond

diff --git a/.travis.mk b/.travis.mk
index 42969ff56..efbc00ba1 100644
--- a/.travis.mk
+++ b/.travis.mk
@@ -111,15 +111,20 @@ 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:
+	#  - To exclude tests from ASAN checks the asan/asan.supp file
+	#    was set at the build time in cmake/profile.cmake file.
+	#  - To exclude tests from LSAN checks the asan/lsan.supp file
+	#    was set in environment options to be used at run time.
+	cd test && ASAN=ON \
+		LSAN_OPTIONS=suppressions=${PWD}/asan/lsan.supp \
+		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
 
diff --git a/asan/asan.supp b/asan/asan.supp
new file mode 100644
index 000000000..2a20114f4
--- /dev/null
+++ b/asan/asan.supp
@@ -0,0 +1,17 @@
+# File format:
+#fun:*
+#src:*
+
+# !test: app-tap/json.test.lua
+# source: third_party/lua-cjson/lua_cjson.c
+fun:json_decode
+
+# 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
diff --git a/asan/lsan.supp b/asan/lsan.supp
new file mode 100644
index 000000000..a1237fb86
--- /dev/null
+++ b/asan/lsan.supp
@@ -0,0 +1,105 @@
+# File format:
+#leak:*
+
+# test: app/crypto.test.lua
+# source: /usr/lib/x86_64-linux-gnu/libcrypto.so
+leak:CRYPTO_zalloc
+
+# 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
diff --git a/cmake/profile.cmake b/cmake/profile.cmake
index 0ba31fa2c..bc4bf67f5 100644
--- a/cmake/profile.cmake
+++ b/cmake/profile.cmake
@@ -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/asan.supp")
     check_c_source_compiles("int main(void) {
         #include <sanitizer/asan_interface.h>
         void *x;
@@ -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/asan.supp)
 endif()
diff --git a/test/box/on_shutdown.skipcond b/test/box/on_shutdown.skipcond
new file mode 100644
index 000000000..e46fd1088
--- /dev/null
+++ b/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:
-- 
2.17.1

  parent reply	other threads:[~2020-01-20 10:50 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-20 10:50 [Tarantool-patches] [PATCH v2 0/2] " Alexander V. Tikhonov
2020-01-20 10:50 ` [Tarantool-patches] [PATCH v2 1/2] test: use default replication connection timeout Alexander V. Tikhonov
2020-03-27 14:07   ` Sergey Bronnikov
2020-01-20 10:50 ` Alexander V. Tikhonov [this message]
2020-03-27 14:06   ` [Tarantool-patches] [PATCH v2 2/2] gitlab-ci: add memory leaks detection via LSAN Sergey Bronnikov
2020-03-30  7:53     ` Alexander Tikhonov
2020-03-30  8:09       ` Sergey Bronnikov
2020-04-01 11:04         ` Alexander Tikhonov
2020-01-21 14:25 ` [Tarantool-patches] [PATCH v2 0/2] " Igor Munkin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5389982521711291bcf39b477e6a348b965971b9.1579509793.git.avtikhon@tarantool.org \
    --to=avtikhon@tarantool.org \
    --cc=alexander.turenko@tarantool.org \
    --cc=imun@tarantool.org \
    --cc=tarantool-patches@dev.tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH v2 2/2] gitlab-ci: add memory leaks detection via LSAN' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox