[ovs-dev] [PATCH ovn 2/2] ci: Enable AddressSanitizer in Linux CI runs.

Dumitru Ceara dceara at redhat.com
Wed Dec 16 11:17:45 UTC 2020


On 12/16/20 11:24 AM, Ilya Maximets wrote:
> On 12/16/20 9:11 AM, Dumitru Ceara wrote:
>> To make sure no memory leaks or invalid accesses reported by
>> AddressSanitizer are missed, also skip rechecking tests if
>> AddressSanitizer reports are present in the test run directory.
> 
> Hi, Dumitru.
> 
> Thanks for working on this!  I think that it's very useful as we just
> fixed all the leaks detected by the testsuite.  Some comments inline.
> 
> Best regards, Ilya Maximets.
> 
>>
>> Note: This doubles GitHub Actions CI time from ~9 minutes (before the
>>       change) to ~18 minutes (after the change).
> 
> It might make sense to only have one job that runs under address sanitizer.
> That should save some CI time.  It might be a single clang build with tests
> enabled (I have no experience with gcc+sanitizer).
> 

Makes sense, I'll enable it only for clang+tests.

>>
>> Signed-off-by: Dumitru Ceara <dceara at redhat.com>
>> ---
>>  .ci/linux-build.sh |    2 +-
>>  tests/automake.mk  |    6 +++++-
>>  2 files changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
>> index 0e9f87f..6943b01 100755
>> --- a/.ci/linux-build.sh
>> +++ b/.ci/linux-build.sh
>> @@ -3,7 +3,7 @@
>>  set -o errexit
>>  set -x
>>  
>> -CFLAGS=""
>> +CFLAGS="-fsanitize=address -fno-omit-frame-pointer -fno-common"
> 
> This affects both OVS and OVN.  It might be better to only build OVN
> with sanitizer enabled to avoid random issues in OVS code.
> This should also speed tests up a bit, I guess.
> 

Great point.  It does.  Testing it out it only adds 4m to the test run
(instead of 8m when enabling sanitizer for OVS too).

>>  SPARSE_FLAGS=""
>>  EXTRA_OPTS="--enable-Werror"
>>  
>> diff --git a/tests/automake.mk b/tests/automake.mk
>> index c5c286e..34464c7 100644
>> --- a/tests/automake.mk
>> +++ b/tests/automake.mk
>> @@ -52,6 +52,7 @@ check_SCRIPTS += tests/atlocal
>>  
>>  TESTSUITE = $(srcdir)/tests/testsuite
>>  TESTSUITE_PATCH = $(srcdir)/tests/testsuite.patch
>> +TESTSUITE_DIR = $(abs_top_builddir)/tests/testsuite.dir
>>  SYSTEM_KMOD_TESTSUITE = $(srcdir)/tests/system-kmod-testsuite
>>  SYSTEM_USERSPACE_TESTSUITE = $(srcdir)/tests/system-userspace-testsuite
>>  DISTCLEANFILES += tests/atconfig tests/atlocal
>> @@ -61,8 +62,11 @@ AUTOTEST_PATH = $(ovs_builddir)/utilities:$(ovs_builddir)/vswitchd:$(ovs_builddi
>>  export ovs_srcdir
>>  
>>  check-local:
>> +	find $(TESTSUITE_DIR) -name 'asan.*' | xargs -n1 rm -f
> 
> This should not be necessary to remove asan reports, because autotest removes
> directories before the test.  As we discussed off-list, this was to avoid
> skipping the recheck if started with e.g., 'TESTSUITEFLAGS="43" RECHECK="yes',
> while there is an asan report for some other test, but it's not very frequent
> scenario, and I don't think that we will want to loose asan reports for other
> tests in this case anyway.
> 

Makes sense, I'll fix it in v2.

Thanks for the review!

Regards,
Dumitru

>>  	set $(SHELL) '$(TESTSUITE)' -C tests AUTOTEST_PATH=$(AUTOTEST_PATH); \
>> -	"$$@" $(TESTSUITEFLAGS) || (test X'$(RECHECK)' = Xyes && "$$@" --recheck)
>> +	"$$@" $(TESTSUITEFLAGS) || \
>> +	(test -z "$$(find $(TESTSUITE_DIR) -name 'asan.*')" && \
>> +	 test X'$(RECHECK)' = Xyes && "$$@" --recheck)
>>  

>>  # Python Coverage support.
>>  # Requires coverage.py http://nedbatchelder.com/code/coverage/.
>>
> 



More information about the dev mailing list