From b31b2b4081a361240853af222e5b055f8169e4cf Mon Sep 17 00:00:00 2001 From: David Antler Date: Wed, 21 Sep 2016 17:44:19 -0700 Subject: [PATCH] Refactor unit test linking * Build an octbstack_test static library. * Link test executables against aforementioned static library. * Remove octbstack_test.def file. * Light cleanup of various SCons scripts Note: This patch also fixes an issue where the build would fail when TEST=0 was specified on Windows. Change-Id: Ied7457fd5857396f4ce32bff37380998d66adeff Signed-off-by: David Antler Reviewed-on: https://gerrit.iotivity.org/gerrit/12115 Reviewed-by: Phil Coval Tested-by: jenkins-iotivity Reviewed-by: Dan Mihai Reviewed-by: Dave Thaler --- resource/c_common/ocrandom/test/SConscript | 16 +++------------- resource/csdk/SConscript | 21 +++++++++++++-------- resource/csdk/connectivity/test/SConscript | 3 +-- resource/csdk/octbstack_product.def | 2 +- resource/csdk/octbstack_test.def | 8 -------- .../csdk/security/provisioning/unittest/SConscript | 2 +- resource/csdk/security/unittest/SConscript | 3 +-- resource/csdk/stack/test/SConscript | 6 ++---- resource/provisioning/unittests/SConscript | 2 +- resource/unittests/SConscript | 7 +++++-- 10 files changed, 28 insertions(+), 42 deletions(-) delete mode 100644 resource/csdk/octbstack_test.def diff --git a/resource/c_common/ocrandom/test/SConscript b/resource/c_common/ocrandom/test/SConscript index 632f22c..0f9d732 100644 --- a/resource/c_common/ocrandom/test/SConscript +++ b/resource/c_common/ocrandom/test/SConscript @@ -29,24 +29,14 @@ target_os = randomtest_env.get('TARGET_OS') ###################################################################### # Build flags ###################################################################### -randomtest_env.PrependUnique(CPPPATH = [ - '../include', - '../../logger/include', - '../../../oc_logger/include', - ]) +randomtest_env.PrependUnique(CPPPATH = ['../include']) -randomtest_env.AppendUnique(LIBPATH = [randomtest_env.get('BUILD_DIR')]) -randomtest_env.PrependUnique(LIBS = ['octbstack', - 'connectivity_abstraction', - 'uuid']) +randomtest_env.AppendUnique(LIBPATH = [os.path.join(randomtest_env.get('BUILD_DIR'), 'resource', 'c_common')]) +randomtest_env.PrependUnique(LIBS = ['c_common']) if target_os in ['linux']: randomtest_env.AppendUnique(LIBS = ['m']) -if randomtest_env.get('SECURED') == '1': - if randomtest_env.get('WITH_TCP') == True: - randomtest_env.AppendUnique(LIBS = ['mbedtls', 'mbedx509','mbedcrypto']) - if randomtest_env.get('LOGGING'): randomtest_env.AppendUnique(CPPDEFINES = ['TB_LOG']) diff --git a/resource/csdk/SConscript b/resource/csdk/SConscript index 0578676..ac8d0c0 100644 --- a/resource/csdk/SConscript +++ b/resource/csdk/SConscript @@ -111,17 +111,12 @@ if target_os in ['android', 'linux', 'tizen', 'msys_nt', 'windows']: if target_os in ['windows', 'msys_nt']: # octbstack.def specifies the list of functions exported by octbstack.dll. liboctbstack_env.Replace(WINDOWS_INSERT_DEF = ['1']) - if env.get('TEST') == '1': - liboctbstack_env.Textfile(target = 'octbstack_not_secured.def', source = [File('octbstack_product.def'), File('octbstack_test.def')]) - else: - liboctbstack_env.Textfile(target = 'octbstack_not_secured.def', source = [File('octbstack_product.def')]) - if env.get('SECURED') == '1': # octbstack.dll is exporting ocpmapi APIs on Windows - there is no ocpmapi.dll. liboctbstack_env.PrependUnique(LIBS = ['ocpmapi']) - liboctbstack_env.Textfile(target = 'octbstack.def', source = [File('octbstack_not_secured.def'), File('octbstack_product_secured.def')]) + liboctbstack_env.Textfile(target = 'octbstack.def', source = [File('octbstack_product.def'), File('octbstack_product_secured.def')]) else: - liboctbstack_env.Textfile(target = 'octbstack.def', source = [File('octbstack_not_secured.def')]) + liboctbstack_env.Textfile(target = 'octbstack.def', source = [File('octbstack_product.def')]) liboctbstack_env.AppendUnique(LIBS = ['ws2_32', 'advapi32', 'iphlpapi']) else: @@ -186,13 +181,23 @@ if 'CLIENT' in rd_mode or 'SERVER' in rd_mode: if with_tcp == True: liboctbstack_src.append(OCTBSTACK_SRC + 'oickeepalive.c') +if target_os in ['linux']: + # Linux uses a Shared library because SCons chooses the shared library on Linux + # when only 'octbstack' is added to the LIBS. + # TODO: Switch Linux to use a Static library for testing like every other OS. + test_liboctbstack = liboctbstack_env.SharedLibrary('octbstack_test', liboctbstack_src) +else: + test_liboctbstack = liboctbstack_env.StaticLibrary('octbstack_test', liboctbstack_src) + +octbstack_libs = Flatten(test_liboctbstack) + if target_os in ['windows', 'msys_nt']: # Avoid a name conflict with the octbstack.lib target of the SharedLibrary. static_liboctbstack = liboctbstack_env.StaticLibrary('octbstack_static', liboctbstack_src) else: static_liboctbstack = liboctbstack_env.StaticLibrary('octbstack', liboctbstack_src) -octbstack_libs = Flatten(static_liboctbstack) +octbstack_libs += Flatten(static_liboctbstack) if target_os not in ['arduino','darwin','ios'] : shared_liboctbstack = liboctbstack_env.SharedLibrary('octbstack', liboctbstack_src) diff --git a/resource/csdk/connectivity/test/SConscript b/resource/csdk/connectivity/test/SConscript index 62dfaf4..5e9a0a2 100644 --- a/resource/csdk/connectivity/test/SConscript +++ b/resource/csdk/connectivity/test/SConscript @@ -38,8 +38,7 @@ catest_env.PrependUnique(CPPPATH = [ ]) catest_env.AppendUnique(LIBPATH = [catest_env.get('BUILD_DIR')]) -catest_env.PrependUnique(LIBS = ['gtest', 'gtest_main']) -catest_env.PrependUnique(LIBS = ['octbstack', +catest_env.PrependUnique(LIBS = ['octbstack_test', 'connectivity_abstraction', 'coap']) diff --git a/resource/csdk/octbstack_product.def b/resource/csdk/octbstack_product.def index 5f47fac..841b1bb 100644 --- a/resource/csdk/octbstack_product.def +++ b/resource/csdk/octbstack_product.def @@ -2,7 +2,7 @@ LIBRARY octbstack EXPORTS -; Windows octbstack.dll exports that are required for both products and tests. +; Windows octbstack.dll exports that are required for products. _cbor_value_decode_int64_internal _cbor_value_dup_string diff --git a/resource/csdk/octbstack_test.def b/resource/csdk/octbstack_test.def deleted file mode 100644 index 87e1853..0000000 --- a/resource/csdk/octbstack_test.def +++ /dev/null @@ -1,8 +0,0 @@ -; Windows octbstack.dll exports that are required just for tests. - -encodeAddressForRFC6874 - -OCByteStringCopy -OCConvertPayload -OCDevicePayloadCreate -OCParsePayload diff --git a/resource/csdk/security/provisioning/unittest/SConscript b/resource/csdk/security/provisioning/unittest/SConscript index 653df64..1a941a4 100644 --- a/resource/csdk/security/provisioning/unittest/SConscript +++ b/resource/csdk/security/provisioning/unittest/SConscript @@ -63,8 +63,8 @@ sptest_env.PrependUnique(CPPPATH = [ sptest_env.AppendUnique(LIBPATH = [sptest_env.get('BUILD_DIR')]) sptest_env.PrependUnique(LIBS = [ 'ocpmapi', 'oc', + 'octbstack_test', 'ocsrm', - 'octbstack', 'oc_logger', 'connectivity_abstraction', 'coap']) diff --git a/resource/csdk/security/unittest/SConscript b/resource/csdk/security/unittest/SConscript index b67de92..739e747 100644 --- a/resource/csdk/security/unittest/SConscript +++ b/resource/csdk/security/unittest/SConscript @@ -56,7 +56,7 @@ srmtest_env.PrependUnique(CPPPATH = [ srmtest_env.AppendUnique(LIBPATH = [srmtest_env.get('BUILD_DIR')]) srmtest_env.PrependUnique(LIBS = ['ocsrm', - 'octbstack', + 'octbstack_test', 'oc_logger', 'connectivity_abstraction', 'coap']) @@ -130,6 +130,5 @@ if srmtest_env.get('TEST') == '1': os.makedirs(result_dir) srmtest_env.AppendENVPath('GTEST_OUTPUT', ['xml:'+ result_dir]) srmtest_env.AppendENVPath('LD_LIBRARY_PATH', [out_dir]) - srmtest_env.AppendENVPath('PATH', [os.path.join(out_dir, 'resource', 'csdk')]) from tools.scons.RunTest import * run_test(srmtest_env,'ut','resource/csdk/security/unittest/unittest') diff --git a/resource/csdk/stack/test/SConscript b/resource/csdk/stack/test/SConscript index 46cc864..6be264a 100644 --- a/resource/csdk/stack/test/SConscript +++ b/resource/csdk/stack/test/SConscript @@ -44,7 +44,7 @@ stacktest_env.PrependUnique(CPPPATH = [ ]) stacktest_env.AppendUnique(LIBPATH = [stacktest_env.get('BUILD_DIR')]) -stacktest_env.PrependUnique(LIBS = ['octbstack', +stacktest_env.PrependUnique(LIBS = ['octbstack_test', 'ocsrm', 'connectivity_abstraction', 'coap']) @@ -60,7 +60,7 @@ if stacktest_env.get('LOGGING'): stacktest_env.AppendUnique(CPPDEFINES = ['TB_LOG']) if target_os in ['msys_nt', 'windows']: - stacktest_env.AppendUnique(LIBS = ['ws2_32', 'iphlpapi', 'kernel32']) + stacktest_env.AppendUnique(LIBS = ['ws2_32', 'iphlpapi', 'kernel32', 'advapi32']) else: stacktest_env.PrependUnique(LIBS = ['m']) @@ -75,8 +75,6 @@ Alias("test", [stacktests, cbortests]) stacktest_env.AppendTarget('test') if stacktest_env.get('TEST') == '1': - if target_os in ['windows']: - stacktest_env.AppendENVPath('PATH', [os.path.join(stacktest_env.get('BUILD_DIR'), 'resource', 'csdk')]) if target_os in ['linux', 'windows']: from tools.scons.RunTest import * run_test(stacktest_env, diff --git a/resource/provisioning/unittests/SConscript b/resource/provisioning/unittests/SConscript index b87779e..ea41a36 100755 --- a/resource/provisioning/unittests/SConscript +++ b/resource/provisioning/unittests/SConscript @@ -57,7 +57,7 @@ provisiontests_env.PrependUnique(LIBS = [ 'ocprovision', 'oc', 'ocpmapi', - 'octbstack', + 'octbstack_test', 'oc_logger', 'connectivity_abstraction', 'coap' diff --git a/resource/unittests/SConscript b/resource/unittests/SConscript index d138dd2..4fe642a 100644 --- a/resource/unittests/SConscript +++ b/resource/unittests/SConscript @@ -47,13 +47,16 @@ unittests_env.PrependUnique(CPPPATH = [ ]) if target_os in ['windows']: - unittests_env.AppendUnique(LIBS = ['ws2_32']) + unittests_env.AppendUnique(LIBS = ['ws2_32', 'advapi32', 'iphlpapi']) unittests_env.AppendUnique(CPPPATH = ['#extlibs/boost/boost']) +if unittests_env.get('SECURED') == '1': + unittests_env.AppendUnique(LIBS = ['ocsrm']) + unittests_env.AppendUnique(LIBPATH = [unittests_env.get('BUILD_DIR')]) unittests_env.PrependUnique(LIBS = [ 'oc', - 'octbstack', + 'octbstack_test', 'oc_logger', 'connectivity_abstraction', 'coap' -- 2.7.4