diff --git a/.artifactignore b/.artifactignore index cbaad306e2..1126a160d9 100644 --- a/.artifactignore +++ b/.artifactignore @@ -1,5 +1,2 @@ **/* !*.deb -!coverage.info -!coverage.xml -!build.info diff --git a/.azure-pipelines/build-docker-sonic-vs-template.yml b/.azure-pipelines/build-docker-sonic-vs-template.yml index e276bd332d..9d1e8065fc 100644 --- a/.azure-pipelines/build-docker-sonic-vs-template.yml +++ b/.azure-pipelines/build-docker-sonic-vs-template.yml @@ -141,17 +141,12 @@ jobs: find $(Build.ArtifactStagingDirectory)/download/sairedis -name '*.deb' -exec cp "{}" .azure-pipelines/docker-sonic-vs/debs \; cp -v $(Build.ArtifactStagingDirectory)/download/*.deb .azure-pipelines/docker-sonic-vs/debs - if [ -f $(Build.ArtifactStagingDirectory)/download/coverage.info ]; then - cp -v $(Build.ArtifactStagingDirectory)/download/coverage.info $(Build.ArtifactStagingDirectory)/ - cp -v $(Build.ArtifactStagingDirectory)/download/coverage.xml $(Build.ArtifactStagingDirectory)/ - fi pushd .azure-pipelines - build_dir=$(grep BUILD_DIR $(Build.ArtifactStagingDirectory)/download/build.info | cut -d= -f2) - build_args="--build-arg build_dir=$build_dir" + build_args="" if [ '${{ parameters.asan }}' == True ]; then - build_args="$build_args --build-arg need_dbg=y" + build_args="--build-arg need_dbg=y" fi docker build $build_args --no-cache -t docker-sonic-vs:$(Build.DefinitionName).$(Build.BuildNumber).asan-${{ parameters.asan }} docker-sonic-vs diff --git a/.azure-pipelines/build-template.yml b/.azure-pipelines/build-template.yml index 9c7e84b208..5cf35aafe9 100644 --- a/.azure-pipelines/build-template.yml +++ b/.azure-pipelines/build-template.yml @@ -105,7 +105,6 @@ jobs: swig4.0 \ libdbus-1-dev \ libteam-dev - sudo pip3 install lcov_cobertura displayName: "Install dependencies" - task: DownloadPipelineArtifact@2 inputs: @@ -194,7 +193,6 @@ jobs: cp -r pytest.tgz $(Build.ArtifactStagingDirectory)/ if [ '${{ parameters.archive_gcov }}' == True ]; then export ENABLE_GCOV=y - echo BUILD_DIR=$(pwd) > build.info fi if [ '${{ parameters.asan }}' == True ]; then export ENABLE_ASAN=y diff --git a/.azure-pipelines/docker-sonic-vs/Dockerfile b/.azure-pipelines/docker-sonic-vs/Dockerfile index d3664cb1c0..750d136957 100644 --- a/.azure-pipelines/docker-sonic-vs/Dockerfile +++ b/.azure-pipelines/docker-sonic-vs/Dockerfile @@ -2,8 +2,6 @@ FROM docker-sonic-vs ARG docker_container_name ARG need_dbg -ARG build_dir -ENV BUILD_DIR=$build_dir COPY ["debs", "/debs"] @@ -26,12 +24,4 @@ RUN if [ "$need_dbg" = "y" ] ; then dpkg -i /debs/swss-dbg_1.0.0_amd64.deb ; fi RUN apt-get update -RUN apt-get -y install software-properties-common libdatetime-perl libcapture-tiny-perl build-essential libcpanel-json-xs-perl git - -RUN git clone -b v2.0 --single-branch --depth 1 https://github.com/linux-test-project/lcov && cd lcov && make install - -RUN lcov --version - -RUN pip3 install lcov_cobertura - -RUN if [ -n "$BUILD_DIR" ]; then mkdir -p $BUILD_DIR && tar -xf /tmp/gcov/gcov-source.tar -C $BUILD_DIR; fi +RUN apt-get -y install lcov diff --git a/.azure-pipelines/test-docker-sonic-vs-template.yml b/.azure-pipelines/test-docker-sonic-vs-template.yml index b7443bbd15..263365d8b7 100644 --- a/.azure-pipelines/test-docker-sonic-vs-template.yml +++ b/.azure-pipelines/test-docker-sonic-vs-template.yml @@ -44,16 +44,11 @@ jobs: - job: displayName: vstest timeoutInMinutes: ${{ parameters.timeout }} - ${{ if parameters.archive_gcov }}: - variables: - DIFF_COVER_CHECK_THRESHOLD: 80 - DIFF_COVER_ENABLE: 'true' - pool: sonic-common-test + pool: sonic-common steps: - script: | - ip a show dev eth0 || true ls -A1 | xargs -I{} sudo rm -rf {} displayName: "Clean workspace" - checkout: self @@ -83,16 +78,6 @@ jobs: path: $(Build.ArtifactStagingDirectory)/download displayName: "Download sonic buildimage ubuntu20.04 deb packages" - - 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/ubuntu/20.04/prod - sudo apt-get update - sudo apt-get install -y dotnet-sdk-7.0 - sudo dotnet tool install dotnet-reportgenerator-globaltool --tool-path /usr/bin - displayName: "Install .NET CORE" - - script: | set -ex sudo .azure-pipelines/build_and_install_module.sh @@ -107,7 +92,6 @@ jobs: sudo apt-get install -y net-tools bridge-utils vlan sudo apt-get install -y python3-pip sudo pip3 install pytest==4.6.2 attrs==19.1.0 exabgp==4.0.10 distro==1.5.0 docker>=4.4.1 redis==3.3.4 flaky==3.7.0 - sudo pip3 install lcov_cobertura displayName: "Install dependencies" - script: | @@ -122,9 +106,7 @@ jobs: params="" if [ '${{ parameters.archive_gcov }}' == True ]; then - cp $(Build.ArtifactStagingDirectory)/download/coverage.info ./ - cp $(Build.ArtifactStagingDirectory)/download/coverage.xml ./ - params=" ${params} --enable-coverage --force-recreate-dvs " + params=" ${params} --keeptb " fi if [ '${{ parameters.asan }}' == True ]; then params=" ${params} --graceful-stop " @@ -133,37 +115,44 @@ jobs: params=" ${params} --num-ports=${{ parameters.num_ports }} " fi - all_tests=$(ls test_*.py | xargs) + all_tests=$(ls test_*.py) all_tests="${all_tests} p4rt" if [ -n '${{ parameters.run_tests_pattern }}' ]; then - all_tests=" $(ls ${{ parameters.run_tests_pattern }} | xargs) " + all_tests=" $(ls ${{ parameters.run_tests_pattern }}) " + fi + + test_set=() + # Run 20 tests as a set. + for test in ${all_tests}; do + test_set+=("${test}") + if [ ${#test_set[@]} -ge 20 ]; then + test_name=$(echo "${test_set[0]}" | cut -d "." -f 1) + echo "${test_set[*]}" | xargs sudo py.test -v --force-flaky --junitxml="${test_name}_tr.xml" $params --imgname=docker-sonic-vs:$(Build.DefinitionName).$(Build.BuildNumber).asan-${{ parameters.asan }} + container_count=$(docker ps -q -a | wc -l) + if [ '${{ parameters.archive_gcov }}' == True ] && [ ${container_count} -gt 0 ]; then + ./gcov_support.sh set_environment $(Build.ArtifactStagingDirectory) + docker stop $(docker ps -q -a) + docker rm $(docker ps -q -a) + fi + test_set=() + fi + done + if [ ${#test_set[@]} -gt 0 ]; then + test_name=$(echo "${test_set[0]}" | cut -d "." -f 1) + echo "${test_set[*]}" | xargs sudo py.test -v $params --force-flaky --junitxml="${test_name}_tr.xml" $params --imgname=docker-sonic-vs:$(Build.DefinitionName).$(Build.BuildNumber).asan-${{ parameters.asan }} + container_count=$(docker ps -q -a | wc -l) + if [ '${{ parameters.archive_gcov }}' == True ] && [ ${container_count} -gt 0 ]; then + ./gcov_support.sh set_environment $(Build.ArtifactStagingDirectory) + docker stop $(docker ps -q -a) + docker rm $(docker ps -q -a) + fi fi - # Run the tests in parallel and retry - retry=3 - IMAGE_NAME=docker-sonic-vs:$(Build.DefinitionName).$(Build.BuildNumber).asan-${{ parameters.asan }} - echo $all_tests | xargs -n 1 | xargs -P 8 -I TEST_MODULE sudo ./run-tests.py "$IMAGE_NAME" "$params" "TEST_MODULE" 3 rm -rf $(Build.ArtifactStagingDirectory)/download displayName: "Run vs tests" continueOnError: ${{ parameters.asan }} - - script: | - set -ex - reportgenerator -reporttypes:Cobertura -reports:tests/*coverage.xml -targetdir:. - mkdir $(Build.ArtifactStagingDirectory)/gcov - cp Cobertura.xml tests/*coverage.xml $(Build.ArtifactStagingDirectory)/gcov/ - cp tests/*coverage.info $(Build.ArtifactStagingDirectory)/gcov/ - condition: ${{ parameters.archive_gcov }} - displayName: "Generate coverage.xml" - - - task: PublishCodeCoverageResults@1 - condition: ${{ parameters.archive_gcov }} - inputs: - codeCoverageTool: Cobertura - summaryFileLocation: '$(System.DefaultWorkingDirectory)/Cobertura.xml' - displayName: 'Publish test coverage' - - task: PublishTestResults@2 inputs: testResultsFiles: '**/*_tr.xml' @@ -176,9 +165,21 @@ jobs: if [ '${{ parameters.asan }}' == True ]; then cp -vr tests/log/*/log/asan $(Build.ArtifactStagingDirectory)/ fi + + if [ '${{ parameters.archive_gcov }}' == True ]; then + sudo apt-get install -y lcov + cd $(Build.ArtifactStagingDirectory)/gcov_tmp/ + tar -zcvf sonic-gcov.tar.gz sonic-gcov/ + rm -rf sonic-gcov + fi displayName: "Collect logs" condition: always() + - publish: $(Build.ArtifactStagingDirectory)/gcov_tmp + artifact: ${{ parameters.gcov_artifact_name }} + displayName: "Publish gcov output" + condition: and(succeeded(), eq('${{ parameters.archive_gcov }}', true)) + - publish: $(Build.ArtifactStagingDirectory)/ artifact: ${{ parameters.log_artifact_name }}@$(System.JobAttempt) displayName: "Publish logs" diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 083fb1047c..362a106225 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -41,7 +41,6 @@ stages: - template: .azure-pipelines/build-template.yml parameters: arch: amd64 - pool: sonicbld sonic_slave: sonic-slave-bullseye common_lib_artifact_name: common-lib swss_common_artifact_name: sonic-swss-common @@ -56,7 +55,6 @@ stages: - template: .azure-pipelines/build-template.yml parameters: arch: amd64 - pool: sonicbld sonic_slave: sonic-slave-bullseye common_lib_artifact_name: common-lib swss_common_artifact_name: sonic-swss-common @@ -139,8 +137,8 @@ stages: asan: true - stage: Gcov - condition: false dependsOn: Test + condition: in(dependencies.Test.result, 'Succeeded', 'SucceededWithIssues') jobs: - template: .azure-pipelines/gcov.yml parameters: diff --git a/cfgmgr/Makefile.am b/cfgmgr/Makefile.am index a8cbddb4e7..09fda145fc 100644 --- a/cfgmgr/Makefile.am +++ b/cfgmgr/Makefile.am @@ -102,20 +102,20 @@ macsecmgrd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI) $( macsecmgrd_LDADD = $(LDFLAGS_ASAN) $(COMMON_LIBS) $(SAIMETA_LIBS) if GCOV_ENABLED -vlanmgrd_SOURCES += ../gcovpreload/gcovpreload.cpp -teammgrd_SOURCES += ../gcovpreload/gcovpreload.cpp -portmgrd_SOURCES += ../gcovpreload/gcovpreload.cpp -fabricmgrd_SOURCES += ../gcovpreload/gcovpreload.cpp -intfmgrd_SOURCES += ../gcovpreload/gcovpreload.cpp -buffermgrd_SOURCES += ../gcovpreload/gcovpreload.cpp -vrfmgrd_SOURCES += ../gcovpreload/gcovpreload.cpp -nbrmgrd_SOURCES += ../gcovpreload/gcovpreload.cpp -vxlanmgrd_SOURCES += ../gcovpreload/gcovpreload.cpp -sflowmgrd_SOURCES += ../gcovpreload/gcovpreload.cpp -natmgrd_SOURCES += ../gcovpreload/gcovpreload.cpp -coppmgrd_SOURCES += ../gcovpreload/gcovpreload.cpp -tunnelmgrd_SOURCES += ../gcovpreload/gcovpreload.cpp -macsecmgrd_SOURCES += ../gcovpreload/gcovpreload.cpp +vlanmgrd_LDADD += -lgcovpreload +teammgrd_LDADD += -lgcovpreload +portmgrd_LDADD += -lgcovpreload +intfmgrd_LDADD+= -lgcovpreload +buffermgrd_LDADD += -lgcovpreload +vrfmgrd_LDADD += -lgcovpreload +nbrmgrd_LDADD += -lgcovpreload +vxlanmgrd_LDADD += -lgcovpreload +sflowmgrd_LDADD += -lgcovpreload +natmgrd_LDADD += -lgcovpreload +coppmgrd_LDADD += -lgcovpreload +tunnelmgrd_LDADD += -lgcovpreload +macsecmgrd_LDADD += -lgcovpreload +fabricmgrd_LDADD += -lgcovpreload endif if ASAN_ENABLED diff --git a/debian/rules b/debian/rules index 2291b00ba7..42e82b2f30 100755 --- a/debian/rules +++ b/debian/rules @@ -33,7 +33,7 @@ ifeq ($(ENABLE_ASAN), y) endif ifeq ($(ENABLE_GCOV), y) - configure_opts += --enable-gcov --enable-code-coverage CFLAGS="-g -O0" CXXFLAGS="-g -O0" + configure_opts += --enable-gcov CFLAGS="-g -O0" CXXFLAGS="-g -O0" endif override_dh_auto_configure: @@ -43,10 +43,9 @@ override_dh_auto_install: dh_auto_install --destdir=debian/swss ifeq ($(ENABLE_GCOV), y) mkdir -p debian/swss/tmp/gcov - lcov -c --directory . --no-external --exclude "$(shell pwd)/tests/*" --exclude "$(shell pwd)/**/tests/*" --output-file coverage.info - lcov_cobertura coverage.info -o coverage.xml - find ./ -type f -regex '.*\.\(h\|cpp\|gcno\|info\)' | tar -cf debian/swss/tmp/gcov/gcov-source.tar -T - + sh ./tests/gcov_support.sh collect swss endif override_dh_strip: dh_strip --dbg-package=swss-dbg + diff --git a/fdbsyncd/Makefile.am b/fdbsyncd/Makefile.am index 93271f4e78..b35ee5f309 100644 --- a/fdbsyncd/Makefile.am +++ b/fdbsyncd/Makefile.am @@ -15,7 +15,7 @@ fdbsyncd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(COV_CFLAGS) $(CF fdbsyncd_LDADD = $(LDFLAGS_ASAN) -lnl-3 -lnl-route-3 -lswsscommon $(COV_LDFLAGS) if GCOV_ENABLED -fdbsyncd_SOURCES += ../gcovpreload/gcovpreload.cpp +fdbsyncd_LDADD += -lgcovpreload endif if ASAN_ENABLED diff --git a/fpmsyncd/Makefile.am b/fpmsyncd/Makefile.am index 74d36b36c7..29b81d7381 100644 --- a/fpmsyncd/Makefile.am +++ b/fpmsyncd/Makefile.am @@ -15,7 +15,7 @@ fpmsyncd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_ASAN) fpmsyncd_LDADD = $(LDFLAGS_ASAN) -lnl-3 -lnl-route-3 -lswsscommon if GCOV_ENABLED -fpmsyncd_SOURCES += ../gcovpreload/gcovpreload.cpp +fpmsyncd_LDADD += -lgcovpreload endif if ASAN_ENABLED diff --git a/gcovpreload/Makefile b/gcovpreload/Makefile index 5039fe5056..c4328c72b9 100644 --- a/gcovpreload/Makefile +++ b/gcovpreload/Makefile @@ -6,7 +6,7 @@ CXX:=$(shell sh -c 'type $${CXX%% *} >/dev/null 2>/dev/null && echo $(CXX) || ec DYLIBSUFFIX=so DYLIBNAME=$(LIBNAME).$(DYLIBSUFFIX) -DYLIB_MAKE_CMD=$(CC) -shared -fpic gcovpreload.cpp -o ${DYLIBNAME} +DYLIB_MAKE_CMD=$(CC) -shared -fpic gcovpreload.c -o ${DYLIBNAME} all: $(DYLIB_MAKE_CMD) diff --git a/gcovpreload/gcovpreload.cpp b/gcovpreload/gcovpreload.c similarity index 83% rename from gcovpreload/gcovpreload.cpp rename to gcovpreload/gcovpreload.c index a545c217ce..2141e9ef39 100644 --- a/gcovpreload/gcovpreload.cpp +++ b/gcovpreload/gcovpreload.c @@ -2,15 +2,15 @@ #include #include #include - -extern "C" void __gcov_dump(); +#define SIMPLE_WAY void sighandler(int signo) { #ifdef SIMPLE_WAY exit(signo); #else - __gcov_dump(); + extern void __gcov_flush(); + __gcov_flush(); /* flush out gcov stats data */ raise(signo); /* raise the signal again to crash process */ #endif } @@ -33,9 +33,9 @@ void ctor() struct sigaction sa; sa.sa_handler = sighandler; sigemptyset(&sa.sa_mask); - sa.sa_flags = (int)SA_RESETHAND; + sa.sa_flags = SA_RESETHAND; - for(i = 0; i < (int)(sizeof(sigs)/sizeof(sigs[0])); ++i) { + for(i = 0; i < sizeof(sigs)/sizeof(sigs[0]); ++i) { if (sigaction(sigs[i], &sa, NULL) == -1) { perror("Could not set signal handler"); } diff --git a/mclagsyncd/Makefile.am b/mclagsyncd/Makefile.am index eb4fc20d0c..d4b4b03c40 100644 --- a/mclagsyncd/Makefile.am +++ b/mclagsyncd/Makefile.am @@ -15,7 +15,7 @@ mclagsyncd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_ASAN) mclagsyncd_LDADD = $(LDFLAGS_ASAN) -lnl-3 -lnl-route-3 -lswsscommon if GCOV_ENABLED -mclagsyncd_SOURCES += ../gcovpreload/gcovpreload.cpp +mclagsyncd_LDADD += -lgcovpreload endif if ASAN_ENABLED diff --git a/natsyncd/Makefile.am b/natsyncd/Makefile.am index 562d452c41..cdee9d52ae 100644 --- a/natsyncd/Makefile.am +++ b/natsyncd/Makefile.am @@ -15,7 +15,7 @@ natsyncd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_ASAN) natsyncd_LDADD = $(LDFLAGS_ASAN) -lnl-3 -lnl-route-3 -lnl-nf-3 -lswsscommon if GCOV_ENABLED -natsyncd_SOURCES += ../gcovpreload/gcovpreload.cpp +natsyncd_LDADD += -lgcovpreload endif if ASAN_ENABLED diff --git a/neighsyncd/Makefile.am b/neighsyncd/Makefile.am index 1f34e9e92f..cb61a83bbc 100644 --- a/neighsyncd/Makefile.am +++ b/neighsyncd/Makefile.am @@ -15,7 +15,7 @@ neighsyncd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_ASAN) neighsyncd_LDADD = $(LDFLAGS_ASAN) -lnl-3 -lnl-route-3 -lswsscommon if GCOV_ENABLED -neighsyncd_SOURCES += ../gcovpreload/gcovpreload.cpp +neighsyncd_LDADD += -lgcovpreload endif if ASAN_ENABLED diff --git a/orchagent/Makefile.am b/orchagent/Makefile.am index 6af8189c95..2af9d4aa0d 100644 --- a/orchagent/Makefile.am +++ b/orchagent/Makefile.am @@ -148,9 +148,9 @@ orchagent_restart_check_CPPFLAGS = $(DBGFLAGS) $(AM_CPPFLAGS) $(CFLAGS_COMMON) $ orchagent_restart_check_LDADD = $(LDFLAGS_ASAN) -lhiredis -lswsscommon -lpthread if GCOV_ENABLED -orchagent_SOURCES += ../gcovpreload/gcovpreload.cpp -routeresync_SOURCES += ../gcovpreload/gcovpreload.cpp -orchagent_restart_check_SOURCES += ../gcovpreload/gcovpreload.cpp +orchagent_LDADD += -lgcovpreload +routeresync_LDADD += -lgcovpreload +orchagent_restart_check_LDADD += -lgcovpreload endif if ASAN_ENABLED diff --git a/portsyncd/Makefile.am b/portsyncd/Makefile.am index b65e3b4a4f..3db6187059 100644 --- a/portsyncd/Makefile.am +++ b/portsyncd/Makefile.am @@ -15,7 +15,7 @@ portsyncd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_ASAN) portsyncd_LDADD = $(LDFLAGS_ASAN) -lnl-3 -lnl-route-3 -lswsscommon if GCOV_ENABLED -portsyncd_SOURCES += ../gcovpreload/gcovpreload.cpp +portsyncd_LDADD += -lgcovpreload endif if ASAN_ENABLED diff --git a/swssconfig/Makefile.am b/swssconfig/Makefile.am index bd8bcc226a..3cfc0b9629 100644 --- a/swssconfig/Makefile.am +++ b/swssconfig/Makefile.am @@ -21,8 +21,8 @@ swssplayer_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_ASAN) swssplayer_LDADD = $(LDFLAGS_ASAN) -lswsscommon if GCOV_ENABLED -swssconfig_SOURCES += ../gcovpreload/gcovpreload.cpp -swssplayer_SOURCES += ../gcovpreload/gcovpreload.cpp +swssconfig_LDADD += -lgcovpreload +swssplayer_LDADD += -lgcovpreload endif if ASAN_ENABLED diff --git a/teamsyncd/Makefile.am b/teamsyncd/Makefile.am index c72498d9e3..a13573bf25 100644 --- a/teamsyncd/Makefile.am +++ b/teamsyncd/Makefile.am @@ -15,7 +15,7 @@ teamsyncd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_ASAN) teamsyncd_LDADD = $(LDFLAGS_ASAN) -lnl-3 -lnl-route-3 -lhiredis -lswsscommon -lteam if GCOV_ENABLED -teamsyncd_SOURCES += ../gcovpreload/gcovpreload.cpp +teamsyncd_LDADD += -lgcovpreload endif if ASAN_ENABLED diff --git a/tests/conftest.py b/tests/conftest.py index ef95cd96bd..9264417214 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -11,7 +11,6 @@ import sys import tarfile import io -import traceback from typing import Dict, Tuple from datetime import datetime @@ -103,11 +102,6 @@ def pytest_addoption(parser): type=int, help="number of ports") - parser.addoption("--enable-coverage", - action="store_true", - default=False, - help="Collect the test coverage information") - def random_string(size=4, chars=string.ascii_uppercase + string.digits): return "".join(random.choice(chars) for x in range(size)) @@ -289,7 +283,6 @@ def __init__( newctnname: str = None, ctnmounts: Dict[str, str] = None, buffer_model: str = None, - enable_coverage: bool = False ): self.basicd = ["redis-server", "rsyslogd"] self.swssd = [ @@ -311,7 +304,6 @@ def __init__( self.dvsname = name self.vct = vct self.ctn = None - self.enable_coverage = enable_coverage self.cleanup = not keeptb @@ -448,37 +440,10 @@ def del_appl_db(self): if getattr(self, 'appldb', False): del self.appldb - def collect_coverage(self): - if not self.enable_coverage: - return - try: - # Generate the gcda files - self.runcmd('killall5 -15') - time.sleep(1) - - # Stop the services to reduce the CPU comsuption - if self.cleanup: - self.runcmd('supervisorctl stop all') - - # Generate the converage info by lcov and copy to the host - cmd = f"docker exec {self.ctn.short_id} sh -c 'cd $BUILD_DIR; rm -rf **/.libs ./lib/libSaiRedis*; lcov -c --directory . --no-external --exclude tests --ignore-errors gcov,unused --output-file /tmp/coverage.info; sed -i \"s#SF:$BUILD_DIR/#SF:#\" /tmp/coverage.info; lcov_cobertura /tmp/coverage.info -o /tmp/coverage.xml'" - subprocess.getstatusoutput(cmd) - cmd = f"docker exec {self.ctn.short_id} sh -c 'cd $BUILD_DIR; find . -name *.gcda -type f -exec tar -rf /tmp/gcda.tar {{}} \\;'" - subprocess.getstatusoutput(cmd) - cmd = f"docker cp {self.ctn.short_id}:/tmp/gcda.tar {self.ctn.short_id}.gcda.tar" - subprocess.getstatusoutput(cmd) - cmd = f"docker cp {self.ctn.short_id}:/tmp/coverage.info {self.ctn.short_id}.coverage.info" - subprocess.getstatusoutput(cmd) - cmd = f"docker cp {self.ctn.short_id}:/tmp/coverage.xml {self.ctn.short_id}.coverage.xml" - subprocess.getstatusoutput(cmd) - except: - traceback.print_exc() def destroy(self) -> None: self.del_appl_db() - self.collect_coverage() - # In case persistent dvs was used removed all the extra server link # that were created if self.persistent: @@ -486,13 +451,10 @@ def destroy(self) -> None: # persistent and clean-up flag are mutually exclusive elif self.cleanup: - try: - self.ctn.remove(force=True) - self.ctn_sw.remove(force=True) - os.system(f"rm -rf {self.mount}") - self.destroy_servers() - except docker.errors.NotFound: - print("Skipped the container not found error, the container has already removed.") + self.ctn.remove(force=True) + self.ctn_sw.remove(force=True) + os.system(f"rm -rf {self.mount}") + self.destroy_servers() def destroy_servers(self): for s in self.servers: @@ -1438,8 +1400,7 @@ def __init__( log_path=None, max_cpu=2, forcedvs=None, - topoFile=None, - enable_coverage=False, + topoFile=None ): self.ns = namespace self.chassbr = "br4chs" @@ -1453,7 +1414,6 @@ def __init__( self.log_path = log_path self.max_cpu = max_cpu self.forcedvs = forcedvs - self.enable_coverage = enable_coverage if self.ns is None: self.ns = random_string() @@ -1506,7 +1466,7 @@ def find_all_ctns(self): self.dvss[ctn.name] = DockerVirtualSwitch(ctn.name, self.imgname, self.keeptb, self.env, log_path=ctn.name, max_cpu=self.max_cpu, forcedvs=self.forcedvs, - vct=self, enable_coverage=self.enable_coverage) + vct=self) if self.chassbr is None and len(self.dvss) > 0: ret, res = self.ctn_runcmd(self.dvss.values()[0].ctn, "sonic-cfggen --print-data -j /usr/share/sonic/virtual_chassis/vct_connections.json") @@ -1577,8 +1537,6 @@ def handle_request(self): def destroy(self): self.verify_vct() - for dv in self.dvss.values(): - dv.collect_coverage() if self.keeptb: return self.oper = "delete" @@ -1629,8 +1587,7 @@ def create_vct_ctn(self, ctndir): max_cpu=self.max_cpu, forcedvs=self.forcedvs, vct=self,newctnname=ctnname, - ctnmounts=vol, - enable_coverage=self.enable_coverage) + ctnmounts=vol) self.set_ctninfo(ctndir, ctnname, self.dvss[ctnname].pid) return @@ -1802,7 +1759,6 @@ def manage_dvs(request) -> str: buffer_model = request.config.getoption("--buffer_model") force_recreate = request.config.getoption("--force-recreate-dvs") graceful_stop = request.config.getoption("--graceful-stop") - enable_coverage = request.config.getoption("--enable-coverage") dvs = None curr_dvs_env = [] # lgtm[py/unused-local-variable] @@ -1834,7 +1790,7 @@ def update_dvs(log_path, new_dvs_env=[]): dvs.get_logs() dvs.destroy() - dvs = DockerVirtualSwitch(name, imgname, keeptb, new_dvs_env, log_path, max_cpu, forcedvs, buffer_model = buffer_model, enable_coverage=enable_coverage) + dvs = DockerVirtualSwitch(name, imgname, keeptb, new_dvs_env, log_path, max_cpu, forcedvs, buffer_model = buffer_model) curr_dvs_env = new_dvs_env @@ -1855,7 +1811,6 @@ def update_dvs(log_path, new_dvs_env=[]): if graceful_stop: dvs.stop_swss() dvs.stop_syncd() - dvs.get_logs() dvs.destroy() @@ -1884,14 +1839,13 @@ def vst(request): keeptb = request.config.getoption("--keeptb") imgname = request.config.getoption("--imgname") max_cpu = request.config.getoption("--max_cpu") - enable_coverage = request.config.getoption("--enable-coverage") log_path = vctns if vctns else request.module.__name__ dvs_env = getattr(request.module, "DVS_ENV", []) if not topo: # use ecmp topology as default topo = "virtual_chassis/chassis_supervisor.json" vct = DockerVirtualChassisTopology(vctns, imgname, keeptb, dvs_env, log_path, max_cpu, - forcedvs, topo, enable_coverage) + forcedvs, topo) yield vct vct.get_logs(request.module.__name__) vct.destroy() @@ -1904,14 +1858,13 @@ def vct(request): keeptb = request.config.getoption("--keeptb") imgname = request.config.getoption("--imgname") max_cpu = request.config.getoption("--max_cpu") - enable_coverage = request.config.getoption("--enable-coverage") log_path = vctns if vctns else request.module.__name__ dvs_env = getattr(request.module, "DVS_ENV", []) if not topo: # use ecmp topology as default topo = "virtual_chassis/chassis_with_ecmp_neighbors.json" vct = DockerVirtualChassisTopology(vctns, imgname, keeptb, dvs_env, log_path, max_cpu, - forcedvs, topo, enable_coverage) + forcedvs, topo) yield vct vct.get_logs(request.module.__name__) vct.destroy() diff --git a/tests/run-tests.py b/tests/run-tests.py deleted file mode 100755 index a30fb1e1a8..0000000000 --- a/tests/run-tests.py +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -IMAGE_NAME=$1 -PY_TEST_PARAMS="$2" -TESTS="$3" -RETRY=$4 -[ -z "RETRY" ] && RETRY=1 -JUNITXML=$(echo "$TESTS" | cut -d "." -f1)_tr.xml - -set -x -for ((i=1; i<=$RETRY; i++)); do - echo "Running the py test for tests: $TESTS, $i/$RETRY..." - py.test -v --force-flaky --junitxml="$JUNITXML" $PY_TEST_PARAMS --imgname="$IMAGE_NAME" $TESTS && break -done diff --git a/tlm_teamd/Makefile.am b/tlm_teamd/Makefile.am index 4548ea06ba..46ddfd22f5 100644 --- a/tlm_teamd/Makefile.am +++ b/tlm_teamd/Makefile.am @@ -15,7 +15,7 @@ tlm_teamd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(JANSSON_CFLAGS) tlm_teamd_LDADD = $(LDFLAGS_ASAN) -lhiredis -lswsscommon -lteamdctl $(JANSSON_LIBS) if GCOV_ENABLED -tlm_teamd_SOURCES += ../gcovpreload/gcovpreload.cpp +tlm_teamd_LDADD += -lgcovpreload endif if ASAN_ENABLED