Automating valgrind to run with jenkins
Summary: The script valgrind_test.sh runs Valgrind for all tests in the makefile including leak-checks and outputs the logs for every test in a separate file with the name "valgrind_log_<testname>". It prints the failed tests in the file "valgrind_failed_tests". All these files are created in the directory "VALGRIND_LOGS" which can be changed in the Makefile. Finally it checks the line-count for the file "valgrind_failed_tests" and returns 0 if no tests failed and 1 otherwise. Test Plan: ./valgrind_test.sh; Changed the tests to incorporte leaks and verified correctness Reviewers: dhruba, sheki, MarkCallaghan Reviewed By: sheki CC: zshao Differential Revision: https://reviews.facebook.net/D8877
This commit is contained in:
parent
c41f1e995c
commit
ec96ad5405
17
Makefile
17
Makefile
@ -30,7 +30,9 @@ MEMENVOBJECTS = $(MEMENV_SOURCES:.cc=.o)
|
|||||||
|
|
||||||
TESTUTIL = ./util/testutil.o
|
TESTUTIL = ./util/testutil.o
|
||||||
TESTHARNESS = ./util/testharness.o $(TESTUTIL)
|
TESTHARNESS = ./util/testharness.o $(TESTUTIL)
|
||||||
|
VALGRIND_ERROR = 2
|
||||||
|
VALGRIND_DIR = "VALGRIND_LOGS"
|
||||||
|
VALGRIND_OPTS = --error-exitcode=$(VALGRIND_ERROR) --leak-check=full
|
||||||
|
|
||||||
TESTS = \
|
TESTS = \
|
||||||
arena_test \
|
arena_test \
|
||||||
@ -114,7 +116,18 @@ ldb_tests: all $(PROGRAMS) $(TOOLS)
|
|||||||
python tools/ldb_test.py
|
python tools/ldb_test.py
|
||||||
|
|
||||||
valgrind_check: all $(PROGRAMS) $(TESTS)
|
valgrind_check: all $(PROGRAMS) $(TESTS)
|
||||||
for t in $(TESTS); do valgrind ./$$t || exit 1; done
|
echo TESTS THAT HAVE VALGRIND ERRORS > $(VALGRIND_DIR)/valgrind_failed_tests; \
|
||||||
|
echo TIMES in seconds TAKEN BY TESTS ON VALGRIND > $(VALGRIND_DIR)/valgrind_tests_times; \
|
||||||
|
for t in $(filter-out skiplist_test,$(TESTS)); do \
|
||||||
|
stime=`date '+%s'`; \
|
||||||
|
valgrind $(VALGRIND_OPTS) \
|
||||||
|
--log-file=$(VALGRIND_DIR)/valgrind_log_$$t ./$$t; \
|
||||||
|
if [ $$? -eq $(VALGRIND_ERROR) ] ; then \
|
||||||
|
echo $$t >> $(VALGRIND_DIR)/valgrind_failed_tests; \
|
||||||
|
fi; \
|
||||||
|
etime=`date '+%s'`; \
|
||||||
|
echo $$t $$((etime - stime)) >> $(VALGRIND_DIR)/valgrind_tests_times; \
|
||||||
|
done
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
-rm -f $(PROGRAMS) $(BENCHMARKS) $(LIBRARY) $(SHARED) $(MEMENVLIBRARY) $(THRIFTSERVER) */*.o */*/*.o ios-x86/*/*.o ios-arm/*/*.o build_config.mk
|
-rm -f $(PROGRAMS) $(BENCHMARKS) $(LIBRARY) $(SHARED) $(MEMENVLIBRARY) $(THRIFTSERVER) */*.o */*/*.o ios-x86/*/*.o ios-arm/*/*.o build_config.mk
|
||||||
|
4
VALGRIND_LOGS/README
Normal file
4
VALGRIND_LOGS/README
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
This directory stores the tests that failed valgrind and the logs associated
|
||||||
|
with the failed runs.
|
||||||
|
"make valgrind_check" can be invoked to call valgrind on the rocksdb tests and
|
||||||
|
generate files in this directory
|
18
valgrind_test.sh
Executable file
18
valgrind_test.sh
Executable file
@ -0,0 +1,18 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#A shell script for Jenknis to run valgrind on rocksdb tests
|
||||||
|
#Returns 0 on success when there are no failed tests
|
||||||
|
|
||||||
|
VALGRIND_DIR=VALGRIND_LOGS
|
||||||
|
make valgrind_check
|
||||||
|
NUM_FAILED_TESTS=`wc -l $VALGRIND_DIR/valgrind_failed_tests | awk '{print $1}'`
|
||||||
|
if [ $NUM_FAILED_TESTS -le '1' ]; then
|
||||||
|
{
|
||||||
|
echo No tests have valgrind errors;
|
||||||
|
exit 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cat $VALGRIND_DIR/valgrind_failed_tests;
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
fi
|
Loading…
Reference in New Issue
Block a user