diff options
author | Dave Barach <dave@barachs.net> | 2019-05-06 10:49:41 -0400 |
---|---|---|
committer | Paul Vinciguerra <pvinci@vinciconsulting.com> | 2019-05-06 20:48:51 +0000 |
commit | ad64687e8bc3e208797ce1d5b16936f51d6cf632 (patch) | |
tree | 14f15c2f326bda0bbc4d05c2f73bae9f5c71c0c0 | |
parent | d7566cb70bbd1917e25e47c08a26c72451d86794 (diff) |
gcov / test framework: sigterm not sigkill
Otherwise, gcov data vanishes without a trace.
Add a __gcov_flush() call to the unix signal handler, under #ifdef
CLIB_GCOV. Add -DCLIB_GCOV to vpp_gcov_TAG_CFLAGS.
Change-Id: I2726e671b26dfbe7fae88f46a8207bb2b5106884
Signed-off-by: Dave Barach <dave@barachs.net>
-rw-r--r-- | build-data/platforms/vpp.mk | 5 | ||||
-rwxr-xr-x | src/vlib/unix/main.c | 11 | ||||
-rw-r--r-- | test/framework.py | 2 | ||||
-rw-r--r-- | test/test_vcl.py | 2 |
4 files changed, 15 insertions, 5 deletions
diff --git a/build-data/platforms/vpp.mk b/build-data/platforms/vpp.mk index ffafe861294..97484802581 100644 --- a/build-data/platforms/vpp.mk +++ b/build-data/platforms/vpp.mk @@ -37,9 +37,8 @@ vpp_clang_TAG_CFLAGS = -g -O2 -DFORTIFY_SOURCE=2 -fstack-protector -fPIC -Werror vpp_clang_TAG_CXXFLAGS = -g -O2 -DFORTIFY_SOURCE=2 -fstack-protector -fPIC -Werror vpp_clang_TAG_LDFLAGS = -g -O2 -DFORTIFY_SOURCE=2 -fstack-protector -fPIC -Werror -vpp_gcov_TAG_CFLAGS = -g -O0 -DCLIB_DEBUG -fPIC -Werror -fprofile-arcs -ftest-coverage -vpp_gcov_TAG_LDFLAGS = -g -O0 -DCLIB_DEBUG -fPIC -Werror -coverage +vpp_gcov_TAG_CFLAGS = -g -O0 -DCLIB_DEBUG -DCLIB_GCOV -fPIC -Werror -fprofile-arcs -ftest-coverage +vpp_gcov_TAG_LDFLAGS = -g -O0 -DCLIB_DEBUG -DCLIB_GCOV -fPIC -Werror -coverage vpp_coverity_TAG_CFLAGS = -g -O2 -fPIC -Werror -D__COVERITY__ vpp_coverity_TAG_LDFLAGS = -g -O2 -fPIC -Werror -D__COVERITY__ - diff --git a/src/vlib/unix/main.c b/src/vlib/unix/main.c index ed909b65feb..82de8ec7632 100755 --- a/src/vlib/unix/main.c +++ b/src/vlib/unix/main.c @@ -139,6 +139,17 @@ unix_signal_handler (int signum, siginfo_t * si, ucontext_t * uc) break; } +#ifdef CLIB_GCOV + /* + * Test framework sends SIGTERM, so we need to flush the + * code coverage stats here. + */ + { + void __gcov_flush (void); + __gcov_flush (); + } +#endif + /* Null terminate. */ vec_add1 (syslog_msg, 0); diff --git a/test/framework.py b/test/framework.py index 25db2b72b34..4ce8bc1380d 100644 --- a/test/framework.py +++ b/test/framework.py @@ -530,7 +530,7 @@ class VppTestCase(unittest.TestCase): cls.vpp.poll() if cls.vpp.returncode is None: cls.logger.debug("Sending TERM to vpp") - cls.vpp.kill() + cls.vpp.terminate() cls.logger.debug("Waiting for vpp to die") cls.vpp.communicate() cls.logger.debug("Deleting class vpp attribute on %s", diff --git a/test/test_vcl.py b/test/test_vcl.py index feb4e39120c..269a96107b2 100644 --- a/test/test_vcl.py +++ b/test/test_vcl.py @@ -202,7 +202,7 @@ class VCLTestCase(VppTestCase): if os.path.isdir('/proc/{}'.format(worker_server.process.pid)): self.logger.info("Killing server worker process (pid %d)" % worker_server.process.pid) - os.killpg(os.getpgid(worker_server.process.pid), signal.SIGKILL) + os.killpg(os.getpgid(worker_server.process.pid), signal.SIGTERM) worker_server.join() self.logger.info("Client worker result is `%s'" % worker_client.result) error = False |