Refactor unit test linking
authorDavid Antler <david.a.antler@intel.com>
Thu, 22 Sep 2016 00:44:19 +0000 (17:44 -0700)
committerDave Thaler <dthaler@microsoft.com>
Sat, 1 Oct 2016 00:00:32 +0000 (00:00 +0000)
* 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 <david.a.antler@intel.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/12115
Reviewed-by: Phil Coval <philippe.coval@osg.samsung.com>
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Dan Mihai <Daniel.Mihai@microsoft.com>
Reviewed-by: Dave Thaler <dthaler@microsoft.com>
resource/c_common/ocrandom/test/SConscript
resource/csdk/SConscript
resource/csdk/connectivity/test/SConscript
resource/csdk/octbstack_product.def
resource/csdk/octbstack_test.def [deleted file]
resource/csdk/security/provisioning/unittest/SConscript
resource/csdk/security/unittest/SConscript
resource/csdk/stack/test/SConscript
resource/provisioning/unittests/SConscript
resource/unittests/SConscript

index 632f22c..0f9d732 100644 (file)
@@ -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'])
 
index 0578676..ac8d0c0 100644 (file)
@@ -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)
index 62dfaf4..5e9a0a2 100644 (file)
@@ -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'])
 
index 5f47fac..841b1bb 100644 (file)
@@ -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 (file)
index 87e1853..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-; Windows octbstack.dll exports that are required just for tests.
-
-encodeAddressForRFC6874
-
-OCByteStringCopy
-OCConvertPayload
-OCDevicePayloadCreate
-OCParsePayload
index 653df64..1a941a4 100644 (file)
@@ -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'])
index b67de92..739e747 100644 (file)
@@ -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')
index 46cc864..6be264a 100644 (file)
@@ -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,
index b87779e..ea41a36 100755 (executable)
@@ -57,7 +57,7 @@ provisiontests_env.PrependUnique(LIBS = [
         'ocprovision',
                'oc',
                'ocpmapi',
-               'octbstack',
+               'octbstack_test',
                'oc_logger',
                'connectivity_abstraction',
                'coap'
index d138dd2..4fe642a 100644 (file)
@@ -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'