You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by cc...@apache.org on 2016/10/17 23:59:31 UTC

[05/16] incubator-mynewt-core git commit: Unit test infrastructure

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/fs/nffs/test/src/testcases/overwrite_three_test.c
----------------------------------------------------------------------
diff --git a/fs/nffs/test/src/testcases/overwrite_three_test.c b/fs/nffs/test/src/testcases/overwrite_three_test.c
new file mode 100644
index 0000000..37ba872
--- /dev/null
+++ b/fs/nffs/test/src/testcases/overwrite_three_test.c
@@ -0,0 +1,167 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "nffs_test_utils.h"
+
+TEST_CASE(nffs_test_overwrite_three)
+{
+    struct nffs_test_block_desc *blocks = (struct nffs_test_block_desc[]) { {
+        .data = "abcdefgh",
+        .data_len = 8,
+    }, {
+        .data = "ijklmnop",
+        .data_len = 8,
+    }, {
+        .data = "qrstuvwx",
+        .data_len = 8,
+    } };
+
+    struct fs_file *file;
+    int rc;
+
+
+    /*** Setup. */
+    rc = nffs_format(nffs_current_area_descs);
+    TEST_ASSERT(rc == 0);
+
+    /*** Overwrite three blocks (middle). */
+    nffs_test_util_create_file_blocks("/myfile.txt", blocks, 3);
+    rc = fs_open("/myfile.txt", FS_ACCESS_WRITE, &file);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 24);
+    TEST_ASSERT(fs_getpos(file) == 0);
+
+    rc = fs_seek(file, 6);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 24);
+    TEST_ASSERT(fs_getpos(file) == 6);
+
+    rc = fs_write(file, "1234567890!@", 12);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 24);
+    TEST_ASSERT(fs_getpos(file) == 18);
+
+    rc = fs_close(file);
+    TEST_ASSERT(rc == 0);
+
+    nffs_test_util_assert_contents( "/myfile.txt",
+                                   "abcdef1234567890!@stuvwx", 24);
+    nffs_test_util_assert_block_count("/myfile.txt", 3);
+
+    /*** Overwrite three blocks (start). */
+    nffs_test_util_create_file_blocks("/myfile.txt", blocks, 3);
+    rc = fs_open("/myfile.txt", FS_ACCESS_WRITE, &file);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 24);
+    TEST_ASSERT(fs_getpos(file) == 0);
+
+    rc = fs_write(file, "1234567890!@#$%^&*()", 20);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 24);
+    TEST_ASSERT(fs_getpos(file) == 20);
+
+    rc = fs_close(file);
+    TEST_ASSERT(rc == 0);
+
+    nffs_test_util_assert_contents( "/myfile.txt",
+                                   "1234567890!@#$%^&*()uvwx", 24);
+    nffs_test_util_assert_block_count("/myfile.txt", 3);
+
+    /*** Overwrite three blocks (end). */
+    nffs_test_util_create_file_blocks("/myfile.txt", blocks, 3);
+    rc = fs_open("/myfile.txt", FS_ACCESS_WRITE, &file);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 24);
+    TEST_ASSERT(fs_getpos(file) == 0);
+
+    rc = fs_seek(file, 6);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 24);
+    TEST_ASSERT(fs_getpos(file) == 6);
+
+    rc = fs_write(file, "1234567890!@#$%^&*", 18);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 24);
+    TEST_ASSERT(fs_getpos(file) == 24);
+
+    rc = fs_close(file);
+    TEST_ASSERT(rc == 0);
+
+    nffs_test_util_assert_contents( "/myfile.txt",
+                                   "abcdef1234567890!@#$%^&*", 24);
+    nffs_test_util_assert_block_count("/myfile.txt", 3);
+
+    /*** Overwrite three blocks middle, extend. */
+    nffs_test_util_create_file_blocks("/myfile.txt", blocks, 3);
+    rc = fs_open("/myfile.txt", FS_ACCESS_WRITE, &file);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 24);
+    TEST_ASSERT(fs_getpos(file) == 0);
+
+    rc = fs_seek(file, 6);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 24);
+    TEST_ASSERT(fs_getpos(file) == 6);
+
+    rc = fs_write(file, "1234567890!@#$%^&*()", 20);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 26);
+    TEST_ASSERT(fs_getpos(file) == 26);
+
+    rc = fs_close(file);
+    TEST_ASSERT(rc == 0);
+
+    nffs_test_util_assert_contents( "/myfile.txt",
+                                   "abcdef1234567890!@#$%^&*()", 26);
+    nffs_test_util_assert_block_count("/myfile.txt", 3);
+
+    /*** Overwrite three blocks start, extend. */
+    nffs_test_util_create_file_blocks("/myfile.txt", blocks, 3);
+    rc = fs_open("/myfile.txt", FS_ACCESS_WRITE, &file);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 24);
+    TEST_ASSERT(fs_getpos(file) == 0);
+
+    rc = fs_write(file, "1234567890!@#$%^&*()abcdefghij", 30);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 30);
+    TEST_ASSERT(fs_getpos(file) == 30);
+
+    rc = fs_close(file);
+    TEST_ASSERT(rc == 0);
+
+    nffs_test_util_assert_contents( "/myfile.txt",
+                                   "1234567890!@#$%^&*()abcdefghij", 30);
+    nffs_test_util_assert_block_count("/myfile.txt", 3);
+
+    struct nffs_test_file_desc *expected_system =
+        (struct nffs_test_file_desc[]) { {
+            .filename = "",
+            .is_dir = 1,
+            .children = (struct nffs_test_file_desc[]) { {
+                .filename = "myfile.txt",
+                .contents = "1234567890!@#$%^&*()abcdefghij",
+                .contents_len = 30,
+            }, {
+                .filename = NULL,
+            } },
+    } };
+
+    nffs_test_assert_system(expected_system, nffs_current_area_descs);
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/fs/nffs/test/src/testcases/overwrite_two_test.c
----------------------------------------------------------------------
diff --git a/fs/nffs/test/src/testcases/overwrite_two_test.c b/fs/nffs/test/src/testcases/overwrite_two_test.c
new file mode 100644
index 0000000..8082367
--- /dev/null
+++ b/fs/nffs/test/src/testcases/overwrite_two_test.c
@@ -0,0 +1,159 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "nffs_test_utils.h"
+
+TEST_CASE(nffs_test_overwrite_two)
+{
+    struct nffs_test_block_desc *blocks = (struct nffs_test_block_desc[]) { {
+        .data = "abcdefgh",
+        .data_len = 8,
+    }, {
+        .data = "ijklmnop",
+        .data_len = 8,
+    } };
+
+    struct fs_file *file;
+    int rc;
+
+
+    /*** Setup. */
+    rc = nffs_format(nffs_current_area_descs);
+    TEST_ASSERT(rc == 0);
+
+    /*** Overwrite two blocks (middle). */
+    nffs_test_util_create_file_blocks("/myfile.txt", blocks, 2);
+    rc = fs_open("/myfile.txt", FS_ACCESS_WRITE, &file);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 16);
+    TEST_ASSERT(fs_getpos(file) == 0);
+
+    rc = fs_seek(file, 7);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 16);
+    TEST_ASSERT(fs_getpos(file) == 7);
+
+    rc = fs_write(file, "123", 3);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 16);
+    TEST_ASSERT(fs_getpos(file) == 10);
+
+    rc = fs_close(file);
+    TEST_ASSERT(rc == 0);
+
+    nffs_test_util_assert_contents( "/myfile.txt", "abcdefg123klmnop", 16);
+    nffs_test_util_assert_block_count("/myfile.txt", 2);
+
+    /*** Overwrite two blocks (start). */
+    nffs_test_util_create_file_blocks("/myfile.txt", blocks, 2);
+    rc = fs_open("/myfile.txt", FS_ACCESS_WRITE, &file);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 16);
+    TEST_ASSERT(fs_getpos(file) == 0);
+
+    rc = fs_write(file, "ABCDEFGHIJ", 10);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 16);
+    TEST_ASSERT(fs_getpos(file) == 10);
+
+    rc = fs_close(file);
+    TEST_ASSERT(rc == 0);
+
+    nffs_test_util_assert_contents( "/myfile.txt", "ABCDEFGHIJklmnop", 16);
+    nffs_test_util_assert_block_count("/myfile.txt", 2);
+
+    /*** Overwrite two blocks (end). */
+    nffs_test_util_create_file_blocks("/myfile.txt", blocks, 2);
+    rc = fs_open("/myfile.txt", FS_ACCESS_WRITE, &file);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 16);
+    TEST_ASSERT(fs_getpos(file) == 0);
+
+    rc = fs_seek(file, 6);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 16);
+    TEST_ASSERT(fs_getpos(file) == 6);
+
+    rc = fs_write(file, "1234567890", 10);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 16);
+    TEST_ASSERT(fs_getpos(file) == 16);
+
+    rc = fs_close(file);
+    TEST_ASSERT(rc == 0);
+
+    nffs_test_util_assert_contents( "/myfile.txt", "abcdef1234567890", 16);
+    nffs_test_util_assert_block_count("/myfile.txt", 2);
+
+    /*** Overwrite two blocks middle, extend. */
+    nffs_test_util_create_file_blocks("/myfile.txt", blocks, 2);
+    rc = fs_open("/myfile.txt", FS_ACCESS_WRITE, &file);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 16);
+    TEST_ASSERT(fs_getpos(file) == 0);
+
+    rc = fs_seek(file, 6);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 16);
+    TEST_ASSERT(fs_getpos(file) == 6);
+
+    rc = fs_write(file, "1234567890!@#$", 14);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 20);
+    TEST_ASSERT(fs_getpos(file) == 20);
+
+    rc = fs_close(file);
+    TEST_ASSERT(rc == 0);
+
+    nffs_test_util_assert_contents( "/myfile.txt", "abcdef1234567890!@#$", 20);
+    nffs_test_util_assert_block_count("/myfile.txt", 2);
+
+    /*** Overwrite two blocks start, extend. */
+    nffs_test_util_create_file_blocks("/myfile.txt", blocks, 2);
+    rc = fs_open("/myfile.txt", FS_ACCESS_WRITE, &file);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 16);
+    TEST_ASSERT(fs_getpos(file) == 0);
+
+    rc = fs_write(file, "1234567890!@#$%^&*()", 20);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 20);
+    TEST_ASSERT(fs_getpos(file) == 20);
+
+    rc = fs_close(file);
+    TEST_ASSERT(rc == 0);
+
+    nffs_test_util_assert_contents( "/myfile.txt", "1234567890!@#$%^&*()", 20);
+    nffs_test_util_assert_block_count("/myfile.txt", 2);
+
+    struct nffs_test_file_desc *expected_system =
+        (struct nffs_test_file_desc[]) { {
+            .filename = "",
+            .is_dir = 1,
+            .children = (struct nffs_test_file_desc[]) { {
+                .filename = "myfile.txt",
+                .contents = "1234567890!@#$%^&*()",
+                .contents_len = 20,
+            }, {
+                .filename = NULL,
+            } },
+    } };
+
+    nffs_test_assert_system(expected_system, nffs_current_area_descs);
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/fs/nffs/test/src/testcases/read_test.c
----------------------------------------------------------------------
diff --git a/fs/nffs/test/src/testcases/read_test.c b/fs/nffs/test/src/testcases/read_test.c
new file mode 100644
index 0000000..a21e16f
--- /dev/null
+++ b/fs/nffs/test/src/testcases/read_test.c
@@ -0,0 +1,53 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "nffs_test_utils.h"
+
+TEST_CASE(nffs_test_read)
+{
+    struct fs_file *file;
+    uint8_t buf[16];
+    uint32_t bytes_read;
+    int rc;
+
+    rc = nffs_format(nffs_current_area_descs);
+    TEST_ASSERT(rc == 0);
+
+    nffs_test_util_create_file("/myfile.txt", "1234567890", 10);
+
+    rc = fs_open("/myfile.txt", FS_ACCESS_READ, &file);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 10);
+    TEST_ASSERT(fs_getpos(file) == 0);
+
+    rc = fs_read(file, 4, buf, &bytes_read);
+    TEST_ASSERT(rc == 0);
+    TEST_ASSERT(bytes_read == 4);
+    TEST_ASSERT(memcmp(buf, "1234", 4) == 0);
+    TEST_ASSERT(fs_getpos(file) == 4);
+
+    rc = fs_read(file, sizeof buf - 4, buf + 4, &bytes_read);
+    TEST_ASSERT(rc == 0);
+    TEST_ASSERT(bytes_read == 6);
+    TEST_ASSERT(memcmp(buf, "1234567890", 10) == 0);
+    TEST_ASSERT(fs_getpos(file) == 10);
+
+    rc = fs_close(file);
+    TEST_ASSERT(rc == 0);
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/fs/nffs/test/src/testcases/readdir_test.c
----------------------------------------------------------------------
diff --git a/fs/nffs/test/src/testcases/readdir_test.c b/fs/nffs/test/src/testcases/readdir_test.c
new file mode 100644
index 0000000..aa52035
--- /dev/null
+++ b/fs/nffs/test/src/testcases/readdir_test.c
@@ -0,0 +1,124 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "nffs_test_utils.h"
+
+TEST_CASE(nffs_test_readdir)
+{
+    struct fs_dirent *dirent;
+    struct fs_dir *dir;
+    int rc;
+
+    /*** Setup. */
+    rc = nffs_format(nffs_current_area_descs);
+    TEST_ASSERT_FATAL(rc == 0);
+
+    rc = fs_mkdir("/mydir");
+    TEST_ASSERT_FATAL(rc == 0);
+
+    nffs_test_util_create_file("/mydir/b", "bbbb", 4);
+    nffs_test_util_create_file("/mydir/a", "aaaa", 4);
+    rc = fs_mkdir("/mydir/c");
+    TEST_ASSERT_FATAL(rc == 0);
+
+    /* Nonexistent directory. */
+    rc = fs_opendir("/asdf", &dir);
+    TEST_ASSERT(rc == FS_ENOENT);
+
+    /* Fail to opendir a file. */
+    rc = fs_opendir("/mydir/a", &dir);
+    TEST_ASSERT(rc == FS_EINVAL);
+
+    /* Real directory (with trailing slash). */
+    rc = fs_opendir("/mydir/", &dir);
+    TEST_ASSERT_FATAL(rc == 0);
+
+    rc = fs_readdir(dir, &dirent);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_ent_name(dirent, "a");
+    TEST_ASSERT(fs_dirent_is_dir(dirent) == 0);
+
+    rc = fs_readdir(dir, &dirent);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_ent_name(dirent, "b");
+    TEST_ASSERT(fs_dirent_is_dir(dirent) == 0);
+
+    rc = fs_readdir(dir, &dirent);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_ent_name(dirent, "c");
+    TEST_ASSERT(fs_dirent_is_dir(dirent) == 1);
+
+    rc = fs_readdir(dir, &dirent);
+    TEST_ASSERT(rc == FS_ENOENT);
+
+    rc = fs_closedir(dir);
+    TEST_ASSERT(rc == 0);
+
+    /* Root directory. */
+    rc = fs_opendir("/", &dir);
+    TEST_ASSERT(rc == 0);
+    rc = fs_readdir(dir, &dirent);
+    TEST_ASSERT(rc == 0);
+
+    nffs_test_util_assert_ent_name(dirent, "lost+found");
+    TEST_ASSERT(fs_dirent_is_dir(dirent) == 1);
+
+    rc = fs_readdir(dir, &dirent);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_ent_name(dirent, "mydir");
+    TEST_ASSERT(fs_dirent_is_dir(dirent) == 1);
+
+    rc = fs_closedir(dir);
+    TEST_ASSERT(rc == 0);
+
+    /* Delete entries while iterating. */
+    rc = fs_opendir("/mydir", &dir);
+    TEST_ASSERT_FATAL(rc == 0);
+
+    rc = fs_readdir(dir, &dirent);
+    TEST_ASSERT(rc == 0);
+
+    nffs_test_util_assert_ent_name(dirent, "a");
+    TEST_ASSERT(fs_dirent_is_dir(dirent) == 0);
+
+    rc = fs_unlink("/mydir/b");
+    TEST_ASSERT(rc == 0);
+
+    rc = fs_readdir(dir, &dirent);
+    TEST_ASSERT(rc == 0);
+
+    rc = fs_unlink("/mydir/c");
+    TEST_ASSERT(rc == 0);
+
+    rc = fs_unlink("/mydir");
+    TEST_ASSERT(rc == 0);
+
+    nffs_test_util_assert_ent_name(dirent, "c");
+    TEST_ASSERT(fs_dirent_is_dir(dirent) == 1);
+
+    rc = fs_readdir(dir, &dirent);
+    TEST_ASSERT(rc == FS_ENOENT);
+
+    rc = fs_closedir(dir);
+    TEST_ASSERT(rc == 0);
+
+    /* Ensure directory is gone. */
+    rc = fs_opendir("/mydir", &dir);
+    TEST_ASSERT(rc == FS_ENOENT);
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/fs/nffs/test/src/testcases/rename_test.c
----------------------------------------------------------------------
diff --git a/fs/nffs/test/src/testcases/rename_test.c b/fs/nffs/test/src/testcases/rename_test.c
new file mode 100644
index 0000000..e35456d
--- /dev/null
+++ b/fs/nffs/test/src/testcases/rename_test.c
@@ -0,0 +1,98 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "nffs_test_utils.h"
+
+TEST_CASE(nffs_test_rename)
+{
+    struct fs_file *file;
+    const char contents[] = "contents";
+    int rc;
+
+
+    rc = nffs_format(nffs_current_area_descs);
+    TEST_ASSERT(rc == 0);
+
+    rc = fs_rename("/nonexistent.txt", "/newname.txt");
+    TEST_ASSERT(rc == FS_ENOENT);
+
+    /*** Rename file. */
+    nffs_test_util_create_file("/myfile.txt", contents, sizeof contents);
+
+    rc = fs_rename("/myfile.txt", "badname");
+    TEST_ASSERT(rc == FS_EINVAL);
+
+    rc = fs_rename("/myfile.txt", "/myfile2.txt");
+    TEST_ASSERT(rc == 0);
+
+    rc = fs_open("/myfile.txt", FS_ACCESS_READ, &file);
+    TEST_ASSERT(rc == FS_ENOENT);
+
+    nffs_test_util_assert_contents("/myfile2.txt", contents, sizeof contents);
+
+    rc = fs_mkdir("/mydir");
+    TEST_ASSERT(rc == 0);
+
+    rc = fs_mkdir("/mydir/leafdir");
+    TEST_ASSERT(rc == 0);
+
+    rc = fs_rename("/myfile2.txt", "/mydir/myfile2.txt");
+    TEST_ASSERT(rc == 0);
+
+    nffs_test_util_assert_contents("/mydir/myfile2.txt", contents,
+                                  sizeof contents);
+
+    /*** Rename directory. */
+    rc = fs_rename("/mydir", "badname");
+    TEST_ASSERT(rc == FS_EINVAL);
+
+    /* Don't allow a directory to be moved into a descendent directory. */
+    rc = fs_rename("/mydir", "/mydir/leafdir/a");
+    TEST_ASSERT(rc == FS_EINVAL);
+
+    rc = fs_rename("/mydir", "/mydir2");
+    TEST_ASSERT(rc == 0);
+
+    nffs_test_util_assert_contents("/mydir2/myfile2.txt", contents,
+                                  sizeof contents);
+
+    struct nffs_test_file_desc *expected_system =
+        (struct nffs_test_file_desc[]) { {
+            .filename = "",
+            .is_dir = 1,
+            .children = (struct nffs_test_file_desc[]) { {
+                .filename = "mydir2",
+                .is_dir = 1,
+                .children = (struct nffs_test_file_desc[]) { {
+                    .filename = "leafdir",
+                    .is_dir = 1,
+                }, {
+                    .filename = "myfile2.txt",
+                    .contents = "contents",
+                    .contents_len = 9,
+                }, {
+                    .filename = NULL,
+                } },
+            }, {
+                .filename = NULL,
+            } },
+    } };
+
+    nffs_test_assert_system(expected_system, nffs_current_area_descs);
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/fs/nffs/test/src/testcases/split_file_test.c
----------------------------------------------------------------------
diff --git a/fs/nffs/test/src/testcases/split_file_test.c b/fs/nffs/test/src/testcases/split_file_test.c
new file mode 100644
index 0000000..a152bdc
--- /dev/null
+++ b/fs/nffs/test/src/testcases/split_file_test.c
@@ -0,0 +1,65 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "nffs_test_utils.h"
+
+TEST_CASE(nffs_test_split_file)
+{
+    static char data[24 * 1024];
+    int rc;
+    int i;
+
+    /*** Setup. */
+    static const struct nffs_area_desc area_descs_two[] = {
+            { 0x00000000, 16 * 1024 },
+            { 0x00004000, 16 * 1024 },
+            { 0x00008000, 16 * 1024 },
+            { 0, 0 },
+    };
+
+    rc = nffs_format(area_descs_two);
+    TEST_ASSERT(rc == 0);
+
+    for (i = 0; i < sizeof data; i++) {
+        data[i] = i;
+    }
+
+    for (i = 0; i < 256; i++) {
+        nffs_test_util_create_file("/myfile.txt", data, sizeof data);
+        rc = fs_unlink("/myfile.txt");
+        TEST_ASSERT(rc == 0);
+    }
+
+    nffs_test_util_create_file("/myfile.txt", data, sizeof data);
+
+    struct nffs_test_file_desc *expected_system =
+        (struct nffs_test_file_desc[]) { {
+            .filename = "",
+            .is_dir = 1,
+            .children = (struct nffs_test_file_desc[]) { {
+                .filename = "myfile.txt",
+                .contents = data,
+                .contents_len = sizeof data,
+            }, {
+                .filename = NULL,
+            } },
+    } };
+
+    nffs_test_assert_system(expected_system, area_descs_two);
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/fs/nffs/test/src/testcases/truncate_test.c
----------------------------------------------------------------------
diff --git a/fs/nffs/test/src/testcases/truncate_test.c b/fs/nffs/test/src/testcases/truncate_test.c
new file mode 100644
index 0000000..cf78540
--- /dev/null
+++ b/fs/nffs/test/src/testcases/truncate_test.c
@@ -0,0 +1,73 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "nffs_test_utils.h"
+
+TEST_CASE(nffs_test_truncate)
+{
+    struct fs_file *file;
+    int rc;
+
+
+    rc = nffs_format(nffs_current_area_descs);
+    TEST_ASSERT(rc == 0);
+
+    rc = fs_open("/myfile.txt", FS_ACCESS_WRITE | FS_ACCESS_TRUNCATE, &file);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 0);
+    TEST_ASSERT(fs_getpos(file) == 0);
+
+    rc = fs_write(file, "abcdefgh", 8);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 8);
+    TEST_ASSERT(fs_getpos(file) == 8);
+    rc = fs_close(file);
+    TEST_ASSERT(rc == 0);
+
+    nffs_test_util_assert_contents("/myfile.txt", "abcdefgh", 8);
+
+    rc = fs_open("/myfile.txt", FS_ACCESS_WRITE | FS_ACCESS_TRUNCATE, &file);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 0);
+    TEST_ASSERT(fs_getpos(file) == 0);
+
+    rc = fs_write(file, "1234", 4);
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_assert_file_len(file, 4);
+    TEST_ASSERT(fs_getpos(file) == 4);
+    rc = fs_close(file);
+    TEST_ASSERT(rc == 0);
+
+    nffs_test_util_assert_contents("/myfile.txt", "1234", 4);
+
+    struct nffs_test_file_desc *expected_system =
+        (struct nffs_test_file_desc[]) { {
+            .filename = "",
+            .is_dir = 1,
+            .children = (struct nffs_test_file_desc[]) { {
+                .filename = "myfile.txt",
+                .contents = "1234",
+                .contents_len = 4,
+            }, {
+                .filename = NULL,
+            } },
+    } };
+
+    nffs_test_assert_system(expected_system, nffs_current_area_descs);
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/fs/nffs/test/src/testcases/unlink_test.c
----------------------------------------------------------------------
diff --git a/fs/nffs/test/src/testcases/unlink_test.c b/fs/nffs/test/src/testcases/unlink_test.c
new file mode 100644
index 0000000..e28d19c
--- /dev/null
+++ b/fs/nffs/test/src/testcases/unlink_test.c
@@ -0,0 +1,121 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "nffs_test_utils.h"
+
+TEST_CASE(nffs_test_unlink)
+{
+    struct fs_file *file0;
+    struct fs_file *file2;
+    uint8_t buf[64];
+    struct nffs_file *nfs_file;
+    uint32_t bytes_read;
+    struct fs_file *file1;
+    int initial_num_blocks;
+    int initial_num_inodes;
+    int rc;
+
+    rc = nffs_format(nffs_current_area_descs);
+    TEST_ASSERT_FATAL(rc == 0);
+
+    initial_num_blocks = nffs_block_entry_pool.mp_num_free;
+    initial_num_inodes = nffs_inode_entry_pool.mp_num_free;
+
+    nffs_test_util_create_file("/file0.txt", "0", 1);
+
+    rc = fs_open("/file0.txt", FS_ACCESS_READ | FS_ACCESS_WRITE, &file0);
+    TEST_ASSERT(rc == 0);
+    nfs_file = (struct nffs_file *)file0;
+    TEST_ASSERT(nfs_file->nf_inode_entry->nie_refcnt == 2);
+
+    rc = fs_unlink("/file0.txt");
+    TEST_ASSERT(rc == 0);
+    TEST_ASSERT(nfs_file->nf_inode_entry->nie_refcnt == 1);
+
+    rc = fs_open("/file0.txt", FS_ACCESS_READ, &file2);
+    TEST_ASSERT(rc == FS_ENOENT);
+
+    rc = fs_write(file0, "00", 2);
+    TEST_ASSERT(rc == 0);
+
+    rc = fs_seek(file0, 0);
+    TEST_ASSERT(rc == 0);
+
+    rc = fs_read(file0, sizeof buf, buf, &bytes_read);
+    TEST_ASSERT(rc == 0);
+    TEST_ASSERT(bytes_read == 2);
+    TEST_ASSERT(memcmp(buf, "00", 2) == 0);
+
+    rc = fs_close(file0);
+    TEST_ASSERT(rc == 0);
+
+
+    rc = fs_open("/file0.txt", FS_ACCESS_READ, &file0);
+    TEST_ASSERT(rc == FS_ENOENT);
+
+    /* Ensure the file was fully removed from RAM. */
+    TEST_ASSERT(nffs_inode_entry_pool.mp_num_free == initial_num_inodes);
+    TEST_ASSERT(nffs_block_entry_pool.mp_num_free == initial_num_blocks);
+
+    /*** Nested unlink. */
+    rc = fs_mkdir("/mydir");
+    TEST_ASSERT(rc == 0);
+    nffs_test_util_create_file("/mydir/file1.txt", "1", 2);
+
+    rc = fs_open("/mydir/file1.txt", FS_ACCESS_READ | FS_ACCESS_WRITE, &file1);
+    TEST_ASSERT(rc == 0);
+    nfs_file = (struct nffs_file *)file1;
+    TEST_ASSERT(nfs_file->nf_inode_entry->nie_refcnt == 2);
+
+    rc = fs_unlink("/mydir");
+    TEST_ASSERT(rc == 0);
+    TEST_ASSERT(nfs_file->nf_inode_entry->nie_refcnt == 1);
+
+    rc = fs_open("/mydir/file1.txt", FS_ACCESS_READ, &file2);
+    TEST_ASSERT(rc == FS_ENOENT);
+
+    rc = fs_write(file1, "11", 2);
+    TEST_ASSERT(rc == 0);
+
+    rc = fs_seek(file1, 0);
+    TEST_ASSERT(rc == 0);
+
+    rc = fs_read(file1, sizeof buf, buf, &bytes_read);
+    TEST_ASSERT(rc == 0);
+    TEST_ASSERT(bytes_read == 2);
+    TEST_ASSERT(memcmp(buf, "11", 2) == 0);
+
+    rc = fs_close(file1);
+    TEST_ASSERT(rc == 0);
+
+    rc = fs_open("/mydir/file1.txt", FS_ACCESS_READ, &file1);
+    TEST_ASSERT(rc == FS_ENOENT);
+
+    struct nffs_test_file_desc *expected_system =
+        (struct nffs_test_file_desc[]) { {
+            .filename = "",
+            .is_dir = 1,
+    } };
+
+    nffs_test_assert_system(expected_system, nffs_current_area_descs);
+
+    /* Ensure the files and directories were fully removed from RAM. */
+    TEST_ASSERT(nffs_inode_entry_pool.mp_num_free == initial_num_inodes);
+    TEST_ASSERT(nffs_block_entry_pool.mp_num_free == initial_num_blocks);
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/fs/nffs/test/src/testcases/wear_level_test.c
----------------------------------------------------------------------
diff --git a/fs/nffs/test/src/testcases/wear_level_test.c b/fs/nffs/test/src/testcases/wear_level_test.c
new file mode 100644
index 0000000..2afcc7b
--- /dev/null
+++ b/fs/nffs/test/src/testcases/wear_level_test.c
@@ -0,0 +1,58 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "nffs_test_utils.h"
+
+TEST_CASE(nffs_test_wear_level)
+{
+    int rc;
+    int i;
+    int j;
+
+    static const struct nffs_area_desc area_descs_uniform[] = {
+        { 0x00000000, 2 * 1024 },
+        { 0x00020000, 2 * 1024 },
+        { 0x00040000, 2 * 1024 },
+        { 0x00060000, 2 * 1024 },
+        { 0x00080000, 2 * 1024 },
+        { 0, 0 },
+    };
+
+    /*** Setup. */
+    rc = nffs_format(area_descs_uniform);
+    TEST_ASSERT(rc == 0);
+
+    /* Ensure areas rotate properly. */
+    for (i = 0; i < 255; i++) {
+        for (j = 0; j < nffs_num_areas; j++) {
+            nffs_test_assert_area_seqs(i, nffs_num_areas - j, i + 1, j);
+            nffs_gc(NULL);
+        }
+    }
+
+    /* Ensure proper rollover of sequence numbers. */
+    for (j = 0; j < nffs_num_areas; j++) {
+        nffs_test_assert_area_seqs(255, nffs_num_areas - j, 0, j);
+        nffs_gc(NULL);
+    }
+    for (j = 0; j < nffs_num_areas; j++) {
+        nffs_test_assert_area_seqs(0, nffs_num_areas - j, 1, j);
+        nffs_gc(NULL);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/hw/bsp/native/syscfg.yml
----------------------------------------------------------------------
diff --git a/hw/bsp/native/syscfg.yml b/hw/bsp/native/syscfg.yml
index d648bb0..fb238e0 100644
--- a/hw/bsp/native/syscfg.yml
+++ b/hw/bsp/native/syscfg.yml
@@ -1,2 +1,3 @@
 syscfg.vals:
     NFFS_FLASH_AREA: FLASH_AREA_NFFS
+    CONFIG_FCB_FLASH_AREA: FLASH_AREA_NFFS

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/kernel/os/test/src/arch/cortex_m4/os_test_arch_arm.c
----------------------------------------------------------------------
diff --git a/kernel/os/test/src/arch/cortex_m4/os_test_arch_arm.c b/kernel/os/test/src/arch/cortex_m4/os_test_arch_arm.c
deleted file mode 100644
index 35134f7..0000000
--- a/kernel/os/test/src/arch/cortex_m4/os_test_arch_arm.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "testutil/testutil.h"
-#include "os_test_priv.h"
-
-void
-os_test_restart(void)
-{
-    tu_restart();
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/kernel/os/test/src/arch/sim/os_test_arch_sim.c
----------------------------------------------------------------------
diff --git a/kernel/os/test/src/arch/sim/os_test_arch_sim.c b/kernel/os/test/src/arch/sim/os_test_arch_sim.c
deleted file mode 100644
index 3b6cfbf..0000000
--- a/kernel/os/test/src/arch/sim/os_test_arch_sim.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include <stdio.h>
-#include <setjmp.h>
-#include <signal.h>
-#include <string.h>
-#include <sys/time.h>
-#include "testutil/testutil.h"
-#include "os/os.h"
-#include "os_test_priv.h"
-
-void
-os_test_restart(void)
-{
-    struct sigaction sa;
-    struct itimerval it;
-    int rc;
-
-    g_os_started = 0;
-
-    memset(&sa, 0, sizeof sa);
-    sa.sa_handler = SIG_IGN;
-
-    sigaction(SIGALRM, &sa, NULL);
-    sigaction(SIGVTALRM, &sa, NULL);
-
-    memset(&it, 0, sizeof(it));
-    rc = setitimer(ITIMER_VIRTUAL, &it, NULL);
-    if (rc != 0) {
-        perror("Cannot set itimer");
-        abort();
-    }
-
-    tu_restart();
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/kernel/os/test/src/callout_test.c
----------------------------------------------------------------------
diff --git a/kernel/os/test/src/callout_test.c b/kernel/os/test/src/callout_test.c
index 8353217..72e44a5 100644
--- a/kernel/os/test/src/callout_test.c
+++ b/kernel/os/test/src/callout_test.c
@@ -16,19 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
- 
 #include "sysinit/sysinit.h"
 #include "testutil/testutil.h"
 #include "os/os.h"
 #include "os_test_priv.h"
 
 /* Task 1 for sending */
-#define CALLOUT_STACK_SIZE        (5120)
-#define SEND_CALLOUT_TASK_PRIO        (1)
 struct os_task callout_task_struct_send;
 os_stack_t callout_task_stack_send[CALLOUT_STACK_SIZE];
 
-#define RECEIVE_CALLOUT_TASK_PRIO        (2)
 struct os_task callout_task_struct_receive;
 os_stack_t callout_task_stack_receive[CALLOUT_STACK_SIZE];
 
@@ -40,16 +36,13 @@ struct os_eventq callout_evq;
 struct os_event callout_ev;
 
 /* The callout_stop task */
-#define SEND_STOP_CALLOUT_TASK_PRIO        (3)
 struct os_task callout_task_struct_stop_send;
 os_stack_t callout_task_stack_stop_send[CALLOUT_STACK_SIZE];
 
-#define RECEIVE_STOP_CALLOUT_TASK_PRIO        (4)
 struct os_task callout_task_struct_stop_receive;
 os_stack_t callout_task_stack_stop_receive[CALLOUT_STACK_SIZE];
 
 /* Delearing variables for callout_stop_func */
-#define MULTI_SIZE    (2)
 struct os_callout_func callout_func_stop_test[MULTI_SIZE];
 
 /* The event to be sent*/
@@ -57,12 +50,10 @@ struct os_eventq callout_stop_evq[MULTI_SIZE];
 struct os_event callout_stop_ev;
 
 /* Declearing varables for callout_speak */
-#define SPEAK_CALLOUT_TASK_PRIO        (5)
 struct os_task callout_task_struct_speak;
 os_stack_t callout_task_stack_speak[CALLOUT_STACK_SIZE];
 
 /* Declearing varaibles for listen */
-#define LISTEN_CALLOUT_TASK_PRIO        (6)
 struct os_task callout_task_struct_listen;
 os_stack_t callout_task_stack_listen[CALLOUT_STACK_SIZE];
 
@@ -72,6 +63,7 @@ struct os_callout_func callout_func_speak;
 int p;
 int q;
 int t;
+
 /* This is the function for callout_init*/
 void
 my_callout_func(void *arg)
@@ -235,90 +227,9 @@ callout_task_stop_listen( void *arg )
 
 }
 
-/* Test case to test the basics of the callout */
-TEST_CASE(callout_test)
-{
-
-    /* Initializing the OS */
-    sysinit();
-    
-    /* Initialize the sending task */
-    os_task_init(&callout_task_struct_send, "callout_task_send",
-        callout_task_send, NULL, SEND_CALLOUT_TASK_PRIO, OS_WAIT_FOREVER,
-        callout_task_stack_send, CALLOUT_STACK_SIZE);
-
-    /* Initialize the receive task */
-    os_task_init(&callout_task_struct_receive, "callout_task_receive",
-        callout_task_receive, NULL, RECEIVE_CALLOUT_TASK_PRIO, OS_WAIT_FOREVER,
-        callout_task_stack_receive, CALLOUT_STACK_SIZE);
-
-    os_eventq_init(&callout_evq);
-    
-    /* Initialize the callout function */
-    os_callout_func_init(&callout_func_test, &callout_evq,
-        my_callout_func, NULL);
-
-    /* Does not return until OS_restart is called */
-    os_start();
-}
-
-/* Test case of the callout_task_stop */
-TEST_CASE(callout_test_stop)
-{
-    int k;
-    /* Initializing the OS */
-    sysinit();
-
-    /* Initialize the sending task */
-    os_task_init(&callout_task_struct_stop_send, "callout_task_stop_send",
-        callout_task_stop_send, NULL, SEND_STOP_CALLOUT_TASK_PRIO, OS_WAIT_FOREVER,
-        callout_task_stack_stop_send, CALLOUT_STACK_SIZE);
-
-    /* Initialize the receiving task */
-    os_task_init(&callout_task_struct_stop_receive, "callout_task_stop_receive",
-        callout_task_stop_receive, NULL, RECEIVE_STOP_CALLOUT_TASK_PRIO,
-        OS_WAIT_FOREVER, callout_task_stack_stop_receive, CALLOUT_STACK_SIZE);
-
-    for(k = 0; k< MULTI_SIZE; k++){
-        os_eventq_init(&callout_stop_evq[k]);
-    }
-    
-    /* Initialize the callout function */
-    for(k = 0; k<MULTI_SIZE; k++){
-        os_callout_func_init(&callout_func_stop_test[k], &callout_stop_evq[k],
-           my_callout_stop_func, NULL);
-    }
-
-    /* Does not return until OS_restart is called */
-    os_start();
-
-}
-
-/* Test case to test case for speak and listen */
-TEST_CASE(callout_test_speak)
-{
-    /* Initializing the OS */
-    sysinit();
-    
-    /* Initialize the sending task */
-    os_task_init(&callout_task_struct_speak, "callout_task_speak",
-        callout_task_stop_speak, NULL, SPEAK_CALLOUT_TASK_PRIO, OS_WAIT_FOREVER,
-        callout_task_stack_speak, CALLOUT_STACK_SIZE);
-
-    /* Initialize the receive task */
-    os_task_init(&callout_task_struct_listen, "callout_task_listen",
-        callout_task_stop_listen, NULL, LISTEN_CALLOUT_TASK_PRIO, OS_WAIT_FOREVER,
-        callout_task_stack_listen, CALLOUT_STACK_SIZE);
-
-    os_eventq_init(&callout_evq);
-    
-    /* Initialize the callout function */
-    os_callout_func_init(&callout_func_speak, &callout_evq,
-        my_callout_speak_func, NULL);    
-    /* Does not return until OS_restart is called */
-    os_start();
-
-}
+TEST_CASE_DECL(callout_test_speak)
+TEST_CASE_DECL(callout_test_stop)
+TEST_CASE_DECL(callout_test)
 
 TEST_SUITE(os_callout_test_suite)
 {   

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/kernel/os/test/src/callout_test.h
----------------------------------------------------------------------
diff --git a/kernel/os/test/src/callout_test.h b/kernel/os/test/src/callout_test.h
new file mode 100644
index 0000000..3e0d94d
--- /dev/null
+++ b/kernel/os/test/src/callout_test.h
@@ -0,0 +1,96 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+#ifndef _CALLOUT_TEST_H
+#define _CALLOUT_TEST_H
+
+#include "sysinit/sysinit.h"
+#include "testutil/testutil.h"
+#include "os/os.h"
+#include "os_test_priv.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Task 1 for sending */
+#define CALLOUT_STACK_SIZE        (5120)
+#define SEND_CALLOUT_TASK_PRIO        (1)
+extern struct os_task callout_task_struct_send;
+extern os_stack_t callout_task_stack_send[CALLOUT_STACK_SIZE];
+
+#define RECEIVE_CALLOUT_TASK_PRIO        (2)
+extern struct os_task callout_task_struct_receive;
+extern os_stack_t callout_task_stack_receive[CALLOUT_STACK_SIZE];
+
+/* Delearing variables for callout_func */
+extern struct os_callout_func callout_func_test;
+
+/* The event to be sent*/
+extern struct os_eventq callout_evq;
+extern struct os_event callout_ev;
+
+/* The callout_stop task */
+#define SEND_STOP_CALLOUT_TASK_PRIO        (3)
+extern struct os_task callout_task_struct_stop_send;
+extern os_stack_t callout_task_stack_stop_send[CALLOUT_STACK_SIZE];
+
+#define RECEIVE_STOP_CALLOUT_TASK_PRIO        (4)
+extern struct os_task callout_task_struct_stop_receive;
+extern os_stack_t callout_task_stack_stop_receive[CALLOUT_STACK_SIZE];
+
+/* Delearing variables for callout_stop_func */
+#define MULTI_SIZE    (2)
+extern struct os_callout_func callout_func_stop_test[MULTI_SIZE];
+
+/* The event to be sent*/
+extern struct os_eventq callout_stop_evq[MULTI_SIZE];
+extern struct os_event callout_stop_ev;
+
+/* Declearing varables for callout_speak */
+#define SPEAK_CALLOUT_TASK_PRIO        (5)
+extern struct os_task callout_task_struct_speak;
+extern os_stack_t callout_task_stack_speak[CALLOUT_STACK_SIZE];
+
+/* Declearing varaibles for listen */
+#define LISTEN_CALLOUT_TASK_PRIO        (6)
+extern struct os_task callout_task_struct_listen;
+extern os_stack_t callout_task_stack_listen[CALLOUT_STACK_SIZE];
+
+extern struct os_callout_func callout_func_speak;
+
+/* Global variables to be used by the callout functions */
+extern int p;
+extern int q;
+extern int t;
+
+void my_callout_func(void *arg);
+void my_callout_stop_func(void *arg);
+void my_callout_speak_func(void *arg);
+void callout_task_send(void *arg);
+void callout_task_receive(void *arg);
+void callout_task_stop_send(void *arg);
+void callout_task_stop_receive(void *arg);
+void callout_task_stop_speak(void *arg);
+void callout_task_stop_listen(void *arg);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _CALLOUT_TEST_H */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/kernel/os/test/src/eventq_test.c
----------------------------------------------------------------------
diff --git a/kernel/os/test/src/eventq_test.c b/kernel/os/test/src/eventq_test.c
index a891f0c..77c24a6 100644
--- a/kernel/os/test/src/eventq_test.c
+++ b/kernel/os/test/src/eventq_test.c
@@ -82,6 +82,12 @@ os_stack_t eventq_task_stack_poll_single_s[POLL_STACK_SIZE];
 struct os_task eventq_task_poll_single_r;
 os_stack_t eventq_task_stack_poll_single_r[POLL_STACK_SIZE];
 
+TEST_CASE_DECL(event_test_sr)
+TEST_CASE_DECL(event_test_poll_sr)
+TEST_CASE_DECL(event_test_poll_timeout_sr)
+TEST_CASE_DECL(event_test_poll_single_sr)
+TEST_CASE_DECL(event_test_poll_0timo)
+
 /* This is the task function  to send data */
 void
 eventq_task_send(void *arg)
@@ -261,152 +267,6 @@ eventq_task_poll_single_receive(void *arg)
     os_test_restart();
 }
 
-TEST_CASE(event_test_sr)
-{
-    int i;
-
-    /* Initializing the OS */
-    sysinit();
-    /* Initialize the task */
-    os_task_init(&eventq_task_s, "eventq_task_s", eventq_task_send, NULL,
-        SEND_TASK_PRIO, OS_WAIT_FOREVER, eventq_task_stack_s, MY_STACK_SIZE);
-
-    /* Receive events and check whether the eevnts are correctly received */
-    os_task_init(&eventq_task_r, "eventq_task_r", eventq_task_receive, NULL,
-        RECEIVE_TASK_PRIO, OS_WAIT_FOREVER, eventq_task_stack_r,
-        MY_STACK_SIZE);
-
-    os_eventq_init(&my_eventq);
-
-    for (i = 0; i < SIZE_MULTI_EVENT; i++){
-        os_eventq_init(&multi_eventq[i]);
-    }
-
-    /* Does not return until OS_restart is called */
-    os_start();
-
-}
-
-/* To test for the basic function of os_eventq_poll() */
-TEST_CASE(event_test_poll_sr)
-{
-    int i;
-
-    /* Initializing the OS */
-    sysinit();
-    /* Initialize the task */
-    os_task_init(&eventq_task_poll_s, "eventq_task_poll_s", eventq_task_poll_send,
-        NULL, SEND_TASK_POLL_PRIO, OS_WAIT_FOREVER, eventq_task_stack_poll_s, 
-        POLL_STACK_SIZE);
-
-    /* Receive events and check whether the eevnts are correctly received */
-    os_task_init(&eventq_task_poll_r, "eventq_task_r", eventq_task_poll_receive,
-        NULL, RECEIVE_TASK_POLL_PRIO, OS_WAIT_FOREVER, eventq_task_stack_poll_r,
-        POLL_STACK_SIZE);
-
-    /* Initializing the eventqs. */
-    for (i = 0; i < SIZE_MULTI_EVENT; i++){
-        os_eventq_init(&multi_eventq[i]);
-    }
-
-    /* Does not return until OS_restart is called */
-    os_start();
-
-}
-
-/* Test case for poll timeout */
-TEST_CASE(event_test_poll_timeout_sr)
-{
-    int i;
-
-    /* Initializing the OS */
-    sysinit();
-    /* Initialize the task */
-    os_task_init(&eventq_task_poll_timeout_s, "eventq_task_poll_timeout_s", 
-        eventq_task_poll_timeout_send, NULL, SEND_TASK_POLL_TIMEOUT_PRIO,
-        OS_WAIT_FOREVER, eventq_task_stack_poll_timeout_s, POLL_STACK_SIZE);
-
-    /* Receive events and check whether the eevnts are correctly received */
-    os_task_init(&eventq_task_poll_timeout_r, "eventq_task_timeout_r",
-        eventq_task_poll_timeout_receive, NULL, RECEIVE_TASK_POLL_TIMEOUT_PRIO,
-        OS_WAIT_FOREVER, eventq_task_stack_poll_timeout_r, POLL_STACK_SIZE);
-
-    /* Initializing the eventqs. */
-    for (i = 0; i < SIZE_MULTI_EVENT; i++){
-        os_eventq_init(&multi_eventq[i]);
-
-        m_event[i].ev_type = i + 10;
-        m_event[i].ev_arg = NULL;
-    }
-
-    /* Does not return until OS_restart is called */
-    os_start();
-
-}
-
-/* The case for poll single */
-/* Test case for poll timeout */
-TEST_CASE(event_test_poll_single_sr)
-{
-    int i;
-
-    /* Initializing the OS */
-    sysinit();
-    /* Initialize the task */
-    os_task_init(&eventq_task_poll_single_s, "eventq_task_poll_single_s", 
-        eventq_task_poll_single_send, NULL, SEND_TASK_POLL_SINGLE_PRIO,
-        OS_WAIT_FOREVER, eventq_task_stack_poll_single_s, POLL_STACK_SIZE);
-
-    /* Receive events and check whether the eevnts are correctly received */
-    os_task_init(&eventq_task_poll_single_r, "eventq_task_single_r",
-        eventq_task_poll_single_receive, NULL, RECEIVE_TASK_POLL_SINGLE_PRIO,
-        OS_WAIT_FOREVER, eventq_task_stack_poll_single_r, POLL_STACK_SIZE);
-
-    for (i = 0; i < SIZE_MULTI_EVENT; i++){
-        os_eventq_init(&multi_eventq[i]);
-
-        m_event[i].ev_type = 10 * i;
-        m_event[i].ev_arg = NULL;
-    }
-
-    /* Does not return until OS_restart is called */
-    os_start();
-
-}
-
-/**
- * Tests eventq_poll() with a timeout of 0.  This should not involve the
- * scheduler at all, so it should work without starting the OS.
- */
-TEST_CASE(event_test_poll_0timo)
-{
-    struct os_eventq *eventqs[SIZE_MULTI_EVENT];
-    struct os_event *evp;
-    struct os_event ev;
-    int i;
-
-    for (i = 0; i < SIZE_MULTI_EVENT; i++){
-        os_eventq_init(&multi_eventq[i]);
-        eventqs[i] = &multi_eventq[i];
-    }
-
-    evp = os_eventq_poll(eventqs, SIZE_MULTI_EVENT, 0);
-    TEST_ASSERT(evp == NULL);
-
-    /* Ensure no eventq thinks a task is waiting on it. */
-    for (i = 0; i < SIZE_MULTI_EVENT; i++) {
-        TEST_ASSERT(eventqs[i]->evq_task == NULL);
-    }
-
-    /* Put an event on one of the queues. */
-    memset(&ev, 0, sizeof ev);
-    ev.ev_type = 1;
-    os_eventq_put(eventqs[3], &ev);
-
-    evp = os_eventq_poll(eventqs, SIZE_MULTI_EVENT, 0);
-    TEST_ASSERT(evp == &ev);
-}
-
 TEST_SUITE(os_eventq_test_suite)
 {
     event_test_sr();

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/kernel/os/test/src/eventq_test.h
----------------------------------------------------------------------
diff --git a/kernel/os/test/src/eventq_test.h b/kernel/os/test/src/eventq_test.h
new file mode 100644
index 0000000..a061b86
--- /dev/null
+++ b/kernel/os/test/src/eventq_test.h
@@ -0,0 +1,104 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+#ifndef _EVENTQ_TEST_H
+#define _EVENTQ_TEST_H
+ 
+#include <string.h>
+#include "sysinit/sysinit.h"
+#include "testutil/testutil.h"
+#include "os/os.h"
+#include "os_test_priv.h"
+#include "os/os_eventq.h"
+
+#ifdef __cplusplus
+#extern "C" {
+#endif
+
+#define MY_STACK_SIZE        (5120)
+#define POLL_STACK_SIZE        (4096)
+/* Task 1 sending task */
+/* Define task stack and task object */
+#define SEND_TASK_PRIO        (1)
+extern struct os_task eventq_task_s;
+extern os_stack_t eventq_task_stack_s[MY_STACK_SIZE];
+
+/* Task 2 receiving task */
+#define RECEIVE_TASK_PRIO     (2)
+extern struct os_task eventq_task_r;
+extern os_stack_t eventq_task_stack_r[MY_STACK_SIZE];
+
+extern struct os_eventq my_eventq;
+
+#define SIZE_MULTI_EVENT        (4)
+extern struct os_eventq multi_eventq[SIZE_MULTI_EVENT];
+
+/* This is to set the events we will use below */
+extern struct os_event g_event;
+extern struct os_event m_event[SIZE_MULTI_EVENT];
+
+/* Setting the event to send and receive multiple data */
+extern uint8_t my_event_type;
+
+/* Setting up data for the poll */
+/* Define the task stack for the eventq_task_poll_send */
+#define SEND_TASK_POLL_PRIO        (3)
+extern struct os_task eventq_task_poll_s;
+extern os_stack_t eventq_task_stack_poll_s[POLL_STACK_SIZE];
+
+/* Define the task stack for the eventq_task_poll_receive */
+#define RECEIVE_TASK_POLL_PRIO     (4)
+extern struct os_task eventq_task_poll_r;
+extern os_stack_t eventq_task_stack_poll_r[POLL_STACK_SIZE ];
+
+/* Setting the data for the poll timeout */
+/* Define the task stack for the eventq_task_poll_timeout_send */
+#define SEND_TASK_POLL_TIMEOUT_PRIO        (5)
+extern struct os_task eventq_task_poll_timeout_s;
+extern os_stack_t eventq_task_stack_poll_timeout_s[POLL_STACK_SIZE];
+
+/* Define the task stack for the eventq_task_poll_receive */
+#define RECEIVE_TASK_POLL_TIMEOUT_PRIO     (6)
+extern struct os_task eventq_task_poll_timeout_r;
+extern os_stack_t eventq_task_stack_poll_timeout_r[POLL_STACK_SIZE];
+
+/* Setting the data for the poll single */
+/* Define the task stack for the eventq_task_poll_single_send */
+#define SEND_TASK_POLL_SINGLE_PRIO        (7)
+extern struct os_task eventq_task_poll_single_s;
+extern os_stack_t eventq_task_stack_poll_single_s[POLL_STACK_SIZE];
+
+/* Define the task stack for the eventq_task_poll_single_receive */
+#define RECEIVE_TASK_POLL_SINGLE_PRIO     (8)
+struct os_task eventq_task_poll_single_r;
+os_stack_t eventq_task_stack_poll_single_r[POLL_STACK_SIZE];
+
+void eventq_task_send(void *arg);
+void eventq_task_receive(void *arg);
+void eventq_task_poll_send(void *arg);
+void eventq_task_poll_receive(void *arg);
+void eventq_task_poll_timeout_send(void *arg);
+void eventq_task_poll_timeout_receive(void *arg);
+void eventq_task_poll_single_send(void *arg);
+void eventq_task_poll_single_receive(void *arg);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _EVENTQ_TEST_H */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/kernel/os/test/src/mbuf_test.c
----------------------------------------------------------------------
diff --git a/kernel/os/test/src/mbuf_test.c b/kernel/os/test/src/mbuf_test.c
index dd4121d..73b6660 100644
--- a/kernel/os/test/src/mbuf_test.c
+++ b/kernel/os/test/src/mbuf_test.c
@@ -32,14 +32,14 @@
 
 #define MBUF_TEST_DATA_LEN          (1024)
 
-static os_membuf_t os_mbuf_membuf[OS_MEMPOOL_SIZE(MBUF_TEST_POOL_BUF_SIZE,
+os_membuf_t os_mbuf_membuf[OS_MEMPOOL_SIZE(MBUF_TEST_POOL_BUF_SIZE,
         MBUF_TEST_POOL_BUF_COUNT)];
 
-static struct os_mbuf_pool os_mbuf_pool;
-static struct os_mempool os_mbuf_mempool;
-static uint8_t os_mbuf_test_data[MBUF_TEST_DATA_LEN];
+struct os_mbuf_pool os_mbuf_pool;
+struct os_mempool os_mbuf_mempool;
+uint8_t os_mbuf_test_data[MBUF_TEST_DATA_LEN];
 
-static void
+void
 os_mbuf_test_setup(void)
 {
     int rc;
@@ -58,7 +58,7 @@ os_mbuf_test_setup(void)
     }
 }
 
-static void
+void
 os_mbuf_test_misc_assert_sane(struct os_mbuf *om, void *data,
                               int buflen, int pktlen, int pkthdr_len)
 {
@@ -95,318 +95,13 @@ os_mbuf_test_misc_assert_sane(struct os_mbuf *om, void *data,
     TEST_ASSERT(totlen == pktlen);
 }
 
-
-TEST_CASE(os_mbuf_test_alloc)
-{
-    struct os_mbuf *m;
-    int rc;
-
-    os_mbuf_test_setup();
-
-    m = os_mbuf_get(&os_mbuf_pool, 0);
-    TEST_ASSERT_FATAL(m != NULL, "Error allocating mbuf");
-
-    rc = os_mbuf_free(m);
-    TEST_ASSERT_FATAL(rc == 0, "Error free'ing mbuf %d", rc);
-}
-
-TEST_CASE(os_mbuf_test_get_pkthdr)
-{
-    struct os_mbuf *m;
- 
-    os_mbuf_test_setup();
-
-#if (MBUF_TEST_POOL_BUF_SIZE <= 256)
-    m = os_mbuf_get_pkthdr(&os_mbuf_pool, MBUF_TEST_POOL_BUF_SIZE - 1);
-    TEST_ASSERT_FATAL(m == NULL, "Error: should not have returned mbuf");
-#endif
-
-    m = os_mbuf_get(&os_mbuf_pool, MBUF_TEST_POOL_BUF_SIZE);
-    TEST_ASSERT_FATAL(m == NULL, "Error: should not have returned mbuf");
-}
-
-
-TEST_CASE(os_mbuf_test_dup)
-{
-    struct os_mbuf *om;
-    struct os_mbuf *om2;
-    struct os_mbuf *dup;
-    int rc;
-
-    os_mbuf_test_setup();
-
-    /* Test first allocating and duplicating a single mbuf */
-    om = os_mbuf_get(&os_mbuf_pool, 0);
-    TEST_ASSERT_FATAL(om != NULL, "Error allocating mbuf");
-
-    rc = os_mbuf_append(om, os_mbuf_test_data, 200);
-    TEST_ASSERT_FATAL(rc == 0);
-    os_mbuf_test_misc_assert_sane(om, os_mbuf_test_data, 200, 200, 0);
-
-    dup = os_mbuf_dup(om);
-    TEST_ASSERT_FATAL(dup != NULL, "NULL mbuf returned from dup");
-    TEST_ASSERT_FATAL(dup != om, "duplicate matches original.");
-    os_mbuf_test_misc_assert_sane(dup, os_mbuf_test_data, 200, 200, 0);
-
-    rc = os_mbuf_free(om);
-    TEST_ASSERT_FATAL(rc == 0, "Error free'ing mbuf om %d", rc);
-
-    rc = os_mbuf_free(dup);
-    TEST_ASSERT_FATAL(rc == 0, "Error free'ing mbuf dup %d", rc);
-
-    om = os_mbuf_get(&os_mbuf_pool, 0);
-    TEST_ASSERT_FATAL(om != NULL, "Error allocating mbuf");
-    rc = os_mbuf_append(om, os_mbuf_test_data, 200);
-    TEST_ASSERT_FATAL(rc == 0);
-    os_mbuf_test_misc_assert_sane(om, os_mbuf_test_data, 200, 200, 0);
-
-    om2 = os_mbuf_get(&os_mbuf_pool, 0);
-    TEST_ASSERT_FATAL(om2 != NULL, "Error allocating mbuf");
-    rc = os_mbuf_append(om2, os_mbuf_test_data + 200, 200);
-    TEST_ASSERT_FATAL(rc == 0);
-    os_mbuf_test_misc_assert_sane(om2, os_mbuf_test_data + 200, 200, 200, 0);
-
-    os_mbuf_concat(om, om2);
-    os_mbuf_test_misc_assert_sane(om, os_mbuf_test_data, 200, 400, 0);
-
-    dup = os_mbuf_dup(om);
-    TEST_ASSERT_FATAL(dup != NULL, "NULL mbuf returned from dup");
-    TEST_ASSERT_FATAL(dup != om, "Duplicate matches original");
-    TEST_ASSERT_FATAL(SLIST_NEXT(dup, om_next) != NULL,
-            "NULL chained element, duplicate should match original");
-
-    os_mbuf_test_misc_assert_sane(dup, os_mbuf_test_data, 200, 400, 0);
-
-    rc = os_mbuf_free_chain(om);
-    TEST_ASSERT_FATAL(rc == 0, "Cannot free mbuf chain %d", rc);
-
-    rc = os_mbuf_free_chain(dup);
-    TEST_ASSERT_FATAL(rc == 0, "Cannot free mbuf chain %d", rc);
-}
-
-TEST_CASE(os_mbuf_test_append)
-{
-    struct os_mbuf *om;
-    int rc;
-    uint8_t databuf[] = {0xa, 0xb, 0xc, 0xd};
-    uint8_t cmpbuf[] = {0xff, 0xff, 0xff, 0xff};
-
-    os_mbuf_test_setup();
-
-    om = os_mbuf_get(&os_mbuf_pool, 0);
-    TEST_ASSERT_FATAL(om != NULL, "Error allocating mbuf");
-    os_mbuf_test_misc_assert_sane(om, NULL, 0, 0, 0);
-
-    rc = os_mbuf_append(om, databuf, sizeof(databuf));
-    TEST_ASSERT_FATAL(rc == 0, "Cannot add %d bytes to mbuf",
-            sizeof(databuf));
-    os_mbuf_test_misc_assert_sane(om, databuf, sizeof databuf, sizeof databuf,
-                                  0);
-
-    memcpy(cmpbuf, OS_MBUF_DATA(om, uint8_t *), om->om_len);
-    TEST_ASSERT_FATAL(memcmp(cmpbuf, databuf, sizeof(databuf)) == 0,
-            "Databuf doesn't match cmpbuf");
-}
-
-TEST_CASE(os_mbuf_test_extend)
-{
-    struct os_mbuf *om;
-    void *v;
-
-    os_mbuf_test_setup();
-
-    /*** Series of successful extensions. */
-    om = os_mbuf_get_pkthdr(&os_mbuf_pool, 10);
-    TEST_ASSERT_FATAL(om != NULL);
-
-    TEST_ASSERT(OS_MBUF_TRAILINGSPACE(om) == 222);
-    TEST_ASSERT(SLIST_NEXT(om, om_next) == NULL);
-    os_mbuf_test_misc_assert_sane(om, NULL, 0, 0, 18);
-
-    v = os_mbuf_extend(om, 20);
-    TEST_ASSERT(v != NULL);
-    TEST_ASSERT(v == om->om_data);
-    TEST_ASSERT(om->om_len == 20);
-
-    TEST_ASSERT(OS_MBUF_TRAILINGSPACE(om) == 202);
-    TEST_ASSERT(SLIST_NEXT(om, om_next) == NULL);
-    os_mbuf_test_misc_assert_sane(om, NULL, 20, 20, 18);
-
-    v = os_mbuf_extend(om, 100);
-    TEST_ASSERT(v != NULL);
-    TEST_ASSERT(v == om->om_data + 20);
-    TEST_ASSERT(om->om_len == 120);
-
-    TEST_ASSERT(OS_MBUF_TRAILINGSPACE(om) == 102);
-    TEST_ASSERT(SLIST_NEXT(om, om_next) == NULL);
-    os_mbuf_test_misc_assert_sane(om, NULL, 120, 120, 18);
-
-    v = os_mbuf_extend(om, 101);
-    TEST_ASSERT(v != NULL);
-    TEST_ASSERT(v == om->om_data + 120);
-    TEST_ASSERT(om->om_len == 221);
-
-    TEST_ASSERT(OS_MBUF_TRAILINGSPACE(om) == 1);
-    TEST_ASSERT(SLIST_NEXT(om, om_next) == NULL);
-    os_mbuf_test_misc_assert_sane(om, NULL, 221, 221, 18);
-
-    v = os_mbuf_extend(om, 1);
-    TEST_ASSERT(v != NULL);
-    TEST_ASSERT(v == om->om_data + 221);
-    TEST_ASSERT(om->om_len == 222);
-
-    TEST_ASSERT(OS_MBUF_TRAILINGSPACE(om) == 0);
-    TEST_ASSERT(SLIST_NEXT(om, om_next) == NULL);
-    os_mbuf_test_misc_assert_sane(om, NULL, 222, 222, 18);
-
-    /* Overflow into next buffer. */
-    v = os_mbuf_extend(om, 1);
-    TEST_ASSERT(OS_MBUF_TRAILINGSPACE(om) == 0);
-    TEST_ASSERT(SLIST_NEXT(om, om_next) != NULL);
-
-    TEST_ASSERT(v == SLIST_NEXT(om, om_next)->om_data);
-    TEST_ASSERT(om->om_len == 222);
-    TEST_ASSERT(SLIST_NEXT(om, om_next)->om_len == 1);
-    os_mbuf_test_misc_assert_sane(om, NULL, 222, 223, 18);
-
-    /*** Attempt to extend by an amount larger than max buf size fails. */
-    v = os_mbuf_extend(om, 257);
-    TEST_ASSERT(v == NULL);
-    TEST_ASSERT(OS_MBUF_TRAILINGSPACE(om) == 0);
-    TEST_ASSERT(SLIST_NEXT(om, om_next) != NULL);
-
-    TEST_ASSERT(om->om_len == 222);
-    TEST_ASSERT(SLIST_NEXT(om, om_next)->om_len == 1);
-    os_mbuf_test_misc_assert_sane(om, NULL, 222, 223, 18);
-}
-
-TEST_CASE(os_mbuf_test_pullup)
-{
-    struct os_mbuf *om;
-    struct os_mbuf *om2;
-    int rc;
-
-    os_mbuf_test_setup();
-
-    /*** Free when too much os_mbuf_test_data is requested. */
-    om = os_mbuf_get_pkthdr(&os_mbuf_pool, 10);
-    TEST_ASSERT_FATAL(om != NULL);
-
-    om = os_mbuf_pullup(om, 1);
-    TEST_ASSERT(om == NULL);
-
-    /*** No effect when all os_mbuf_test_data is already at the start. */
-    om = os_mbuf_get_pkthdr(&os_mbuf_pool, 10);
-    TEST_ASSERT_FATAL(om != NULL);
-
-    rc = os_mbuf_append(om, os_mbuf_test_data, 1);
-    TEST_ASSERT_FATAL(rc == 0);
-    os_mbuf_test_misc_assert_sane(om, os_mbuf_test_data, 1, 1, 18);
-
-    om = os_mbuf_pullup(om, 1);
-    os_mbuf_test_misc_assert_sane(om, os_mbuf_test_data, 1, 1, 18);
-
-    /*** Spread os_mbuf_test_data across four mbufs. */
-    om2 = os_mbuf_get(&os_mbuf_pool, 10);
-    TEST_ASSERT_FATAL(om2 != NULL);
-    rc = os_mbuf_append(om2, os_mbuf_test_data + 1, 1);
-    TEST_ASSERT_FATAL(rc == 0);
-    os_mbuf_concat(om, om2);
-
-    om2 = os_mbuf_get(&os_mbuf_pool, 10);
-    TEST_ASSERT_FATAL(om2 != NULL);
-    rc = os_mbuf_append(om2, os_mbuf_test_data + 2, 1);
-    TEST_ASSERT_FATAL(rc == 0);
-    os_mbuf_concat(om, om2);
-
-    om2 = os_mbuf_get(&os_mbuf_pool, 10);
-    TEST_ASSERT_FATAL(om2 != NULL);
-    rc = os_mbuf_append(om2, os_mbuf_test_data + 3, 1);
-    TEST_ASSERT_FATAL(rc == 0);
-    os_mbuf_concat(om, om2);
-
-    TEST_ASSERT_FATAL(OS_MBUF_PKTLEN(om) == 4);
-
-    om = os_mbuf_pullup(om, 4);
-    os_mbuf_test_misc_assert_sane(om, os_mbuf_test_data, 4, 4, 18);
-
-    os_mbuf_free_chain(om);
-
-    /*** Require an allocation. */
-    om = os_mbuf_get_pkthdr(&os_mbuf_pool, 10);
-    TEST_ASSERT_FATAL(om != NULL);
-
-    om->om_data += 100;
-    rc = os_mbuf_append(om, os_mbuf_test_data, 100);
-    TEST_ASSERT_FATAL(rc == 0);
-
-    om2 = os_mbuf_get(&os_mbuf_pool, 10);
-    TEST_ASSERT_FATAL(om2 != NULL);
-    rc = os_mbuf_append(om2, os_mbuf_test_data + 100, 100);
-    TEST_ASSERT_FATAL(rc == 0);
-    os_mbuf_concat(om, om2);
-
-    om = os_mbuf_pullup(om, 200);
-    os_mbuf_test_misc_assert_sane(om, os_mbuf_test_data, 200, 200, 18);
-
-    /*** Partial pullup. */
-    om = os_mbuf_get_pkthdr(&os_mbuf_pool, 10);
-    TEST_ASSERT_FATAL(om != NULL);
-
-    om->om_data += 100;
-    rc = os_mbuf_append(om, os_mbuf_test_data, 100);
-    TEST_ASSERT_FATAL(rc == 0);
-
-    om2 = os_mbuf_get(&os_mbuf_pool, 10);
-    TEST_ASSERT_FATAL(om2 != NULL);
-    rc = os_mbuf_append(om2, os_mbuf_test_data + 100, 100);
-    TEST_ASSERT_FATAL(rc == 0);
-    os_mbuf_concat(om, om2);
-
-    om = os_mbuf_pullup(om, 150);
-    os_mbuf_test_misc_assert_sane(om, os_mbuf_test_data, 150, 200, 18);
-}
-
-TEST_CASE(os_mbuf_test_adj)
-{
-    struct os_mbuf *om;
-    int rc;
-
-    os_mbuf_test_setup();
-
-    om = os_mbuf_get_pkthdr(&os_mbuf_pool, 10);
-    TEST_ASSERT_FATAL(om != NULL);
-
-    rc = os_mbuf_append(om, os_mbuf_test_data, sizeof os_mbuf_test_data);
-    TEST_ASSERT_FATAL(rc == 0);
-
-    os_mbuf_test_misc_assert_sane(om, os_mbuf_test_data, 222,
-                                  sizeof os_mbuf_test_data, 18);
-
-    /* Remove from the front. */
-    os_mbuf_adj(om, 10);
-    os_mbuf_test_misc_assert_sane(om, os_mbuf_test_data + 10, 212,
-                                  sizeof os_mbuf_test_data - 10, 18);
-
-    /* Remove from the back. */
-    os_mbuf_adj(om, -10);
-    os_mbuf_test_misc_assert_sane(om, os_mbuf_test_data + 10, 212,
-                                  sizeof os_mbuf_test_data - 20, 18);
-
-    /* Remove entire first buffer. */
-    os_mbuf_adj(om, 212);
-    os_mbuf_test_misc_assert_sane(om, os_mbuf_test_data + 222, 0,
-                                  sizeof os_mbuf_test_data - 232, 18);
-
-    /* Remove next buffer. */
-    os_mbuf_adj(om, 256);
-    os_mbuf_test_misc_assert_sane(om, os_mbuf_test_data + 478, 0,
-                                  sizeof os_mbuf_test_data - 488, 18);
-
-    /* Remove more data than is present. */
-    os_mbuf_adj(om, 1000);
-    os_mbuf_test_misc_assert_sane(om, NULL, 0, 0, 18);
-}
+TEST_CASE_DECL(os_mbuf_test_alloc)
+TEST_CASE_DECL(os_mbuf_test_dup)
+TEST_CASE_DECL(os_mbuf_test_append)
+TEST_CASE_DECL(os_mbuf_test_pullup)
+TEST_CASE_DECL(os_mbuf_test_extend)
+TEST_CASE_DECL(os_mbuf_test_adj)
+TEST_CASE_DECL(os_mbuf_test_get_pkthdr)
 
 TEST_SUITE(os_mbuf_test_suite)
 {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/kernel/os/test/src/mbuf_test.h
----------------------------------------------------------------------
diff --git a/kernel/os/test/src/mbuf_test.h b/kernel/os/test/src/mbuf_test.h
new file mode 100644
index 0000000..7585263
--- /dev/null
+++ b/kernel/os/test/src/mbuf_test.h
@@ -0,0 +1,56 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+#ifndef _MBUF_TEST_H
+#define _MBUF_TEST_H
+
+#include "testutil/testutil.h"
+#include "os/os.h"
+#include "os_test_priv.h"
+
+#include <string.h>
+
+#ifdef __cplusplus
+#extern "C" {
+#endif
+
+/* 
+ * NOTE: currently, the buffer size cannot be changed as some tests are
+ * hard-coded for this size.
+ */
+#define MBUF_TEST_POOL_BUF_SIZE     (256)
+#define MBUF_TEST_POOL_BUF_COUNT    (10)
+
+#define MBUF_TEST_DATA_LEN          (1024)
+
+extern os_membuf_t os_mbuf_membuf[OS_MEMPOOL_SIZE(MBUF_TEST_POOL_BUF_SIZE,
+        MBUF_TEST_POOL_BUF_COUNT)];
+
+extern struct os_mbuf_pool os_mbuf_pool;
+extern struct os_mempool os_mbuf_mempool;
+extern uint8_t os_mbuf_test_data[MBUF_TEST_DATA_LEN];
+
+void os_mbuf_test_setup(void);
+void os_mbuf_test_misc_assert_sane(struct os_mbuf *om, void *data, int buflen,
+                                   int pktlen, int pkthdr_len);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _MBUF_TEST_H */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/kernel/os/test/src/mempool_test.c
----------------------------------------------------------------------
diff --git a/kernel/os/test/src/mempool_test.c b/kernel/os/test/src/mempool_test.c
index cd17c90..15a48bc 100644
--- a/kernel/os/test/src/mempool_test.c
+++ b/kernel/os/test/src/mempool_test.c
@@ -46,7 +46,7 @@ void *block_array[MEMPOOL_TEST_MAX_BLOCKS];
 
 int verbose = 0;
 
-static int
+int
 mempool_test_get_pool_size(int num_blocks, int block_size)
 {
     int mem_pool_size;
@@ -60,7 +60,7 @@ mempool_test_get_pool_size(int num_blocks, int block_size)
     return mem_pool_size;
 }
 
-static void
+void
 mempool_test(int num_blocks, int block_size)
 {
     int cnt;
@@ -209,17 +209,7 @@ mempool_test(int num_blocks, int block_size)
     TEST_ASSERT(rc == OS_INVALID_PARM, "No error freeing bad block address");
 }
 
-/**
- * os mempool test 
- *  
- * Main test loop for memory pool testing. 
- * 
- * @return int 
- */
-TEST_CASE(os_mempool_test_case)
-{
-    mempool_test(NUM_MEM_BLOCKS, MEM_BLOCK_SIZE);
-}
+TEST_CASE_DECL(os_mempool_test_case)
 
 TEST_SUITE(os_mempool_test_suite)
 {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/kernel/os/test/src/mempool_test.h
----------------------------------------------------------------------
diff --git a/kernel/os/test/src/mempool_test.h b/kernel/os/test/src/mempool_test.h
new file mode 100644
index 0000000..78258ca
--- /dev/null
+++ b/kernel/os/test/src/mempool_test.h
@@ -0,0 +1,60 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+#ifndef _MEMPOOL_TEST_H
+#define _MEMPOOL_TEST_H
+
+#include <stdio.h>
+#include <string.h>
+#include "testutil/testutil.h"
+#include "os/os.h"
+#include "os_test_priv.h"
+
+#ifdef __cplusplus
+#extern "C" {
+#endif
+
+/* Create a memory pool for testing */
+#define NUM_MEM_BLOCKS  (10)
+#define MEM_BLOCK_SIZE  (80)
+
+/* Limit max blocks for testing */
+#define MEMPOOL_TEST_MAX_BLOCKS     (128)
+
+extern int alignment;
+
+/* Test memory pool structure */
+extern struct os_mempool g_TstMempool;
+
+/* Test memory pool buffer */
+extern os_membuf_t TstMembuf[OS_MEMPOOL_SIZE(NUM_MEM_BLOCKS, MEM_BLOCK_SIZE)];
+
+/* Array of block pointers. */
+extern void *block_array[MEMPOOL_TEST_MAX_BLOCKS];
+
+extern int verbose;
+
+int mempool_test_get_pool_size(int num_blocks, int block_size);
+
+void mempool_test(int num_blocks, int block_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _MEMPOOL_TEST_H */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/kernel/os/test/src/mutex_test.c
----------------------------------------------------------------------
diff --git a/kernel/os/test/src/mutex_test.c b/kernel/os/test/src/mutex_test.c
index fbcfe17..54a1f2d 100644
--- a/kernel/os/test/src/mutex_test.c
+++ b/kernel/os/test/src/mutex_test.c
@@ -56,7 +56,7 @@ volatile int g_task17_val;
 struct os_mutex g_mutex1;
 struct os_mutex g_mutex2;
 
-static volatile int g_mutex_test;
+volatile int g_mutex_test;
 
 /**
  * mutex test basic 
@@ -65,7 +65,7 @@ static volatile int g_mutex_test;
  * 
  * @return int 
  */
-static void
+void
 mutex_test_basic_handler(void *arg)
 {
     struct os_mutex *mu;
@@ -137,7 +137,7 @@ mutex_test_basic_handler(void *arg)
     os_test_restart();
 }
 
-static void 
+void 
 mutex_test1_task14_handler(void *arg)
 {
     os_error_t err;
@@ -162,7 +162,7 @@ mutex_test1_task14_handler(void *arg)
     os_test_restart();
 }
 
-static void 
+void 
 mutex_test2_task14_handler(void *arg)
 {
     os_error_t err;
@@ -198,7 +198,7 @@ mutex_test2_task14_handler(void *arg)
     os_test_restart();
 }
 
-static void 
+void 
 task15_handler(void *arg) 
 {
     os_error_t err;
@@ -241,7 +241,7 @@ task15_handler(void *arg)
     }
 }
 
-static void 
+void 
 task16_handler(void *arg) 
 {
     os_error_t err;
@@ -297,7 +297,7 @@ task16_handler(void *arg)
     }
 }
 
-static void 
+void 
 task17_handler(void *arg)
 {
     os_error_t err;
@@ -329,74 +329,9 @@ task17_handler(void *arg)
     }
 }
 
-TEST_CASE(os_mutex_test_basic)
-{
-    sysinit();
-
-    os_mutex_init(&g_mutex1);
-
-    os_task_init(&task14, "task14", mutex_test_basic_handler, NULL,
-                 TASK14_PRIO, OS_WAIT_FOREVER, stack14,
-                 OS_STACK_ALIGN(MUTEX_TEST_STACK_SIZE));
-
-    os_start();
-}
-
-TEST_CASE(os_mutex_test_case_1)
-{
-    int rc;
-
-    sysinit();
-
-    g_mutex_test = 1;
-    g_task14_val = 0;
-    g_task15_val = 0;
-    g_task16_val = 0;
-
-    rc = os_mutex_init(&g_mutex1);
-    TEST_ASSERT(rc == 0);
-    rc = os_mutex_init(&g_mutex2);
-    TEST_ASSERT(rc == 0);
-
-    os_task_init(&task14, "task14", mutex_test1_task14_handler, NULL,
-                 TASK14_PRIO, OS_WAIT_FOREVER, stack14,
-                 OS_STACK_ALIGN(MUTEX_TEST_STACK_SIZE));
-
-    os_task_init(&task15, "task15", task15_handler, NULL, TASK15_PRIO, 
-            OS_WAIT_FOREVER, stack15, OS_STACK_ALIGN(MUTEX_TEST_STACK_SIZE));
-
-    os_task_init(&task16, "task16", task16_handler, NULL, TASK16_PRIO, 
-            OS_WAIT_FOREVER, stack16, OS_STACK_ALIGN(MUTEX_TEST_STACK_SIZE));
-
-    os_start();
-}
-
-TEST_CASE(os_mutex_test_case_2)
-{
-    sysinit();
-
-    g_mutex_test = 2;
-    g_task14_val = 0;
-    g_task15_val = 0;
-    g_task16_val = 0;
-    os_mutex_init(&g_mutex1);
-    os_mutex_init(&g_mutex2);
-
-    os_task_init(&task14, "task14", mutex_test2_task14_handler, NULL,
-                 TASK14_PRIO, OS_WAIT_FOREVER, stack14,
-                 OS_STACK_ALIGN(MUTEX_TEST_STACK_SIZE));
-
-    os_task_init(&task15, "task15", task15_handler, NULL, TASK15_PRIO, 
-            OS_WAIT_FOREVER, stack15, OS_STACK_ALIGN(MUTEX_TEST_STACK_SIZE));
-
-    os_task_init(&task16, "task16", task16_handler, NULL, TASK16_PRIO, 
-            OS_WAIT_FOREVER, stack16, OS_STACK_ALIGN(MUTEX_TEST_STACK_SIZE));
-
-    os_task_init(&task17, "task17", task17_handler, NULL, TASK17_PRIO, 
-            OS_WAIT_FOREVER, stack17, OS_STACK_ALIGN(MUTEX_TEST_STACK_SIZE));
- 
-    os_start();
-}
+TEST_CASE_DECL(os_mutex_test_basic)
+TEST_CASE_DECL(os_mutex_test_case_1)
+TEST_CASE_DECL(os_mutex_test_case_2)
 
 TEST_SUITE(os_mutex_test_suite)
 {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/kernel/os/test/src/mutex_test.h
----------------------------------------------------------------------
diff --git a/kernel/os/test/src/mutex_test.h b/kernel/os/test/src/mutex_test.h
new file mode 100644
index 0000000..221d0ad
--- /dev/null
+++ b/kernel/os/test/src/mutex_test.h
@@ -0,0 +1,78 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+#ifndef _MUTEX_TEST_H
+#define _MUTEX_TEST_H
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <sys/time.h>
+#include "sysinit/sysinit.h"
+#include "testutil/testutil.h"
+#include "os/os.h"
+#include "os/os_test.h"
+#include "os_test_priv.h"
+
+#ifdef __cplusplus
+#extern "C" {
+#endif
+
+#ifdef ARCH_sim
+#define MUTEX_TEST_STACK_SIZE   1024
+#else
+#define MUTEX_TEST_STACK_SIZE   256
+#endif
+
+extern struct os_task task14;
+extern os_stack_t stack14[OS_STACK_ALIGN(MUTEX_TEST_STACK_SIZE)];
+
+extern struct os_task task15;
+extern os_stack_t stack15[OS_STACK_ALIGN(MUTEX_TEST_STACK_SIZE)];
+
+extern struct os_task task16;
+extern os_stack_t stack16[OS_STACK_ALIGN(MUTEX_TEST_STACK_SIZE)];
+
+extern struct os_task task17;
+extern os_stack_t stack17[OS_STACK_ALIGN(MUTEX_TEST_STACK_SIZE)];
+
+#define TASK14_PRIO (4)
+#define TASK15_PRIO (5)
+#define TASK16_PRIO (6)
+#define TASK17_PRIO (7)
+
+extern volatile int g_task14_val;
+extern volatile int g_task15_val;
+extern volatile int g_task16_val;
+extern volatile int g_task17_val;
+extern struct os_mutex g_mutex1;
+extern struct os_mutex g_mutex2;
+extern volatile int g_mutex_test;
+
+void mutex_test_basic_handler(void *arg);
+void mutex_test1_task14_handler(void *arg);
+void mutex_test2_task14_handler(void *arg);
+void task15_handler(void *arg);
+void task16_handler(void *arg);
+void task17_handler(void *arg);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _MUTEX_TEST_H */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/kernel/os/test/src/os_test.c
----------------------------------------------------------------------
diff --git a/kernel/os/test/src/os_test.c b/kernel/os/test/src/os_test.c
index e9d041b..71188d2 100644
--- a/kernel/os/test/src/os_test.c
+++ b/kernel/os/test/src/os_test.c
@@ -16,7 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
 #include <assert.h>
 #include <stddef.h>
 #include "syscfg/syscfg.h"
@@ -24,6 +23,38 @@
 #include "os/os_test.h"
 #include "os_test_priv.h"
 
+#include <stdio.h>
+#include <setjmp.h>
+#include <signal.h>
+#include <string.h>
+#include <sys/time.h>
+#include "os/os.h"
+
+void
+os_test_restart(void)
+{
+    struct sigaction sa;
+    struct itimerval it;
+    int rc;
+
+    g_os_started = 0;
+
+    memset(&sa, 0, sizeof sa);
+    sa.sa_handler = SIG_IGN;
+
+    sigaction(SIGALRM, &sa, NULL);
+    sigaction(SIGVTALRM, &sa, NULL);
+
+    memset(&it, 0, sizeof(it));
+    rc = setitimer(ITIMER_VIRTUAL, &it, NULL);
+    if (rc != 0) {
+        perror("Cannot set itimer");
+        abort();
+    }
+
+    tu_restart();
+}
+
 int
 os_test_all(void)
 {
@@ -42,7 +73,7 @@ os_test_all(void)
 int
 main(int argc, char **argv)
 {
-    tu_config.tc_print_results = 1;
+    ts_config.ts_print_results = 1;
     tu_init();
 
     os_test_all();

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/kernel/os/test/src/os_test_priv.h
----------------------------------------------------------------------
diff --git a/kernel/os/test/src/os_test_priv.h b/kernel/os/test/src/os_test_priv.h
index 945efc0..eaa33d1 100644
--- a/kernel/os/test/src/os_test_priv.h
+++ b/kernel/os/test/src/os_test_priv.h
@@ -20,6 +20,19 @@
 #ifndef H_OS_TEST_PRIV_
 #define H_OS_TEST_PRIV_
 
+#include "sysinit/sysinit.h"
+#include "testutil/testutil.h"
+#include "os/os.h"
+#include "os_test_priv.h"
+
+#include "callout_test.h"
+
+#include "eventq_test.h"
+#include "mbuf_test.h"
+#include "mempool_test.h"
+#include "mutex_test.h"
+#include "sem_test.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/75101ba4/kernel/os/test/src/sem_test.c
----------------------------------------------------------------------
diff --git a/kernel/os/test/src/sem_test.c b/kernel/os/test/src/sem_test.c
index 9fe7824..1319bc7 100644
--- a/kernel/os/test/src/sem_test.c
+++ b/kernel/os/test/src/sem_test.c
@@ -58,6 +58,8 @@ struct os_sem g_sem1;
  * 
  */
 
+char sem_test_buf[128];
+
 /**
  * sem test disp sem
  *  
@@ -65,18 +67,25 @@ struct os_sem g_sem1;
  * 
  * @param sem 
  */
-static const char *
+const char *
 sem_test_sem_to_s(const struct os_sem *sem)
 {
-    static char buf[128];
+#if 0
+    char buf[128];
 
     snprintf(buf, sizeof buf, "\tSemaphore: tokens=%u head=%p",
              sem->sem_tokens, SLIST_FIRST(&sem->sem_head));
 
     return buf;
+#else
+    snprintf(sem_test_buf, sizeof sem_test_buf, "\tSemaphore: tokens=%u head=%p",
+             sem->sem_tokens, SLIST_FIRST(&sem->sem_head));
+
+    return sem_test_buf;
+#endif
 }
 
-static void 
+void 
 sem_test_sleep_task_handler(void *arg)
 {
     struct os_task *t;
@@ -88,7 +97,7 @@ sem_test_sleep_task_handler(void *arg)
     os_test_restart();
 }
 
-static void
+void
 sem_test_pend_release_loop(int delay, int timeout, int itvl)
 {
     os_error_t err;
@@ -113,7 +122,7 @@ sem_test_pend_release_loop(int delay, int timeout, int itvl)
  * 
  * @return int 
  */
-static void 
+void 
 sem_test_basic_handler(void *arg)
 {
     struct os_task *t;
@@ -178,7 +187,7 @@ sem_test_basic_handler(void *arg)
     os_test_restart();
 }
 
-static void 
+void 
 sem_test_1_task1_handler(void *arg)
 {
     os_error_t err;
@@ -207,188 +216,77 @@ sem_test_1_task1_handler(void *arg)
     os_test_restart();
 }
 
-TEST_CASE(os_sem_test_basic)
-{
-    os_error_t err;
-
-    sysinit();
-
-    err = os_sem_init(&g_sem1, 1);
-    TEST_ASSERT(err == OS_OK);
-
-    os_task_init(&task1, "task1", sem_test_basic_handler, NULL, TASK1_PRIO, 
-            OS_WAIT_FOREVER, stack1, OS_STACK_ALIGN(SEM_TEST_STACK_SIZE));
-
-    os_start();
-}
-
-static void 
+void 
 sem_test_1_task2_handler(void *arg) 
 {
     sem_test_pend_release_loop(0, OS_TICKS_PER_SEC / 10, OS_TICKS_PER_SEC / 10);
 }
 
-static void 
+void 
 sem_test_1_task3_handler(void *arg) 
 {
     sem_test_pend_release_loop(0, OS_TIMEOUT_NEVER, OS_TICKS_PER_SEC * 2);
 }
 
-TEST_CASE(os_sem_test_case_1)
-{
-    os_error_t err;
-
-    sysinit();
-
-    err = os_sem_init(&g_sem1, 1);
-    TEST_ASSERT(err == OS_OK);
-
-    os_task_init(&task1, "task1", sem_test_1_task1_handler, NULL,
-                 TASK1_PRIO, OS_WAIT_FOREVER, stack1,
-                 OS_STACK_ALIGN(SEM_TEST_STACK_SIZE));
-
-    os_task_init(&task2, "task2", sem_test_1_task2_handler, NULL,
-                 TASK2_PRIO, OS_WAIT_FOREVER, stack2,
-                 OS_STACK_ALIGN(SEM_TEST_STACK_SIZE));
-
-    os_task_init(&task3, "task3", sem_test_1_task3_handler, NULL, TASK3_PRIO, 
-                 OS_WAIT_FOREVER, stack3, OS_STACK_ALIGN(SEM_TEST_STACK_SIZE));
-
-    os_start();
-}
-
-static void 
+void 
 sem_test_2_task2_handler(void *arg) 
 {
     sem_test_pend_release_loop(0, 2000, 2000);
 }
 
-static void 
+void 
 sem_test_2_task3_handler(void *arg) 
 {
     sem_test_pend_release_loop(0, OS_TIMEOUT_NEVER, 2000);
 }
 
-static void 
+void 
 sem_test_2_task4_handler(void *arg) 
 {
     sem_test_pend_release_loop(0, 2000, 2000);
 }
 
-TEST_CASE(os_sem_test_case_2)
-{
-    os_error_t err;
-
-    sysinit();
-
-    err = os_sem_init(&g_sem1, 1);
-    TEST_ASSERT(err == OS_OK);
-
-    os_task_init(&task1, "task1", sem_test_sleep_task_handler, NULL,
-                 TASK1_PRIO, OS_WAIT_FOREVER, stack1,
-                 OS_STACK_ALIGN(SEM_TEST_STACK_SIZE));
-
-    os_task_init(&task2, "task2", sem_test_2_task2_handler, NULL,
-                 TASK2_PRIO, OS_WAIT_FOREVER, stack2,
-                 OS_STACK_ALIGN(SEM_TEST_STACK_SIZE));
-
-    os_task_init(&task3, "task3", sem_test_2_task3_handler, NULL, TASK3_PRIO,
-            OS_WAIT_FOREVER, stack3, OS_STACK_ALIGN(SEM_TEST_STACK_SIZE));
-
-    os_task_init(&task4, "task4", sem_test_2_task4_handler, NULL, TASK4_PRIO,
-            OS_WAIT_FOREVER, stack4, OS_STACK_ALIGN(SEM_TEST_STACK_SIZE));
-
-    os_start();
-}
-
-static void 
+void 
 sem_test_3_task2_handler(void *arg) 
 {
     sem_test_pend_release_loop(100, 2000, 2000);
 }
 
-static void 
+void 
 sem_test_3_task3_handler(void *arg) 
 {
     sem_test_pend_release_loop(150, 2000, 2000);
 }
 
-static void 
+void 
 sem_test_3_task4_handler(void *arg) 
 {
     sem_test_pend_release_loop(0, 2000, 2000);
 }
 
-TEST_CASE(os_sem_test_case_3)
-{
-    os_error_t err;
-
-    sysinit();
-
-    err = os_sem_init(&g_sem1, 1);
-    TEST_ASSERT(err == OS_OK);
-
-    os_task_init(&task1, "task1", sem_test_sleep_task_handler, NULL,
-                 TASK1_PRIO, OS_WAIT_FOREVER, stack1,
-                 OS_STACK_ALIGN(SEM_TEST_STACK_SIZE));
-
-    os_task_init(&task2, "task2", sem_test_3_task2_handler, NULL,
-                 TASK2_PRIO, OS_WAIT_FOREVER, stack2,
-                 OS_STACK_ALIGN(SEM_TEST_STACK_SIZE));
-
-    os_task_init(&task3, "task3", sem_test_3_task3_handler, NULL, TASK3_PRIO,
-            OS_WAIT_FOREVER, stack3, OS_STACK_ALIGN(SEM_TEST_STACK_SIZE));
-
-    os_task_init(&task4, "task4", sem_test_3_task4_handler, NULL, TASK4_PRIO,
-            OS_WAIT_FOREVER, stack4, OS_STACK_ALIGN(SEM_TEST_STACK_SIZE));
-
-    os_start();
-}
-
-static void 
+void 
 sem_test_4_task2_handler(void *arg) 
 {
     sem_test_pend_release_loop(60, 2000, 2000);
 }
 
-static void 
+void 
 sem_test_4_task3_handler(void *arg) 
 {
     sem_test_pend_release_loop(60, 2000, 2000);
 }
 
-static void 
+void 
 sem_test_4_task4_handler(void *arg) 
 {
     sem_test_pend_release_loop(0, 2000, 2000);
 }
 
-
-TEST_CASE(os_sem_test_case_4)
-{
-    os_error_t err;
-
-    sysinit();
-
-    err = os_sem_init(&g_sem1, 1);
-    TEST_ASSERT(err == OS_OK);
-
-    os_task_init(&task1, "task1", sem_test_sleep_task_handler, NULL,
-                 TASK1_PRIO, OS_WAIT_FOREVER, stack1,
-                 OS_STACK_ALIGN(SEM_TEST_STACK_SIZE));
-
-    os_task_init(&task2, "task2", sem_test_4_task2_handler, NULL,
-                 TASK2_PRIO, OS_WAIT_FOREVER, stack2,
-                 OS_STACK_ALIGN(SEM_TEST_STACK_SIZE));
-
-    os_task_init(&task3, "task3", sem_test_4_task3_handler, NULL, TASK3_PRIO,
-                 OS_WAIT_FOREVER, stack3, OS_STACK_ALIGN(SEM_TEST_STACK_SIZE));
-
-    os_task_init(&task4, "task4", sem_test_4_task4_handler, NULL, TASK4_PRIO,
-                 OS_WAIT_FOREVER, stack4, OS_STACK_ALIGN(SEM_TEST_STACK_SIZE));
-
-    os_start();
-}
+TEST_CASE_DECL(os_sem_test_basic)
+TEST_CASE_DECL(os_sem_test_case_1)
+TEST_CASE_DECL(os_sem_test_case_2)
+TEST_CASE_DECL(os_sem_test_case_3)
+TEST_CASE_DECL(os_sem_test_case_4)
 
 TEST_SUITE(os_sem_test_suite)
 {