Add support for running the tests via valgrind

Add some makefile targets, which use valgrind's memcheck tool to
run the tests, in order to help diagnose memory problems in the
library.

In addition, we enable the '--leak-check' option to report on any
memory leaks. However, unlike the other memory problems reported
by memcheck, memory leak reports do not result in an error exit
from valgrind. (So memory leaks are reported on stderr, but don't
halt the test run.)

A suppressions file (tests.supp) is included since libz triggers
some false positives.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
This commit is contained in:
Ramsay Jones 2009-08-27 16:11:07 +01:00
parent 04e8824004
commit cac5d927b5
3 changed files with 26 additions and 2 deletions

View File

@ -44,6 +44,7 @@ TEST_OBJ = $(patsubst %.c,%.o,\
$(wildcard tests/t[0-9][0-9][0-9][0-9]-*.c))
TEST_EXE = $(patsubst %.o,%.exe,$(TEST_OBJ))
TEST_RUN = $(patsubst %.exe,%.run,$(TEST_EXE))
TEST_VAL = $(patsubst %.exe,%.val,$(TEST_EXE))
ifndef NO_OPENSSL
SHA1_HEADER = <openssl/sha.h>
@ -82,6 +83,9 @@ apidocs:
test: $(GIT_LIB)
@$(MAKE) -C tests --no-print-directory test
valgrind: $(GIT_LIB)
@$(MAKE) -C tests --no-print-directory valgrind
sparse:
cgcc -no-compile $(ALL_CFLAGS) $(SPARSE_FLAGS) $(SRC_C)
@ -116,7 +120,7 @@ $(GIT_LIB): $(OBJS)
$(AR) $(GIT_LIB) $(OBJS)
$(RANLIB) $(GIT_LIB)
$(TEST_OBJ) $(TEST_EXE) $(TEST_RUN):
$(TEST_OBJ) $(TEST_EXE) $(TEST_RUN) $(TEST_VAL):
@$(MAKE) -C tests --no-print-directory \
OS=$(OS) NO_OPENSSL=$(NO_OPENSSL) $(@F)
@ -125,7 +129,7 @@ libgit2.pc: libgit2.pc.in
.PHONY: all
.PHONY: clean
.PHONY: test $(TEST_RUN) $(TEST_EXE) $(TEST_OBJ)
.PHONY: test $(TEST_VAL) $(TEST_RUN) $(TEST_EXE) $(TEST_OBJ)
.PHONY: apidocs
.PHONY: install-headers
.PHONY: install uninstall

View File

@ -9,6 +9,8 @@ CFLAGS = -g -O2 -Wall
LIBS = -L.. -lgit2 -lz
OS = unix
VFLAGS = -q --error-exitcode=1 --leak-check=yes --suppressions=../tests.supp
CRYPTO_LIB = -lcrypto
EXTRA_LIBS =
@ -21,6 +23,7 @@ TEST_OBJ = $(patsubst %.c,%.o,\
$(wildcard t[0-9][0-9][0-9][0-9]-*.c))
TEST_EXE = $(patsubst %.o,%.exe,$(TEST_OBJ))
TEST_RUN = $(patsubst %.exe,%.run,$(TEST_EXE))
TEST_VAL = $(patsubst %.exe,%.val,$(TEST_EXE))
ifndef NO_OPENSSL
EXTRA_LIBS += $(CRYPTO_LIB)
@ -40,6 +43,8 @@ clean:
test: $(TEST_RUN)
valgrind: $(TEST_VAL)
.c.o:
$(CC) $(ALL_CFLAGS) -c $< -o $@
@ -79,6 +84,15 @@ $(TEST_RUN): %.run: %.exe
else rmdir $$t; exit 1; \
fi
$(TEST_VAL): %.val: %.exe
@t=trash-$(<F) && \
mkdir $$t && \
if (cd $$t && valgrind $(VFLAGS) ../$<); \
then rm -rf $$t; \
else rmdir $$t; exit 1; \
fi
.PHONY: all
.PHONY: clean
.PHONY: test $(TEST_RUN)
.PHONY: $(TEST_VAL)

6
tests/tests.supp Normal file
View File

@ -0,0 +1,6 @@
{
ignore-zlib-cond
Memcheck:Cond
obj:*libz.so*
}