diff --git a/.azure-pipelines/build-template.yml b/.azure-pipelines/build-template.yml index 1dd56a2cd..32f1f6d90 100644 --- a/.azure-pipelines/build-template.yml +++ b/.azure-pipelines/build-template.yml @@ -27,6 +27,10 @@ parameters: type: boolean default: false +- name: archive_gcov + type: boolean + default: false + jobs: - job: displayName: ${{ parameters.arch }} @@ -52,11 +56,13 @@ jobs: swig3.0 displayName: "Install dependencies" - script: | + set -ex ./autogen.sh - dpkg-buildpackage -us -uc -b -j$(nproc) && cp ../*.deb . - displayName: "Compile sonic swss common" + fakeroot debian/rules DEB_CONFIGURE_EXTRA_FLAGS='--enable-code-coverage' CFLAGS="" CXXFLAGS="" binary && cp ../*.deb . + displayName: "Compile sonic swss common with coverage enabled" - ${{ if eq(parameters.run_unit_test, true) }}: - script: | + set -ex sudo pip install Pympler==0.8 sudo apt-get install -y redis-server sudo sed -i 's/notify-keyspace-events ""/notify-keyspace-events AKE/' /etc/redis/redis.conf @@ -69,7 +75,27 @@ jobs: sudo dpkg -i python-swsscommon_*.deb sudo ./tests/tests && redis-cli FLUSHALL && pytest + + gcovr -r ./ -x -o coverage.xml + cd common + mkdir -p htmlcov + gcovr -r ./ --html --html-details -o htmlcov/index.html displayName: "Run swss common unit tests" - publish: $(System.DefaultWorkingDirectory)/ artifact: ${{ parameters.artifact_name }} displayName: "Archive swss common debian packages" + - ${{ if eq(parameters.archive_gcov, true) }}: + - script: | + set -ex + # Install .NET CORE + curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - + sudo apt-add-repository https://packages.microsoft.com/debian/10/prod + sudo apt-get update + sudo apt-get install -y dotnet-sdk-5.0 + displayName: "Install .NET CORE" + - task: PublishCodeCoverageResults@1 + inputs: + codeCoverageTool: Cobertura + summaryFileLocation: '$(System.DefaultWorkingDirectory)/coverage.xml' + reportDirectory: '$(System.DefaultWorkingDirectory)/common/htmlcov/' + displayName: 'Publish test coverage' diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 3b7954610..06fbfd97d 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -43,6 +43,7 @@ stages: cd /usr/src/gtest && sudo cmake . && sudo make displayName: "Install dependencies" - script: | + ./autogen.sh dpkg-buildpackage -rfakeroot -us -uc -b -j$(nproc) && cp ../*.deb . displayName: "Compile sonic swss common" - publish: $(System.DefaultWorkingDirectory)/ @@ -55,6 +56,7 @@ stages: sonic_slave: sonic-slave-buster artifact_name: sonic-swss-common run_unit_test: true + archive_gcov: true - stage: BuildArm dependsOn: Build diff --git a/common/Makefile.am b/common/Makefile.am index 1e82f97a6..0ae31d1c9 100644 --- a/common/Makefile.am +++ b/common/Makefile.am @@ -66,12 +66,12 @@ libswsscommon_la_SOURCES = \ warm_restart.cpp \ redisutility.cpp -libswsscommon_la_CXXFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(LIBNL_CFLAGS) -libswsscommon_la_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(LIBNL_CPPFLAGS) -libswsscommon_la_LIBADD = -lpthread $(LIBNL_LIBS) +libswsscommon_la_CXXFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(LIBNL_CFLAGS) $(CODE_COVERAGE_CXXFLAGS) +libswsscommon_la_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(LIBNL_CPPFLAGS) $(CODE_COVERAGE_CPPFLAGS) +libswsscommon_la_LIBADD = -lpthread $(LIBNL_LIBS) $(CODE_COVERAGE_LIBS) swssloglevel_SOURCES = loglevel.cpp -swssloglevel_CXXFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) -swssloglevel_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) -swssloglevel_LDADD = libswsscommon.la +swssloglevel_CXXFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CODE_COVERAGE_CXXFLAGS) +swssloglevel_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CODE_COVERAGE_CPPFLAGS) +swssloglevel_LDADD = libswsscommon.la $(CODE_COVERAGE_LIBS) diff --git a/configure.ac b/configure.ac index a108f111c..f668c1f3c 100644 --- a/configure.ac +++ b/configure.ac @@ -12,6 +12,8 @@ AC_PROG_LIBTOOL AC_HEADER_STDC AM_PATH_PYTHON AM_PATH_PYTHON3 +AX_CODE_COVERAGE +AX_ADD_AM_MACRO_STATIC([]) AC_CHECK_LIB([hiredis], [redisConnect]) PKG_CHECK_MODULES([LIBNL], [libnl-3.0 libnl-genl-3.0 libnl-route-3.0 libnl-nf-3.0]) diff --git a/debian/rules b/debian/rules index eab9a2b65..502265eed 100755 --- a/debian/rules +++ b/debian/rules @@ -23,8 +23,8 @@ include /usr/share/dpkg/default.mk # dh_make generated override targets # This is example for Cmake (See https://bugs.debian.org/641051 ) -#override_dh_auto_configure: -# dh_auto_configure -- \ +override_dh_auto_configure: + dh_auto_configure -- $(DEB_CONFIGURE_EXTRA_FLAGS) # -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH) override_dh_auto_install: diff --git a/tests/Makefile.am b/tests/Makefile.am index 25827baba..2067dd190 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -37,4 +37,4 @@ tests_SOURCES = redis_ut.cpp \ tests_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_GTEST) $(LIBNL_CFLAGS) tests_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_GTEST) $(LIBNL_CFLAGS) -tests_LDADD = $(LDADD_GTEST) -lpthread -L$(top_srcdir)/common -lswsscommon $(LIBNL_LIBS) +tests_LDADD = $(LDADD_GTEST) -lpthread -L$(top_srcdir)/common -lswsscommon $(LIBNL_LIBS) $(CODE_COVERAGE_LIBS)