Skip to content
This repository has been archived by the owner on Aug 16, 2023. It is now read-only.

Commit

Permalink
Support check code coverage (#60)
Browse files Browse the repository at this point in the history
Signed-off-by: yudong.cai <[email protected]>
  • Loading branch information
cydrain authored Jan 22, 2022
1 parent f77cf49 commit cad3310
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 9 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ docker-compose-devcontainer.yml.tmp
# Compiled source
bin/
lib/
output/
*.a
*.so
*.so.*
Expand Down Expand Up @@ -50,7 +51,7 @@ gtags.conf

# codecov-cpp generated files
lcov_*.info
cpp_coverage/
coverage/

# virtualenv
venv/
Expand Down
96 changes: 96 additions & 0 deletions scripts/run_codecov.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
#!/usr/bin/env bash

# Licensed to the LF AI & Data foundation under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Exit immediately for non zero status
set -e

SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
SOURCE="$(readlink "$SOURCE")"
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
ROOT_DIR="$( cd -P "$( dirname "$SOURCE" )/.." && pwd )"

KNOWHERE_CORE_DIR="${ROOT_DIR}/knowhere"
KNOWHERE_UNITTEST_DIR="${ROOT_DIR}/output/unittest"

echo "ROOT_DIR = ${ROOT_DIR}"
echo "KNOWHERE_CORE_DIR = ${KNOWHERE_CORE_DIR}"
echo "KNOWHERE_UNITTEST_DIR = ${KNOWHERE_UNITTEST_DIR}"

LCOV_CMD="lcov"
LCOV_GEN_CMD="genhtml"

FILE_INFO_BASE="${ROOT_DIR}/lcov_base.info"
FILE_INFO_UT="${ROOT_DIR}/lcov_ut.info"
FILE_INFO_COMBINE="${ROOT_DIR}/lcov_combine.info"
FILE_INFO_OUTPUT="${ROOT_DIR}/lcov_output.info"
DIR_LCOV_OUTPUT="${ROOT_DIR}/coverage"
DIR_GCNO="${ROOT_DIR}/cmake_build/"

# delete old code coverage info files
rm -f ${FILE_INFO_BASE}
rm -f ${FILE_INFO_UT}
rm -f ${FILE_INFO_COMBINE}
rm -f ${FILE_INFO_OUTPUT}
rm -rf ${DIR_LCOV_OUTPUT}

# generate baseline
${LCOV_CMD} -c -i -d ${DIR_GCNO} -o ${FILE_INFO_BASE}
if [ $? -ne 0 ]; then
echo "generate ${FILE_INFO_BASE} failed"
exit 1
fi

# run unittest
for test in `ls ${KNOWHERE_UNITTEST_DIR}`; do
echo "Running unittest: ${KNOWHERE_UNITTEST_DIR}/$test"
# run unittest
${KNOWHERE_UNITTEST_DIR}/${test}
if [ $? -ne 0 ]; then
echo ${args}
echo ${${KNOWHERE_UNITTEST_DIR}/}/${test} "run failed"
exit 1
fi
done

# generate ut file
${LCOV_CMD} -c -d ${DIR_GCNO} -o ${FILE_INFO_UT}

# merge baseline and ut file
${LCOV_CMD} -a ${FILE_INFO_BASE} -a ${FILE_INFO_UT} -o ${FILE_INFO_COMBINE}
if [ $? -ne 0 ]; then
echo "generate ${FILE_INFO_COMBINE} failed"
exit 1
fi

# remove unnecessary info
${LCOV_CMD} -r "${FILE_INFO_COMBINE}" -o "${FILE_INFO_OUTPUT}" \
"/usr/*" \
"*/unittest/*" \
"*/thirdparty/*"

if [ $? -ne 0 ]; then
echo "generate ${FILE_INFO_OUTPUT} failed"
exit 1
fi

# generate html report
${LCOV_GEN_CMD} ${FILE_INFO_OUTPUT} --output-directory ${DIR_LCOV_OUTPUT}
echo "Generate code coverage report to ${DIR_LCOV_OUTPUT}"
17 changes: 9 additions & 8 deletions unittest/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -123,20 +123,21 @@ set( ALL_INDEXING_SRCS
if ( LINUX )
set(ALL_INDEXING_SRCS
${ALL_INDEXING_SRCS}
test_instructionset.cpp
test_annoy.cpp
test_binaryidmap.cpp
test_binaryivf.cpp
test_hnsw.cpp
test_idmap.cpp
test_instructionset.cpp
test_ivf.cpp
test_ivf_hnsw.cpp
test_ivf_cpu_nm.cpp
test_binaryidmap.cpp
test_binaryivf.cpp
test_ivf_hnsw.cpp
test_ngtonng.cpp
test_ngtpanng.cpp
test_nsg.cpp
test_hnsw.cpp
test_rhnsw_flat.cpp
test_rhnsw_pq.cpp
test_rhnsw_sq8.cpp
test_ngtpanng.cpp
test_ngtonng.cpp
)
if ( KNOWHERE_GPU_VERSION )
set(ALL_INDEXING_SRCS
Expand All @@ -156,4 +157,4 @@ endif ()
add_executable( test_knowhere ${ALL_INDEXING_SRCS} )
target_link_libraries( test_knowhere knowhere ${DEPEND_LIBS} )

install(TARGETS test_knowhere)
install(TARGETS test_knowhere DESTINATION unittest)

0 comments on commit cad3310

Please sign in to comment.