未验证 提交 6b4a2afa 编写于 作者: C Cai Yudong 提交者: GitHub

merge coverage.sh with run_unittest.sh (#3461)

* update coverity.sh
Signed-off-by: Nyudong.cai <yudong.cai@zilliz.com>

* merge Coverage.groovy into Unittest.groovy
Signed-off-by: Nyudong.cai <yudong.cai@zilliz.com>

* optimize run_unittest.sh
Signed-off-by: Nyudong.cai <yudong.cai@zilliz.com>

* update run_unittest.sh
Signed-off-by: Nyudong.cai <yudong.cai@zilliz.com>

* update coverage.sh
Signed-off-by: Nyudong.cai <yudong.cai@zilliz.com>

* update docker-compose.yml
Signed-off-by: Nyudong.cai <yudong.cai@zilliz.com>

* update Unittest.groovy
Signed-off-by: Nyudong.cai <yudong.cai@zilliz.com>
上级 09a20f41
......@@ -65,7 +65,7 @@ jobs:
uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: ./ci/scripts/output_new.info
file: ./ci/scripts/milvus_output.info
name: ubuntu-${{ matrix.ubuntu }}-unittests
flags: cpu_version_ubuntu_18_04_unittest
yml: ./codecov.yaml
......@@ -111,7 +111,7 @@ jobs:
uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: ./ci/scripts/output_new.info
file: ./ci/scripts/milvus_output.info
name: centos-${{ matrix.centos }}-unittests
flags: cpu_version_centos7_unittest
yml: ./codecov.yaml
timeout(time: 10, unit: 'MINUTES') {
dir ("ci/scripts") {
sh ". ./before-install.sh && ./coverage.sh"
String formatFlag = "${BINARY_VERSION}-version-${OS_NAME}-unittest".replaceAll("\\.", "_").replaceAll("-", "_")
def isTimeTriggeredBuild = currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause').size() != 0
if (isTimeTriggeredBuild) {
withCredentials([[$class: 'StringBinding', credentialsId: "milvus-ci-codecov-token", variable: 'CODECOV_TOKEN']]) {
sh "curl -s https://codecov.io/bash | bash -s - -f output_new.info -U \"--proxy http://proxy.zilliz.tech:1088\" -A \"--proxy http://proxy.zilliz.tech:1088\" -n ${BINARY_VERSION}-version-${OS_NAME}-unittest -F nightly -F ${formatFlag} || echo \"Codecov did not collect coverage reports\""
}
} else {
withCredentials([[$class: 'StringBinding', credentialsId: "milvus-ci-codecov-token", variable: 'CODECOV_TOKEN']]) {
sh "curl -s https://codecov.io/bash | bash -s - -f output_new.info -U \"--proxy http://proxy.zilliz.tech:1088\" -A \"--proxy http://proxy.zilliz.tech:1088\" -n ${BINARY_VERSION}-version-${OS_NAME}-unittest -F ${formatFlag} || echo \"Codecov did not collect coverage reports\""
}
}
}
}
timeout(time: 30, unit: 'MINUTES') {
timeout(time: 15, unit: 'MINUTES') {
dir ("ci/scripts") {
sh "./run_unittest.sh -i ${env.MILVUS_INSTALL_PREFIX}"
String formatName = "${BINARY_VERSION}-version-${OS_NAME}-unittest";
String formatFlag = "${formatName}".replaceAll("\\.", "_").replaceAll("-", "_")
String coverageInfoName = "milvus_output.info"
String proxyAddr = "http://proxy.zilliz.tech:1088"
def isTimeTriggeredBuild = currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause').size() != 0
sh ". ./before-install.sh && ./run_unittest.sh -i ${env.MILVUS_INSTALL_PREFIX} -o ${coverageInfoName}"
if (isTimeTriggeredBuild) {
withCredentials([[$class: 'StringBinding', credentialsId: "milvus-ci-codecov-token", variable: 'CODECOV_TOKEN']]) {
sh "curl -s https://codecov.io/bash | bash -s - -f ${coverageInfoName} -U \"--proxy ${proxyAddr}\" -A \"--proxy ${proxyAddr}\" -n ${formatName} -F nightly -F ${formatFlag} || echo \"Codecov did not collect coverage reports\""
}
} else {
withCredentials([[$class: 'StringBinding', credentialsId: "milvus-ci-codecov-token", variable: 'CODECOV_TOKEN']]) {
sh "curl -s https://codecov.io/bash | bash -s - -f ${coverageInfoName} -U \"--proxy ${proxyAddr}\" -A \"--proxy ${proxyAddr}\" -n ${formatName} -F ${formatFlag} || echo \"Codecov did not collect coverage reports\""
}
}
}
}
......@@ -115,21 +115,8 @@ Run unit test and generate code for code coverage check
$ ./build.sh -u -c
```
Run MySQL docker
```shell
docker pull mysql:latest
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
```
Run code coverage
```shell
$ ./coverage.sh -u root -p 123456 -t 127.0.0.1
```
Or start your own MySQL server, and then run code coverage
```shell
$ ./coverage.sh -u ${MYSQL_USERNAME} -p ${MYSQL_PASSWORD} -t ${MYSQL_SERVER_IP}
$ ./coverage.sh
```
......@@ -66,7 +66,6 @@ pipeline {
container("milvus-${BINARY_VERSION}-build-env") {
MPLModule('Milvus Build')
MPLModule('Unittest')
MPLModule('Coverage')
MPLModule('Package Build')
}
}
......
#!/bin/bash
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
SCRIPTS_DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
HELP="
Usage:
$0 [flags] [Arguments]
-b Core Code build directory
-c Codecov token
-h or --help Print help information
Use \"$0 --help\" for more information about a given command.
"
ARGS=`getopt -o "b:c:h" -l "help" -n "$0" -- "$@"`
eval set -- "${ARGS}"
while true ; do
case "$1" in
-b)
# o has an optional argument. As we are in quoted mode,
# an empty parameter will be generated if its optional
# argument is not found.
case "$2" in
"") echo "Option CORE_BUILD_DIR, no argument"; exit 1 ;;
*) CORE_BUILD_DIR=$2 ; shift 2 ;;
esac ;;
-c)
case "$2" in
"") echo "Option CODECOV_TOKEN, no argument"; exit 1 ;;
*) CODECOV_TOKEN=$2 ; shift 2 ;;
esac ;;
-h|--help) echo -e "${HELP}" ; exit 0 ;;
--) shift ; break ;;
*) echo "Internal error!" ; exit 1 ;;
esac
done
# Set defaults for vars modified by flags to this script
MILVUS_CORE_DIR="${SCRIPTS_DIR}/../../core"
CORE_BUILD_DIR=${CORE_BUILD_DIR:="${MILVUS_CORE_DIR}/cmake_build"}
LCOV_CMD="lcov"
# LCOV_GEN_CMD="genhtml"
FILE_INFO_BASE="base.info"
FILE_INFO_MILVUS="server.info"
FILE_INFO_OUTPUT="output.info"
FILE_INFO_OUTPUT_NEW="output_new.info"
DIR_LCOV_OUTPUT="lcov_out"
DIR_GCNO="${CORE_BUILD_DIR}"
DIR_UNITTEST="${INSTALL_PREFIX}/unittest"
cd ${SCRIPTS_DIR}
# delete old code coverage info files
rm -rf ${DIR_LCOV_OUTPUT}
rm -f ${FILE_INFO_BASE} ${FILE_INFO_MILVUS} ${FILE_INFO_OUTPUT} ${FILE_INFO_OUTPUT_NEW}
# get baseline
${LCOV_CMD} -c -i -d ${DIR_GCNO} -o "${FILE_INFO_BASE}"
if [ $? -ne 0 ]; then
echo "gen baseline coverage run failed"
exit -1
fi
# gen code coverage
${LCOV_CMD} -d ${DIR_GCNO} -o "${FILE_INFO_MILVUS}" -c
if [ $? -ne 0 ]; then
echo "gen ${FILE_INFO_MILVUS} failed"
exit 0
fi
# merge coverage
${LCOV_CMD} -a ${FILE_INFO_BASE} -a ${FILE_INFO_MILVUS} -o "${FILE_INFO_OUTPUT}"
# remove third party from tracefiles
${LCOV_CMD} -r "${FILE_INFO_OUTPUT}" -o "${FILE_INFO_OUTPUT_NEW}" \
"/usr/*" \
"*/cmake_build/*" \
"*/src/index/thirdparty*" \
"*/src/grpc*" \
"*/thirdparty/*"
if [ $? -ne 0 ]; then
echo "gen ${FILE_INFO_OUTPUT_NEW} failed"
exit 0
fi
if [[ -n ${CODECOV_TOKEN} ]];then
export CODECOV_TOKEN="${CODECOV_TOKEN}"
curl -s https://codecov.io/bash | bash -s - -f output_new.info || echo "Codecov did not collect coverage reports"
fi
......@@ -3,10 +3,12 @@
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
# resolve $SOURCE until the file is no longer a symlink
while [ -h "$SOURCE" ]; do
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
SOURCE="$(readlink "$SOURCE")"
# if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
done
SCRIPTS_DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
......@@ -16,55 +18,125 @@ Usage:
-i [INSTALL_PREFIX] or --install_prefix=[INSTALL_PREFIX]
Install directory used by install.
-h or --help Print help information
-b Core Code build directory
-c Codecov token
-o Output info file name
-h or --help Print help information
Use \"$0 --help\" for more information about a given command.
Use \"$0 --help\" for more information about a given command.
"
ARGS=`getopt -o "i:h" -l "install_prefix::,help" -n "$0" -- "$@"`
ARGS=`getopt -o "i:b:c:o:h" -l "install_prefix::,help" -n "$0" -- "$@"`
eval set -- "${ARGS}"
while true ; do
case "$1" in
-i|--install_prefix)
# o has an optional argument. As we are in quoted mode,
# an empty parameter will be generated if its optional
# argument is not found.
case "$2" in
"") echo "Option install_prefix, no argument"; exit 1 ;;
*) INSTALL_PREFIX=$2 ; shift 2 ;;
esac ;;
-h|--help) echo -e "${HELP}" ; exit 0 ;;
--) shift ; break ;;
*) echo "Internal error!" ; exit 1 ;;
esac
case "$1" in
-i|--install_prefix)
case "$2" in
"") echo "Option install_prefix, no argument"; exit 1 ;;
*) INSTALL_PREFIX=$2 ; shift 2 ;;
esac ;;
-b)
case "$2" in
"") echo "Option CORE_BUILD_DIR, no argument"; exit 1 ;;
*) CORE_BUILD_DIR=$2 ; shift 2 ;;
esac ;;
-c)
case "$2" in
"") echo "Option CODECOV_TOKEN, no argument"; exit 1 ;;
*) CODECOV_TOKEN=$2 ; shift 2 ;;
esac ;;
-o)
case "$2" in
"") echo "Option OUTPUT_INFO, no argument"; exit 1 ;;
*) OUTPUT_INFO=$2 ; shift 2 ;;
esac ;;
-h|--help) echo -e "${HELP}" ; exit 0 ;;
--) shift ; break ;;
*) echo "Internal error!" ; exit 1 ;;
esac
done
# Set defaults for vars modified by flags to this script
INSTALL_PREFIX=${INSTALL_PREFIX:="/var/lib/milvus"}
DIR_UNITTEST="${INSTALL_PREFIX}/unittest"
UNITTEST_DIR="${INSTALL_PREFIX}/unittest"
MILVUS_CORE_DIR="${SCRIPTS_DIR}/../../core"
CORE_BUILD_DIR=${CORE_BUILD_DIR:="${MILVUS_CORE_DIR}/cmake_build"}
LCOV_CMD="lcov"
# LCOV_GEN_CMD="genhtml"
BASE_INFO="milvus_base.info"
TEST_INFO="milvus_test.info"
TOTAL_INFO="milvus_total.info"
OUTPUT_INFO=${OUTPUT_INFO}
# LCOV_OUTPUT_DIR="lcov_out"
if [ -d ${INSTALL_PREFIX}/lib ]; then
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${INSTALL_PREFIX}/lib
fi
if [ ! -d ${DIR_UNITTEST} ]; then
if [ ! -d ${UNITTEST_DIR} ]; then
echo "The unittest folder does not exist!"
exit 1
fi
pushd ${SCRIPTS_DIR}
for test in `ls ${DIR_UNITTEST}`; do
echo $test
# delete old code coverage info files
# rm -rf ${LCOV_OUTPUT_DIR}
rm -f ${BASE_INFO} ${TEST_INFO} ${TOTAL_INFO} ${OUTPUT_INFO}
# get baseline
${LCOV_CMD} -c -i -d ${CORE_BUILD_DIR} -o "${BASE_INFO}"
if [ $? -ne 0 ]; then
echo "gen ${BASE_INFO} failed"
exit 1
fi
# run unittest
for test in `ls ${UNITTEST_DIR}`; do
echo $test " running..."
# run unittest
${DIR_UNITTEST}/${test}
${UNITTEST_DIR}/${test}
if [ $? -ne 0 ]; then
echo ${DIR_UNITTEST}/${test} "run failed"
echo ${UNITTEST_DIR}/${test} "run failed"
exit 1
fi
done
# gen code coverage
${LCOV_CMD} -c -d ${CORE_BUILD_DIR} -o "${TEST_INFO}"
if [ $? -ne 0 ]; then
echo "gen ${TEST_INFO} failed"
exit 1
fi
# merge coverage
${LCOV_CMD} -a ${BASE_INFO} -a ${TEST_INFO} -o "${TOTAL_INFO}"
if [ $? -ne 0 ]; then
echo "gen ${TOTAL_INFO} failed"
exit 1
fi
# remove third party from tracefiles
${LCOV_CMD} -r "${TOTAL_INFO}" -o "${OUTPUT_INFO}" \
"/usr/*" \
"*/cmake_build/*" \
"*/src/index/thirdparty*" \
"*/src/grpc*" \
"*/thirdparty/*"
if [ $? -ne 0 ]; then
echo "gen ${OUTPUT_INFO} failed"
exit 1
fi
if [[ -n ${CODECOV_TOKEN} ]];then
export CODECOV_TOKEN="${CODECOV_TOKEN}"
curl -s https://codecov.io/bash | bash -s - -f ${OUTPUT_INFO} || echo "Codecov did not collect coverage reports"
fi
popd
......@@ -5,51 +5,53 @@ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/milvus/lib
LCOV_CMD="lcov"
LCOV_GEN_CMD="genhtml"
FILE_INFO_BASE="base.info"
FILE_INFO_MILVUS="server.info"
FILE_INFO_OUTPUT="output.info"
FILE_INFO_OUTPUT_NEW="output_new.info"
DIR_LCOV_OUTPUT="lcov_out"
BASE_INFO="milvus_base.info"
TEST_INFO="milvus_test.info"
TOTAL_INFO="milvus_total.info"
OUTPUT_INFO="milvus_output.info"
LCOV_OUTPUT_DIR="lcov_out"
DIR_GCNO="cmake_build"
DIR_UNITTEST="milvus/unittest"
GCNO_DIR="cmake_build"
UNITTEST_DIR="milvus/unittest"
# delete old code coverage info files
rm -f FILE_INFO_BASE
rm -f FILE_INFO_MILVUS
rm -f FILE_INFO_OUTPUT
rm -f FILE_INFO_OUTPUT_NEW
rm -rf lcov_out
rm -f FILE_INFO_BASE FILE_INFO_MILVUS FILE_INFO_OUTPUT FILE_INFO_OUTPUT_NEW
MYSQL_DB_NAME=milvus_`date +%s%N`
rm -rf ${LCOV_OUTPUT_DIR}
rm -f ${BASE_INFO} ${TEST_INFO} ${TOTAL_INFO} ${OUTPUT_INFO}
# get baseline
${LCOV_CMD} -c -i -d ${DIR_GCNO} -o "${FILE_INFO_BASE}"
${LCOV_CMD} -c -i -d ${GCNO_DIR} -o "${BASE_INFO}"
if [ $? -ne 0 ]; then
echo "gen baseline coverage run failed"
exit -1
echo "generate ${BASE_INFO} failed"
exit 1
fi
for test in `ls ${DIR_UNITTEST}`; do
echo $test
# run unittest
for test in `ls ${UNITTEST_DIR}`; do
echo $test "running..."
# run unittest
./${DIR_UNITTEST}/${test}
./${UNITTEST_DIR}/${test}
if [ $? -ne 0 ]; then
echo ${DIR_UNITTEST}/${test} "run failed"
exit -1
echo ${UNITTEST_DIR}/${test} "run failed"
exit 1
fi
done
mysql_exc "DROP DATABASE IF EXISTS ${MYSQL_DB_NAME};"
# gen code coverage
${LCOV_CMD} -d ${DIR_GCNO} -o "${FILE_INFO_MILVUS}" -c
${LCOV_CMD} -c -d ${GCNO_DIR} -o "${TEST_INFO}"
if [ $? -ne 0 ]; then
echo "generate ${TEST_INFO} failed"
exit 1
fi
# merge coverage
${LCOV_CMD} -a ${FILE_INFO_BASE} -a ${FILE_INFO_MILVUS} -o "${FILE_INFO_OUTPUT}"
${LCOV_CMD} -a ${BASE_INFO} -a ${TEST_INFO} -o "${TOTAL_INFO}"
if [ $? -ne 0 ]; then
echo "generate ${TOTAL_INFO} failed"
exit 1
fi
# remove third party from tracefiles
${LCOV_CMD} -r "${FILE_INFO_OUTPUT}" -o "${FILE_INFO_OUTPUT_NEW}" \
${LCOV_CMD} -r "${TOTAL_INFO}" -o "${OUTPUT_INFO}" \
"/usr/*" \
"*/cmake_build/*" \
"*/src/index/thirdparty*" \
......@@ -57,8 +59,9 @@ ${LCOV_CMD} -r "${FILE_INFO_OUTPUT}" -o "${FILE_INFO_OUTPUT_NEW}" \
"*/thirdparty/*"
if [ $? -ne 0 ]; then
echo "generate ${FILE_INFO_OUTPUT_NEW} failed"
exit -2
echo "generate ${OUTPUT_INFO} failed"
exit 1
fi
# gen html report
${LCOV_GEN_CMD} "${FILE_INFO_OUTPUT_NEW}" --output-directory ${DIR_LCOV_OUTPUT}/
${LCOV_GEN_CMD} "${OUTPUT_INFO}" --output-directory ${LCOV_OUTPUT_DIR}
......@@ -31,8 +31,7 @@ services:
- milvus
command: &ubuntu-command
["/milvus/ci/scripts/build.sh -t Release -j2 -i ${MILVUS_INSTALL_PREFIX} --with_fiu --coverage -u &&
/milvus/ci/scripts/run_unittest.sh -i ${MILVUS_INSTALL_PREFIX} &&
/milvus/ci/scripts/coverage.sh"]
/milvus/ci/scripts/run_unittest.sh -i ${MILVUS_INSTALL_PREFIX}"]
centos-core:
image: ${REPO}:${ARCH}-centos-${CENTOS}-core
......@@ -51,8 +50,7 @@ services:
- milvus
command: &centos-command
["/milvus/ci/scripts/build.sh -t Release -j2 -i ${MILVUS_INSTALL_PREFIX} --with_fiu --coverage -u &&
/milvus/ci/scripts/run_unittest.sh -i ${MILVUS_INSTALL_PREFIX} &&
/milvus/ci/scripts/coverage.sh"]
/milvus/ci/scripts/run_unittest.sh -i ${MILVUS_INSTALL_PREFIX}"]
ubuntu-cuda-core:
image: ${REPO}:${ARCH}-ubuntu-${UBUNTU}-cuda-core
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册