2021-09-14 19:05:52 +08:00
#!/usr/bin/env bash
2021-10-09 18:01:27 +08:00
# 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.
2021-12-16 09:15:27 +08:00
# Exit immediately for non zero status
2021-09-14 19:05:52 +08:00
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 ) "
2023-12-19 10:08:41 +08:00
source ${ ROOT_DIR } /scripts/setenv.sh
2021-09-14 19:05:52 +08:00
2023-04-06 15:56:28 +08:00
MILVUS_CORE_DIR = " ${ ROOT_DIR } /internal/core "
MILVUS_CORE_UNITTEST_DIR = " ${ MILVUS_CORE_DIR } /output/unittest "
2021-09-14 19:05:52 +08:00
echo " ROOT_DIR = ${ ROOT_DIR } "
echo " MILVUS_CORE_DIR = ${ MILVUS_CORE_DIR } "
2021-09-17 18:21:52 +08:00
echo " MILVUS_CORE_UNITTEST_DIR = ${ MILVUS_CORE_UNITTEST_DIR } "
2021-09-14 19:05:52 +08:00
LCOV_CMD = "lcov"
LCOV_GEN_CMD = "genhtml"
2021-09-17 18:21:52 +08:00
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 "
2021-09-22 16:01:53 +08:00
DIR_LCOV_OUTPUT = " ${ ROOT_DIR } /cpp_coverage "
2021-09-17 18:21:52 +08:00
DIR_GCNO = " ${ ROOT_DIR } /cmake_build/ "
2021-09-14 19:05:52 +08:00
# delete old code coverage info files
2021-09-17 18:21:52 +08:00
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 }
2021-09-14 19:05:52 +08:00
if [ $? -ne 0 ] ; then
2021-09-29 17:36:01 +08:00
echo "Failed to generate coverage baseline"
2021-09-14 19:05:52 +08:00
exit -1
fi
2022-11-14 14:43:06 +08:00
# starting the timer
beginTime = ` date +%s`
2021-09-14 19:05:52 +08:00
2021-09-17 18:21:52 +08:00
# run unittest
for test in ` ls ${ MILVUS_CORE_UNITTEST_DIR } ` ; do
2021-10-05 12:28:13 +08:00
echo " Running cpp unittest: ${ MILVUS_CORE_UNITTEST_DIR } / $test "
2021-09-14 19:05:52 +08:00
# run unittest
2021-09-17 18:21:52 +08:00
${ MILVUS_CORE_UNITTEST_DIR } /${ test }
2021-09-14 19:05:52 +08:00
if [ $? -ne 0 ] ; then
echo ${ args }
2024-02-01 10:15:04 +08:00
echo " ${ MILVUS_CORE_UNITTEST_DIR } / ${ test } run failed "
2021-09-14 19:05:52 +08:00
exit -1
fi
done
2021-09-17 18:21:52 +08:00
# generate ut file
${ LCOV_CMD } -c -d ${ DIR_GCNO } -o ${ FILE_INFO_UT }
2021-09-14 19:05:52 +08:00
2021-09-17 18:21:52 +08:00
# merge baseline and ut file
${ LCOV_CMD } -a ${ FILE_INFO_BASE } -a ${ FILE_INFO_UT } -o ${ FILE_INFO_COMBINE }
# remove unnecessary info
${ LCOV_CMD } -r " ${ FILE_INFO_COMBINE } " -o " ${ FILE_INFO_OUTPUT } " \
2021-09-14 19:05:52 +08:00
"/usr/*" \
2023-11-01 09:00:14 +08:00
"*/llvm/*" \
2021-09-17 18:21:52 +08:00
"*/src/pb/*" \
"*/src/core/bench/*" \
"*/unittest/*" \
2023-11-01 09:00:14 +08:00
"*/thirdparty/*" \
"*/3rdparty_download/*" \
"*/.conan/data/*"
2021-09-14 19:05:52 +08:00
2021-09-17 18:21:52 +08:00
# generate html report
2023-11-01 09:00:14 +08:00
${ LCOV_GEN_CMD } ${ FILE_INFO_OUTPUT } --output-directory ${ DIR_LCOV_OUTPUT } /
echo " Generate cpp code coverage report to ${ DIR_LCOV_OUTPUT } "
2021-09-17 18:21:52 +08:00
2021-09-14 19:05:52 +08:00
2022-11-14 14:43:06 +08:00
endTime = ` date +%s`
2023-04-06 15:56:28 +08:00
echo "Total time for cpp unittest:" $(( $endTime - $beginTime )) "s"