Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev #1

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions rules/sonic-cpp-coverage.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Generate code coverage report for cpp project. Currently support:
# 1. sonic-swss-common
# 2. sonic-sairedis
# 3. sonic-swss

sonic-coverage-tools:
/bin/bash $(BUILD_WORKDIR)/src/sonic-cpp-coverage/install-tools.sh

sonic-swss-common-coverage: sonic-coverage-tools
/bin/bash $(BUILD_WORKDIR)/src/sonic-cpp-coverage/sonic-swss-common.sh

sonic-sairedis-coverage: sonic-coverage-tools
/bin/bash $(BUILD_WORKDIR)/src/sonic-cpp-coverage/sonic-sairedis.sh

45 changes: 45 additions & 0 deletions src/sonic-cpp-coverage/sonic-sairedis.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Build target to make it auto install dependencies
set -ex
cd /sonic
#rm -f target/debs/bullseye/syncd_1.0.0_amd64.deb
make -f slave.mk target/debs/bullseye/syncd_1.0.0_amd64.deb-install
cd /sonic/src/sonic-sairedis

# Install sonic-swss-common
sudo dpkg -i /sonic/target/debs/bullseye/libswsscommon_1.0.0_amd64.deb
sudo dpkg -i /sonic/target/debs/bullseye/libswsscommon-dev_1.0.0_amd64.deb

# Build target
rm ../*.deb || true
./autogen.sh
extraflags='--enable-code-coverage'
DEB_BUILD_OPTIONS=nocheck DEB_CONFIGURE_EXTRA_FLAGS=$extraflags dpkg-buildpackage -us -uc -b -Psyncd,vs,nopython2 -j$(nproc)
mv ../*.deb .

# Update rsyslog.conf
sudo cp azsyslog.conf /etc/rsyslog.conf
sudo service rsyslog restart

# Generate coverage.xml
sudo setcap "cap_sys_time=eip" syncd/.libs/syncd_tests
sudo setcap "cap_dac_override,cap_ipc_lock,cap_ipc_owner,cap_sys_time=eip" unittest/syncd/.libs/tests
redis-cli FLUSHALL
make check
gcovr --version
find SAI/meta -name "*.gc*" | xargs rm -vf
gcov_dirs=$(find . -path "*.libs*gcda" | xargs dirname | sort -u | cut -c"3-")
for dir in ${gcov_dirs}; do
source_dir=$(dirname $dir)
output_file="coverage-$source_dir.json"
gcovr --exclude-unreachable-branches --json-pretty -o $output_file --object-directory $source_dir $dir
done
gcovr -r ./ -e ".*/SAI/.*" -e ".+/json.hpp" -e "swss/.+" -e ".*/.libs/.*" -e ".*/debian/.*" --exclude-unreachable-branches --json-pretty -o coverage-all.json
gcovr -a "coverage-*.json" -x --xml-pretty -o coverage.xml

# Generate HTML full report
sudo /root/.dotnet/tools/reportgenerator -reports:"./coverage.xml" -targetdir:"htmlcov" -reporttypes:Html
echo "sonic-sairedis full coverage report is at src/sonic-sairedis/htmlcov"

# Generate diff report
diff-cover coverage.xml --html-report report.html --compare-branch=origin/master --fail-under=80
echo "sonic-sairedis diff coverage report is at src/sonic-sairedis/report.html"
42 changes: 42 additions & 0 deletions src/sonic-cpp-coverage/sonic-swss-common.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Build target to make it auto install dependencies
set -ex
cd /sonic
rm -f target/debs/bullseye/libswsscommon_1.0.0_amd64.deb
make -f slave.mk target/debs/bullseye/libswsscommon_1.0.0_amd64.deb-install
cd /sonic/src/sonic-swss-common

# Clean previous coverage data if any
sudo rm -rf $(find . -name "*.gcda")
sudo rm -rf $(find . -name "*.gcno")
sudo git clean -d -f

# Build target
rm ../*.deb || true
./autogen.sh
make clean || true
fakeroot debian/rules DEB_CONFIGURE_EXTRA_FLAGS='--enable-code-coverage' DEB_BUILD_PROFILES=nopython2 CFLAGS="" CXXFLAGS="--coverage -fprofile-abs-path" LDFLAGS="--coverage -fprofile-abs-path" binary
mv ../*.deb .

# Install target debs
sudo dpkg -i libswsscommon_*.deb
sudo dpkg -i libswsscommon-dev_*.deb
sudo dpkg -i python3-swsscommon_*.deb

# Run tests and collect coverage data
redis-cli FLUSHALL
./tests/tests
redis-cli FLUSHALL
pytest-3 --cov=. --cov-report=xml
[ -f coverage.xml ] && mv coverage.xml tests/coverage.xml
gcovr -r ./ -e ".*/swsscommon_wrap.cpp" -e=tests --exclude-unreachable-branches --exclude-throw-branches --gcov-ignore-parse-errors -x --xml-pretty -o coverage.xml
make -C goext
redis-cli FLUSHALL
make -C goext check

# Generate HTML full report
sudo /root/.dotnet/tools/reportgenerator -reports:"./coverage.xml" -targetdir:"htmlcov" -reporttypes:Html
echo "sonic-swss-common full coverage report is at src/sonic-swss-common/htmlcov"

# Generate diff report
diff-cover coverage.xml --html-report report.html --compare-branch=origin/master --fail-under=80
echo "sonic-swss-common diff coverage report is at src/sonic-swss-common/report.html"
34 changes: 34 additions & 0 deletions src/sonic-cpp-coverage/sonic-swss.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Build target to make it auto install dependencies
cd /sonic/src/sonic-swss
make -f slave.mk target/debs/bullseye/swss_1.0.0_amd64.deb

# Build with gcov flag
rm ../*.deb || true
export ENABLE_GCOV=y
./autogen.sh
dpkg-buildpackage -us -uc -b -j16 && cp ../*.deb .



make check

[ -f coverage.xml ] && mv coverage.xml tests/coverage.xml


# Install gcovr and get xml output
git clone https://github.com/gcovr/gcovr.git
cd gcovr/
git checkout 5.2
sudo pip3 install setuptools
sudo python3 setup.py install
cd ..
sudo rm -rf gcovr
gcovr -r ./ -e=tests --exclude-unreachable-branches --exclude-throw-branches --gcov-ignore-parse-errors -x --xml-pretty -o coverage.xml

# Install tools and generatereport
curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo apt-add-repository https://packages.microsoft.com/debian/11/prod
sudo apt-get update
sudo apt-get install -y dotnet-sdk-7.0
sudo dotnet tool install -g dotnet-reportgenerator-globaltool
sudo /root/.dotnet/tools/reportgenerator -reports:"./coverage.xml" -targetdir:"htmlcov" -reporttypes:Html