提交 44815645 编写于 作者: L lifeng68

CI: add coverage report into CI

Signed-off-by: Nlifeng68 <lifeng68@huawei.com>
上级 b099987e
......@@ -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"]
......@@ -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
......
#!/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===================================="
......@@ -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
......
......@@ -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)
......
......@@ -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)
......@@ -25,7 +25,7 @@ function usage()
echo " -h, --help Print this help, then exit"
echo
echo "Compile Options:"
echo " -m, --cmake <option> use cmake genenate Makefile, eg: -m(default), -mcoverage, --cmake, --cmake=coverage"
echo " -m, --cmake <option> use cmake genenate Makefile, eg: -m(default), -mcoverage, -masan, --cmake, --cmake=coverage"
echo " -c, --compile Enable compile"
echo " -e, --empty Enable compile empty(make clean)"
echo
......@@ -146,7 +146,7 @@ function llt_compile()
{
ret=0
echo ---------------------- llt compile begin ----------------------
make -j ${nproc}
make -j
ret=$?
echo ---------------------- llt compile end ------------------------
echo
......@@ -279,7 +279,13 @@ function llt_coverage()
fi
#lcov -c ${LCOV_CMD} -o coverage/coverage.info --exclude '*_llt.c' --include '*.c' --include '*.cpp' --include '*.cc' --rc lcov_branch_coverage=1 --ignore-errors gcov --ignore-errors source --ignore-errors graph
lcov -c ${LCOV_CMD} -b $(dirname $(pwd)) --no-external --exclude '*_llt*.cc' -o coverage/coverage.info --rc lcov_branch_coverage=1 --ignore-errors gcov --ignore-errors source --ignore-errors graph
lcov --help | grep "\-\-exclude"
if [[ $? -eq 0 ]]; then
lcov -c ${LCOV_CMD} -b $(dirname $(pwd)) --no-external --exclude '*_llt*.cc' -o coverage/coverage.info --rc lcov_branch_coverage=1 --ignore-errors gcov --ignore-errors source --ignore-errors graph
else
lcov -c ${LCOV_CMD} -b $(dirname $(pwd)) --no-external -o coverage/coverage.info --rc lcov_branch_coverage=1 --ignore-errors gcov --ignore-errors source --ignore-errors graph
fi
if [ $? != 0 ]; then
echo "lcov generate coverage.info fail."
exit 1
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册