Build unit tests for IP transport only 11/24111/17
authorMats Wichmann <mats@linux.com>
Thu, 8 Feb 2018 14:37:24 +0000 (07:37 -0700)
committerMats Wichmann <mats@linux.com>
Thu, 16 Aug 2018 18:22:26 +0000 (18:22 +0000)
"./auto_build.sh unit_tests" is used by the CI system for the unit test
run (the .sh just invokes auto_build.py).  Since the CI system is virtual,
it does not have bluetooth hardware or NFS.  Initializing the stack
on Linux will try to make sure the selected transports are connected,
and Bluetooth will time out.  Depending on the configuration of the
distro in question, the dbus connection can time out in 2.5 seconds all
the way up to 25. This slows down the "stacktests" test and risks it
failing due to the deadman timer firing (the short timeout is currently
5 seconds). Build this configuration for the IP transport only.

The behavior of the dbus connection varies from run to run it seems,
(and as noted, newer Linux distributions have a much longer timeout,
so if you have to pay the timeout, test time goes up accordingly), but
picking from a log of the current CI unit_test builder (Ubuntu 12.04),
one instance of the entire unit test run took:

96 tests from 17 test cases ran. (4851 ms total)

Locally, removing the effort to touch bluetooth brings the whole unit
test time down well under a second on a system that does not actually
have bluetooth, similar to the case of the CI builders.

Bug: https://jira.iotivity.org/browse/IOT-2518
Change-Id: I453e00b0d829d5caf83b785011970db38b1a9db1
Signed-off-by: Mats Wichmann <mats@linux.com>
auto_build.py

index a36b128..95ce6b5 100755 (executable)
@@ -534,6 +534,11 @@ def build_simulator(flag, extra_option_str):
     call_scons(build_options, extra_option_str)
 
 def unit_tests():
+    ''' build unsecured and secured, running unit tests for both.
+    This option is used by the CI system, which is a virtual machine -
+    thus it should be built with only the IP transport to avoid timeouts
+    setting up infrastructure that is not present (i.e. BT and NFC)
+    '''
     print ("*********** Unit test Start *************")
     build_options = {
                         'RELEASE':'false',
@@ -545,14 +550,16 @@ def unit_tests():
                         'TEST':1,
                         'RELEASE':'false',
                         'SECURED':0,
+                        'TARGET_TRANSPORT':'IP',
                     }
     extra_option_str = ""
     call_scons(build_options, extra_option_str)
 
     build_options = {
                         'TEST':1,
-                        'SECURED':1,
                         'RELEASE':'false',
+                        'SECURED':1,
+                        'TARGET_TRANSPORT':'IP',
                     }
     call_scons(build_options, extra_option_str)