Merge branch 'ab/sanitize-leak-ci' into ab/mark-leak-free-tests
* ab/sanitize-leak-ci: tests: add a test mode for SANITIZE=leak, run it in CI Makefile: add SANITIZE=leak flag to GIT-BUILD-OPTIONS
This commit is contained in:
commit
25dc57bac8
3
.github/workflows/main.yml
vendored
3
.github/workflows/main.yml
vendored
@ -232,6 +232,9 @@ jobs:
|
|||||||
- jobname: linux-gcc-default
|
- jobname: linux-gcc-default
|
||||||
cc: gcc
|
cc: gcc
|
||||||
pool: ubuntu-latest
|
pool: ubuntu-latest
|
||||||
|
- jobname: linux-leaks
|
||||||
|
cc: gcc
|
||||||
|
pool: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
CC: ${{matrix.vector.cc}}
|
CC: ${{matrix.vector.cc}}
|
||||||
jobname: ${{matrix.vector.jobname}}
|
jobname: ${{matrix.vector.jobname}}
|
||||||
|
5
Makefile
5
Makefile
@ -1214,6 +1214,9 @@ PTHREAD_CFLAGS =
|
|||||||
SPARSE_FLAGS ?=
|
SPARSE_FLAGS ?=
|
||||||
SP_EXTRA_FLAGS = -Wno-universal-initializer
|
SP_EXTRA_FLAGS = -Wno-universal-initializer
|
||||||
|
|
||||||
|
# For informing GIT-BUILD-OPTIONS of the SANITIZE=leak target
|
||||||
|
SANITIZE_LEAK =
|
||||||
|
|
||||||
# For the 'coccicheck' target; setting SPATCH_BATCH_SIZE higher will
|
# For the 'coccicheck' target; setting SPATCH_BATCH_SIZE higher will
|
||||||
# usually result in less CPU usage at the cost of higher peak memory.
|
# usually result in less CPU usage at the cost of higher peak memory.
|
||||||
# Setting it to 0 will feed all files in a single spatch invocation.
|
# Setting it to 0 will feed all files in a single spatch invocation.
|
||||||
@ -1258,6 +1261,7 @@ BASIC_CFLAGS += -DSHA1DC_FORCE_ALIGNED_ACCESS
|
|||||||
endif
|
endif
|
||||||
ifneq ($(filter leak,$(SANITIZERS)),)
|
ifneq ($(filter leak,$(SANITIZERS)),)
|
||||||
BASIC_CFLAGS += -DSUPPRESS_ANNOTATED_LEAKS
|
BASIC_CFLAGS += -DSUPPRESS_ANNOTATED_LEAKS
|
||||||
|
SANITIZE_LEAK = YesCompiledWithIt
|
||||||
endif
|
endif
|
||||||
ifneq ($(filter address,$(SANITIZERS)),)
|
ifneq ($(filter address,$(SANITIZERS)),)
|
||||||
NO_REGEX = NeededForASAN
|
NO_REGEX = NeededForASAN
|
||||||
@ -2797,6 +2801,7 @@ GIT-BUILD-OPTIONS: FORCE
|
|||||||
@echo NO_UNIX_SOCKETS=\''$(subst ','\'',$(subst ','\'',$(NO_UNIX_SOCKETS)))'\' >>$@+
|
@echo NO_UNIX_SOCKETS=\''$(subst ','\'',$(subst ','\'',$(NO_UNIX_SOCKETS)))'\' >>$@+
|
||||||
@echo PAGER_ENV=\''$(subst ','\'',$(subst ','\'',$(PAGER_ENV)))'\' >>$@+
|
@echo PAGER_ENV=\''$(subst ','\'',$(subst ','\'',$(PAGER_ENV)))'\' >>$@+
|
||||||
@echo DC_SHA1=\''$(subst ','\'',$(subst ','\'',$(DC_SHA1)))'\' >>$@+
|
@echo DC_SHA1=\''$(subst ','\'',$(subst ','\'',$(DC_SHA1)))'\' >>$@+
|
||||||
|
@echo SANITIZE_LEAK=\''$(subst ','\'',$(subst ','\'',$(SANITIZE_LEAK)))'\' >>$@+
|
||||||
@echo X=\'$(X)\' >>$@+
|
@echo X=\'$(X)\' >>$@+
|
||||||
ifdef TEST_OUTPUT_DIRECTORY
|
ifdef TEST_OUTPUT_DIRECTORY
|
||||||
@echo TEST_OUTPUT_DIRECTORY=\''$(subst ','\'',$(subst ','\'',$(TEST_OUTPUT_DIRECTORY)))'\' >>$@+
|
@echo TEST_OUTPUT_DIRECTORY=\''$(subst ','\'',$(subst ','\'',$(TEST_OUTPUT_DIRECTORY)))'\' >>$@+
|
||||||
|
@ -12,7 +12,7 @@ UBUNTU_COMMON_PKGS="make libssl-dev libcurl4-openssl-dev libexpat-dev
|
|||||||
libemail-valid-perl libio-socket-ssl-perl libnet-smtp-ssl-perl"
|
libemail-valid-perl libio-socket-ssl-perl libnet-smtp-ssl-perl"
|
||||||
|
|
||||||
case "$jobname" in
|
case "$jobname" in
|
||||||
linux-clang|linux-gcc)
|
linux-clang|linux-gcc|linux-leaks)
|
||||||
sudo apt-add-repository -y "ppa:ubuntu-toolchain-r/test"
|
sudo apt-add-repository -y "ppa:ubuntu-toolchain-r/test"
|
||||||
sudo apt-get -q update
|
sudo apt-get -q update
|
||||||
sudo apt-get -q -y install language-pack-is libsvn-perl apache2 \
|
sudo apt-get -q -y install language-pack-is libsvn-perl apache2 \
|
||||||
|
@ -183,7 +183,7 @@ export GIT_TEST_CLONE_2GB=true
|
|||||||
export SKIP_DASHED_BUILT_INS=YesPlease
|
export SKIP_DASHED_BUILT_INS=YesPlease
|
||||||
|
|
||||||
case "$jobname" in
|
case "$jobname" in
|
||||||
linux-clang|linux-gcc)
|
linux-clang|linux-gcc|linux-leaks)
|
||||||
if [ "$jobname" = linux-gcc ]
|
if [ "$jobname" = linux-gcc ]
|
||||||
then
|
then
|
||||||
export CC=gcc-8
|
export CC=gcc-8
|
||||||
@ -233,4 +233,11 @@ linux-musl)
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
case "$jobname" in
|
||||||
|
linux-leaks)
|
||||||
|
export SANITIZE=leak
|
||||||
|
export GIT_TEST_PASSING_SANITIZE_LEAK=true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
MAKEFLAGS="$MAKEFLAGS CC=${CC:-cc}"
|
MAKEFLAGS="$MAKEFLAGS CC=${CC:-cc}"
|
||||||
|
7
t/README
7
t/README
@ -366,6 +366,13 @@ excluded as so much relies on it, but this might change in the future.
|
|||||||
GIT_TEST_SPLIT_INDEX=<boolean> forces split-index mode on the whole
|
GIT_TEST_SPLIT_INDEX=<boolean> forces split-index mode on the whole
|
||||||
test suite. Accept any boolean values that are accepted by git-config.
|
test suite. Accept any boolean values that are accepted by git-config.
|
||||||
|
|
||||||
|
GIT_TEST_PASSING_SANITIZE_LEAK=<boolean> when compiled with
|
||||||
|
SANITIZE=leak will run only those tests that have whitelisted
|
||||||
|
themselves as passing with no memory leaks. Tests can be whitelisted
|
||||||
|
by setting "TEST_PASSES_SANITIZE_LEAK=true" before sourcing
|
||||||
|
"test-lib.sh" itself at the top of the test script. This test mode is
|
||||||
|
used by the "linux-leaks" CI target.
|
||||||
|
|
||||||
GIT_TEST_PROTOCOL_VERSION=<n>, when set, makes 'protocol.version'
|
GIT_TEST_PROTOCOL_VERSION=<n>, when set, makes 'protocol.version'
|
||||||
default to n.
|
default to n.
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
test_description='detect unwritable repository and fail correctly'
|
test_description='detect unwritable repository and fail correctly'
|
||||||
|
|
||||||
|
TEST_PASSES_SANITIZE_LEAK=true
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
test_expect_success setup '
|
test_expect_success setup '
|
||||||
@ -21,7 +22,7 @@ test_expect_success POSIXPERM,SANITY 'write-tree should notice unwritable reposi
|
|||||||
test_must_fail git write-tree
|
test_must_fail git write-tree
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success POSIXPERM,SANITY 'commit should notice unwritable repository' '
|
test_expect_success POSIXPERM,SANITY,!SANITIZE_LEAK 'commit should notice unwritable repository' '
|
||||||
test_when_finished "chmod 775 .git/objects .git/objects/??" &&
|
test_when_finished "chmod 775 .git/objects .git/objects/??" &&
|
||||||
chmod a-w .git/objects .git/objects/?? &&
|
chmod a-w .git/objects .git/objects/?? &&
|
||||||
test_must_fail git commit -m second
|
test_must_fail git commit -m second
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
test_description='test hashmap and string hash functions'
|
test_description='test hashmap and string hash functions'
|
||||||
|
|
||||||
|
TEST_PASSES_SANITIZE_LEAK=true
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
test_hashmap() {
|
test_hashmap() {
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
test_description='test oidmap'
|
test_description='test oidmap'
|
||||||
|
|
||||||
|
TEST_PASSES_SANITIZE_LEAK=true
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
# This purposefully is very similar to t0011-hashmap.sh
|
# This purposefully is very similar to t0011-hashmap.sh
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
test_description='test env--helper'
|
test_description='test env--helper'
|
||||||
|
|
||||||
|
TEST_PASSES_SANITIZE_LEAK=true
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
test_description='Test advise_if_enabled functionality'
|
test_description='Test advise_if_enabled functionality'
|
||||||
|
|
||||||
|
TEST_PASSES_SANITIZE_LEAK=true
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
test_expect_success 'advice should be printed when config variable is unset' '
|
test_expect_success 'advice should be printed when config variable is unset' '
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
test_description='git stripspace'
|
test_description='git stripspace'
|
||||||
|
|
||||||
|
TEST_PASSES_SANITIZE_LEAK=true
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
t40='A quick brown fox jumps over the lazy do'
|
t40='A quick brown fox jumps over the lazy do'
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
test_description='Test string list functionality'
|
test_description='Test string list functionality'
|
||||||
|
|
||||||
|
TEST_PASSES_SANITIZE_LEAK=true
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
test_split () {
|
test_split () {
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
test_description='git bugreport'
|
test_description='git bugreport'
|
||||||
|
|
||||||
|
TEST_PASSES_SANITIZE_LEAK=true
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
# Headers "[System Info]" will be followed by a non-empty line if we put some
|
# Headers "[System Info]" will be followed by a non-empty line if we put some
|
||||||
|
@ -1381,6 +1381,26 @@ then
|
|||||||
test_done
|
test_done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# skip non-whitelisted tests when compiled with SANITIZE=leak
|
||||||
|
if test -n "$SANITIZE_LEAK"
|
||||||
|
then
|
||||||
|
if test_bool_env GIT_TEST_PASSING_SANITIZE_LEAK false
|
||||||
|
then
|
||||||
|
# We need to see it in "git env--helper" (via
|
||||||
|
# test_bool_env)
|
||||||
|
export TEST_PASSES_SANITIZE_LEAK
|
||||||
|
|
||||||
|
if ! test_bool_env TEST_PASSES_SANITIZE_LEAK false
|
||||||
|
then
|
||||||
|
skip_all="skipping $this_test under GIT_TEST_PASSING_SANITIZE_LEAK=true"
|
||||||
|
test_done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
elif test_bool_env GIT_TEST_PASSING_SANITIZE_LEAK false
|
||||||
|
then
|
||||||
|
error "GIT_TEST_PASSING_SANITIZE_LEAK=true has no effect except when compiled with SANITIZE=leak"
|
||||||
|
fi
|
||||||
|
|
||||||
# Last-minute variable setup
|
# Last-minute variable setup
|
||||||
USER_HOME="$HOME"
|
USER_HOME="$HOME"
|
||||||
HOME="$TRASH_DIRECTORY"
|
HOME="$TRASH_DIRECTORY"
|
||||||
@ -1534,6 +1554,7 @@ test -z "$NO_PYTHON" && test_set_prereq PYTHON
|
|||||||
test -n "$USE_LIBPCRE2" && test_set_prereq PCRE
|
test -n "$USE_LIBPCRE2" && test_set_prereq PCRE
|
||||||
test -n "$USE_LIBPCRE2" && test_set_prereq LIBPCRE2
|
test -n "$USE_LIBPCRE2" && test_set_prereq LIBPCRE2
|
||||||
test -z "$NO_GETTEXT" && test_set_prereq GETTEXT
|
test -z "$NO_GETTEXT" && test_set_prereq GETTEXT
|
||||||
|
test -n "$SANITIZE_LEAK" && test_set_prereq SANITIZE_LEAK
|
||||||
|
|
||||||
if test -z "$GIT_TEST_CHECK_CACHE_TREE"
|
if test -z "$GIT_TEST_CHECK_CACHE_TREE"
|
||||||
then
|
then
|
||||||
|
Loading…
x
Reference in New Issue
Block a user