diff --git a/CI/Dockerfile b/CI/Dockerfile
index 2867caaa1aeeec9800d39a5bbd07bd8b2f406687..12ad906924517add66e65c79625d8ded2efe8099 100644
--- a/CI/Dockerfile
+++ b/CI/Dockerfile
@@ -82,7 +82,9 @@ RUN yum clean all && yum makecache && yum install -y epel-release && yum swap -y
CUnit \
CUnit-devel \
valgrind \
- e2fsprogs
+ e2fsprogs \
+ lcov \
+ libasan
RUN yum clean all && \
(cd /lib/systemd/system/sysinit.target.wants/; for i in *; \
@@ -220,22 +222,22 @@ RUN export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH && \
# install gtest/gmock
RUN export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH && \
- set -x && \
- cd ~ && \
- git clone https://gitee.com/src-openeuler/gtest.git && \
- cd gtest && \
- tar xf release-1.8.1.tar.gz && \
- cd googletest-release-1.8.1 && \
- patch -p1 -F1 -s < ../gtest-1.8.1-null-pointer.patch && \
- patch -p1 -F1 -s < ../gtest-PR1839-Fix-Python3-support.patch && \
- patch -p1 -F1 -s < ../gtest-1.8.1-libversion.patch && \
- patch -p1 -F1 -s < ../gtest-1.8.1-add-missing-pkgconfig-requires.patch && \
- mkdir -p build && \
- cd build && \
- cmake -DBUILD_SHARED_LIBS=ON ../ && \
- make -j $(nproc) && \
- make install && \
- ldconfig
+ set -x && \
+ cd ~ && \
+ git clone https://gitee.com/src-openeuler/gtest.git && \
+ cd gtest && \
+ tar xf release-1.8.1.tar.gz && \
+ cd googletest-release-1.8.1 && \
+ patch -p1 -F1 -s < ../gtest-1.8.1-null-pointer.patch && \
+ patch -p1 -F1 -s < ../gtest-PR1839-Fix-Python3-support.patch && \
+ patch -p1 -F1 -s < ../gtest-1.8.1-libversion.patch && \
+ patch -p1 -F1 -s < ../gtest-1.8.1-add-missing-pkgconfig-requires.patch && \
+ mkdir -p build && \
+ cd build && \
+ cmake -DBUILD_SHARED_LIBS=ON ../ && \
+ make -j $(nproc) && \
+ make install && \
+ ldconfig
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]
diff --git a/CI/build.sh b/CI/build.sh
index 64f873b640c16e3c7890c4886e2e441122510d15..6929b241b00c7f77819f4d42025b237ec726cda7 100755
--- a/CI/build.sh
+++ b/CI/build.sh
@@ -17,12 +17,14 @@
set +e
set -x
+enable_gcov=OFF
ignore_ci=false
basepath=$(cd `dirname $0`; pwd)
source $basepath/helper.sh
TOPDIR=`pwd`
src_code_dir="$TOPDIR"
make_script="${TOPDIR}/CI/make-and-install.sh"
+gcov_script="${TOPDIR}/CI/generate_gcov.sh"
CIDIR="$TOPDIR/CI"
testcase_script="${src_code_dir}/CI/run-testcases.sh"
testcase_test="${src_code_dir}/CI/test.sh"
@@ -58,7 +60,7 @@ function err() {
echo "[$(date +'%Y-%m-%dT%H:%M:%S%z')]: $@" >&2
}
-args=`getopt -o m:n:g:i:h --long module:,container-num:,ignore-ci:,help -- "$@"`
+args=`getopt -o m:n:g:i:h --long module:,container-num:,enable-gcov:,ignore-ci:,help -- "$@"`
if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
eval set -- "$args"
@@ -66,6 +68,7 @@ while true; do
case "$1" in
-m|--module) modules=${2} ; modules=(${modules// / }) ; shift 2 ;;
-n|--container-num) container_nums=${2} ; shift 2 ;;
+ -g|--enable-gcov) enable_gcov=${2} ; shift 2 ;;
-i|--ignore-ci) ignore_ci=${2} ; shift 2 ;;
-h|--help) usage ; exit 0 ;;
--) shift ; break ;;
@@ -73,6 +76,10 @@ while true; do
esac
done
+if [[ "x${enable_gcov}" == "xON" ]]; then
+ container_nums=1
+fi
+
declare -A scripts
pwd
TESTCASE_PATH="./CI/test_cases"
@@ -173,7 +180,7 @@ function do_testcase_auto_assignment() {
fi
acc_time=$((acc_time + spend_time))
- if [[ ${acc_time} -ge 600 ]]; then
+ if [[ ${acc_time} -ge 200 ]]; then
acc_time=0
CONTAINER_INDEX=$((CONTAINER_INDEX + 1))
fi
@@ -286,6 +293,11 @@ fi
RES_CODE=0
mkdir -p $LXC_LOCK_DIR_HOST
+env_gcov=""
+if [[ "x${enable_gcov}" == "xON" ]]; then
+ env_gcov="--env GCOV=ON"
+fi
+
env_ignore_ci=""
if [ "x$ignore_ci" == "xON" ];then
env_ignore_ci="--env IGNORE_CI=ON"
@@ -378,6 +390,25 @@ trap "kill -9 $tailpid; exit 0" 15 2
wait $pids
kill -9 $tailpid
+if [[ "x${enable_gcov}" == "xON" ]]; then
+ rm -rf ${tmpdir}/build
+ docker cp ${containers[1]}:/root/iSulad/build ${tmpdir}
+ docker cp ${tmpdir}/build ${containers[0]}:/root
+ docker exec -e TOPDIR=${src_code_dir} ${containers[0]} ${gcov_script}
+ echo "iSulad GCOV html generated"
+ tar xf ./isulad-gcov.tar.gz
+ rm -rf /var/www/html/isulad-gcov
+ rm -rf /var/www/html/isulad-gcov.tar.gz
+ mv ./tmp/isulad-gcov /var/www/html
+ cp isulad-gcov.tar.gz /var/www/html
+
+ tar xf ./isulad-llt-gcov.tar.gz
+ rm -rf /var/www/html/isulad-llt-gcov
+ rm -rf /var/www/html/isulad-llt-gcov.tar.gz
+ mv ./coverage /var/www/html
+ cp isulad-llt-gcov.tar.gz /var/www/html
+fi
+
if [[ -e $CIDIR/${CONTAINER_NAME}.runflag ]]; then
echo_success "All \"${#scripts[@]}\" testcases passed!"
rm -rf $CIDIR/${CONTAINER_NAME}.runflag
diff --git a/CI/generate_gcov.sh b/CI/generate_gcov.sh
new file mode 100755
index 0000000000000000000000000000000000000000..41444c4c330a9a5d0a891ec507d3c65c61743592
--- /dev/null
+++ b/CI/generate_gcov.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+set +e
+set -x
+
+umask 0022
+export GCOV_RESULT_PATH=/tmp/isulad-gcov
+ISULAD_SRC_PATH=$(env | grep TOPDIR | awk -F = '{print $2}')
+export ISULAD_COPY_PATH=~/iSulad
+
+echo "================================Generate GCOV data===================================="
+
+echo "*****************Get iSulad GCOV data**************************"
+cp -r ~/build $ISULAD_COPY_PATH
+cd $ISULAD_COPY_PATH/build/src/CMakeFiles
+lcov -c -o isulad.info -d isulad.dir
+lcov -c -o isula.info -d isula.dir/src
+lcov -c -o isulad-shim.info -d isulad-shim.dir/src
+lcov -c -o libisula.info -d libisula.dir
+
+# Remove std files
+lcov --remove isulad.info '/usr/*' -o isulad.info
+lcov --remove isula.info '/usr/*' -o isula.info
+lcov --remove isulad-shim.info '/usr/*' -o isulad-shim.info
+lcov --remove libisula.info '/usr/*' -o libisula.info
+
+# Generate html
+genhtml --ignore-errors source -o $GCOV_RESULT_PATH/isulad isulad.info
+genhtml --ignore-errors source -o $GCOV_RESULT_PATH/isula isula.info
+genhtml --ignore-errors source -o $GCOV_RESULT_PATH/isulad-shim isulad-shim.info
+genhtml --ignore-errors source -o $GCOV_RESULT_PATH/libisula libisula.info
+
+cd $ISULAD_COPY_PATH/build/src/http/CMakeFiles
+lcov -c -o libhttpclient.info '/usr/*' -o libhttpclient.info
+
+# Remove std file
+lcov --remove libhttpclient.info '/usr/*' -o libhttpclient.info
+
+# Generate html
+genhtml --ignore-errors source -o $GCOV_RESULT_PATH/libhttpclient libhttpclient.info
+
+tar -zcf $ISULAD_SRC_PATH/isulad-gcov.tar.gz $GCOV_RESULT_PATH
+
+echo "================================Generate GCOV finish===================================="
diff --git a/CI/make-and-install.sh b/CI/make-and-install.sh
index d3c36388b7a152b971d3f7d0c75724e546938d5d..1e30a993ec7748f159bd99fdadabff21ec0f8e3b 100755
--- a/CI/make-and-install.sh
+++ b/CI/make-and-install.sh
@@ -38,7 +38,7 @@ export C_INCLUDE_PATH=/usr/local/include:${builddir}/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/usr/local/include:${builddir}/include:$CPLUS_INCLUDE_PATH
export PATH=${builddir}/bin:$PATH
-ISULAD_SRC_PATH=`env | grep TOPDIR | awk -F = '{print $2}'`
+ISULAD_SRC_PATH=`env | grep TOPDIR | awk -F '=' '{print $2}'`
export ISULAD_COPY_PATH=~/iSulad
export LCR_SRC_PATH=~/lcr/
@@ -48,6 +48,13 @@ export PATH=$PATH:/usr/local/go/bin
umask 0022
cp -r $ISULAD_SRC_PATH $ISULAD_COPY_PATH
+#Init GCOV configs
+set +e
+if [[ "x${GCOV}" == "xON" ]]; then
+ export enable_gcov=1
+fi
+set -e
+
function echo_success()
{
echo -e "\033[1;32m"$@"\033[0m"
@@ -60,6 +67,19 @@ function echo_error()
source $basepath/install_depends.sh
+echo_success "===================RUN DT-LLT TESTCASES START========================="
+cd $ISULAD_COPY_PATH
+rm -rf build
+cd ./test
+./test.sh -mcoverage -c -r -t
+if [[ $? -ne 0 ]]; then
+ exit 1
+fi
+ISULAD_SRC_PATH=$(env | grep TOPDIR | awk -F = '{print $2}')
+tar -zcf $ISULAD_SRC_PATH/isulad-llt-gcov.tar.gz ./coverage
+./test.sh -e
+echo_success "===================RUN DT-LLT TESTCASES END========================="
+
cd $ISULAD_COPY_PATH
sed -i 's/fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO/fd == 0 || fd == 1 || fd == 2 || fd >= 1000/g' ./src/cutils/utils.c
@@ -67,29 +87,27 @@ sed -i 's/fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO/fd ==
rm -rf build
mkdir build
cd build
-cmake -DLIB_INSTALL_DIR=${builddir}/lib -DCMAKE_INSTALL_PREFIX=${builddir} -DCMAKE_INSTALL_SYSCONFDIR=${builddir}/etc -DENABLE_EMBEDDED=ON ..
+if [[ ${enable_gcov} -ne 1 ]]; then
+ cmake -DLIB_INSTALL_DIR=${builddir}/lib -DCMAKE_INSTALL_PREFIX=${builddir} -DCMAKE_INSTALL_SYSCONFDIR=${builddir}/etc -DCMAKE_BUILD_TYPE=debug -DGCOV=ON -DENABLE_EMBEDDED=ON ..
+else
+ cmake -DLIB_INSTALL_DIR=${builddir}/lib -DCMAKE_INSTALL_PREFIX=${builddir} -DCMAKE_INSTALL_SYSCONFDIR=${builddir}/etc -DENABLE_EMBEDDED=ON ..
+fi
make -j $(nproc)
make install
sed -i 's/"log-driver": "stdout"/"log-driver": "file"/g' ${builddir}/etc/isulad/daemon.json
sed -i "/registry-mirrors/a\ \"https://hub-mirror.c.163.com\"" ${builddir}/etc/isulad/daemon.json
-echo_success "===================RUN DT-LLT TESTCASES START========================="
-cd $ISULAD_COPY_PATH
-rm -rf build
-cd ./test
-./test.sh -m -c -r
-if [[ $? -ne 0 ]]; then
- exit 1
-fi
-./test.sh -e
-echo_success "===================RUN DT-LLT TESTCASES END========================="
-
# build rest version
cd $ISULAD_COPY_PATH
rm -rf build
mkdir build
cd build
-cmake -DLIB_INSTALL_DIR=${restbuilddir}/lib -DCMAKE_INSTALL_PREFIX=${restbuilddir} -DCMAKE_INSTALL_SYSCONFDIR=${restbuilddir}/etc -DENABLE_EMBEDDED=ON -DENABLE_GRPC=OFF ..
+
+if [[ ${enable_gcov} -ne 0 ]]; then
+ cmake -DLIB_INSTALL_DIR=${restbuilddir}/lib -DCMAKE_INSTALL_PREFIX=${restbuilddir} -DCMAKE_INSTALL_SYSCONFDIR=${restbuilddir}/etc -DCMAKE_BUILD_TYPE=debug -DGCOV=ON -DENABLE_EMBEDDED=ON -DENABLE_GRPC=OFF -DDISABLE_OCI=ON ..
+else
+ cmake -DLIB_INSTALL_DIR=${restbuilddir}/lib -DCMAKE_INSTALL_PREFIX=${restbuilddir} -DCMAKE_INSTALL_SYSCONFDIR=${restbuilddir}/etc -DENABLE_EMBEDDED=ON -DENABLE_GRPC=OFF -DDISABLE_OCI=ON ..
+fi
make -j $(nproc)
make install
sed -i 's/"log-driver": "stdout"/"log-driver": "file"/g' ${restbuilddir}/etc/isulad/daemon.json
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f788ae9ab2bf1e4fc05d40e6d4dda23df4671296..38eb54f6b99b25961457332610f7b9a2fef6b5a6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -57,7 +57,7 @@ include(cmake/protoc.cmake)
SET(CMAKE_VERBOSE_MAKEFILE OFF)
IF(ENABLE_COVERAGE)
MESSAGE(STATUS "Enable coverage compile option")
- SET(COVERAGE_C_OPTION "${COVERAGE_OPTION} -fprofile-arcs -ftest-coverage -fkeep-inline-functions -fkeep-static-functions")
+ SET(COVERAGE_C_OPTION "${COVERAGE_OPTION} -fprofile-arcs -ftest-coverage -fkeep-inline-functions")
SET(COVERAGE_CXX_OPTION "${COVERAGE_OPTION} -fprofile-arcs -ftest-coverage")
ENDIF(ENABLE_COVERAGE)
diff --git a/test/runtime/isula/CMakeLists.txt b/test/runtime/isula/CMakeLists.txt
index e4975031b0773f048dcdd95f51c3ba36cd4cb7ce..03cf2fda54a6fd29150390da83ea538b870efa8c 100644
--- a/test/runtime/isula/CMakeLists.txt
+++ b/test/runtime/isula/CMakeLists.txt
@@ -10,6 +10,7 @@ add_executable(${EXE}
${CMAKE_CURRENT_SOURCE_DIR}/../../../src/cutils/utils_string.c
${CMAKE_CURRENT_SOURCE_DIR}/../../../src/cutils/utils_convert.c
${CMAKE_CURRENT_SOURCE_DIR}/../../../src/cutils/utils_file.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../src/cutils/util_atomic.c
${CMAKE_CURRENT_SOURCE_DIR}/../../../src/sha256/sha256.c
${CMAKE_CURRENT_SOURCE_DIR}/../../../src/path.c
${CMAKE_CURRENT_SOURCE_DIR}/../../../src/libisulad.c
@@ -47,4 +48,4 @@ target_include_directories(${EXE} PUBLIC
)
#set_target_properties(${EXE} PROPERTIES LINK_FLAGS)
-target_link_libraries(${EXE} ${GTEST_BOTH_LIBRARIES} ${GMOCK_LIBRARY} ${GMOCK_MAIN_LIBRARY} ${CMAKE_THREAD_LIBS_INIT} ${ISULA_LIBUTILS_LIBRARY} -lgrpc++ -lprotobuf -lcrypto -lyajl -lz)
+target_link_libraries(${EXE} ${GTEST_BOTH_LIBRARIES} ${GMOCK_LIBRARY} ${GMOCK_MAIN_LIBRARY} ${CMAKE_THREAD_LIBS_INIT} ${ISULA_LIBUTILS_LIBRARY} -lpthread -lgrpc++ -lprotobuf -lcrypto -lyajl -lz)
diff --git a/test/test.sh b/test/test.sh
index 2d6782f8af183d4d1c6f0da5425f9e49eac031bf..4568fdd1a8c4eee97ab8acea2633b31c4469f799 100755
--- a/test/test.sh
+++ b/test/test.sh
@@ -25,7 +25,7 @@ function usage()
echo " -h, --help Print this help, then exit"
echo
echo "Compile Options:"
- echo " -m, --cmake