Added automatic userspace test launching capability to AKAROS.
authoralfongj <alfongj@gmail.com>
Wed, 30 Apr 2014 20:43:22 +0000 (13:43 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 5 May 2014 23:23:30 +0000 (16:23 -0700)
* Created a new config variable (USERSPACE_TESTING) in Kconfig.Testing
  in which to specify a path to a script that should run userspace
  tests.
* Modified manager.c to support this.

kern/Kconfig.testing
kern/include/ros/common.h
kern/src/manager.c

index 9b406cb..dd07490 100644 (file)
@@ -244,4 +244,10 @@ config TEST_alarm
     help
         Run the alarm test
 
+config USERSPACE_TESTING
+string "Userspace testing. Fill with path to test launcher script, or leave empty for skipping"
+    help
+        Run userspace unit tests from the specified path. Leave empty to skip
+        testing.
+
 endmenu
index 377e96d..84bb474 100644 (file)
@@ -43,6 +43,9 @@ typedef unsigned long uintreg_t;
 #define FOR_CIRC_BUFFER(next, size, var) \
        for (int _var = 0, var = (next); _var < (size); _var++, var = (var + 1) % (size))
 
+#define STRINGIFY(s) __STRINGIFY(s)
+#define __STRINGIFY(s) #s
+
 // Efficient min and max operations
 #ifdef ROS_KERNEL /* Glibc has their own */
 #define MIN(_a, _b)                                            \
index 0b38d18..bd4888a 100644 (file)
@@ -84,10 +84,18 @@ void manager(void)
        #define PASTE(s1,s2) s1 ## s2
        #define MANAGER_FUNC(dev) PASTE(manager_,dev)
 
-       // Run Kernel post boot tests (from tests_postboot_kernel.c)
+       // Run Kernel post boot tests (from tests_postboot_kernel.c).
        #ifdef CONFIG_POSTBOOT_KERNEL_TESTING
                postboot_kernel_tests();
        #endif
+       // Run userspace tests (from config specified path).
+       if (strlen(CONFIG_USERSPACE_TESTING) != 0)
+       {
+               printk("'%s' is %d chars long", CONFIG_USERSPACE_TESTING,
+                          strlen(STRINGIFY(CONFIG_USERSPACE_TESTING)));
+               char *usp_args[] = {"bin_run", "ash", CONFIG_USERSPACE_TESTING};
+               mon_bin_run(3, usp_args, NULL);
+       } 
 
        void MANAGER_FUNC(DEVELOPER_NAME)(void);
        MANAGER_FUNC(DEVELOPER_NAME)();