]> Kevux Git Server - fll/commitdiff
Update: Fix the f_directory unit tests and finish writing them.
authorKevin Day <thekevinday@gmail.com>
Sat, 9 Apr 2022 05:25:03 +0000 (00:25 -0500)
committerKevin Day <thekevinday@gmail.com>
Sat, 9 Apr 2022 05:25:03 +0000 (00:25 -0500)
The problem with the unit tests not being run (especially on Github) appears to be the result of compiler optimizations.
Fix this by disabling compiler optimizations in the mock functions and add appropriate commetns explaining this.

Do not wrap/mock strncmp() and strnlen().

The directory tests are now completed.

13 files changed:
level_0/f_account/data/build/settings-mocks
level_0/f_capability/data/build/settings-mocks
level_0/f_color/data/build/settings-mocks
level_0/f_conversion/data/build/settings-mocks
level_0/f_directory/data/build/settings-mocks
level_0/f_directory/tests/unit/c/mock-directory.c
level_0/f_directory/tests/unit/c/test-directory-exists_at.c
level_0/f_directory/tests/unit/c/test-directory-is.c
level_0/f_directory/tests/unit/c/test-directory-is_at.c
level_0/f_directory/tests/unit/c/test-directory-list.c
level_0/f_directory/tests/unit/c/test-directory-touch.c
level_0/f_directory/tests/unit/c/test-directory-touch_at.c
level_0/f_directory/tests/unit/c/test-directory.c

index abd5dd9cc74ddc6a1c26e9c2950a56685a38bcff..50b5d2ee972bc43acfa4341cdc622b10d8246b09 100644 (file)
@@ -6,6 +6,9 @@
 # Therefore, this file is a work-around to inject the mocks into the library for testing purposes.
 # This should exactly match the "settings" file, except for the additional "-Wl,--wrap" parts and the additional mock source file.
 #
+# The flags -o0 must be passed to prevent the compiler from optimizing away any functions being mocked (which results in the mock not happening and a real function being called).
+# Alternatively, figure out which optimization that is disabled by -o0 and have that specific optimization disabled.
+#
 
 build_name f_account
 
@@ -47,7 +50,7 @@ search_exclusive yes
 search_shared yes
 search_static yes
 
-flags -O2 -z now -g -fdiagnostics-color=always -Wno-logical-not-parentheses -Wno-parentheses
+flags -O0 -z now -g -fdiagnostics-color=always -Wno-logical-not-parentheses -Wno-parentheses
 flags-clang -Wno-logical-op-parentheses
 flags-test -fstack-protector
 
index e25492a802c472f25b86dbb6c190c85e78f25a0b..9268328d10b4262f1300dfb1cc9e055ce75d79e5 100644 (file)
@@ -6,6 +6,9 @@
 # Therefore, this file is a work-around to inject the mocks into the library for testing purposes.
 # This should exactly match the "settings" file, except for the additional "-Wl,--wrap" parts and the additional mock source file.
 #
+# The flags -o0 must be passed to prevent the compiler from optimizing away any functions being mocked (which results in the mock not happening and a real function being called).
+# Alternatively, figure out which optimization that is disabled by -o0 and have that specific optimization disabled.
+#
 
 build_name f_capability
 
@@ -50,7 +53,7 @@ search_static yes
 #defines -D_di_libcap_
 defines -D_libcap_legacy_only_
 
-flags -O2 -z now -g -fdiagnostics-color=always -Wno-logical-not-parentheses -Wno-parentheses
+flags -O0 -z now -g -fdiagnostics-color=always -Wno-logical-not-parentheses -Wno-parentheses
 flags-clang -Wno-logical-op-parentheses
 flags-test -fstack-protector
 
index c4bc248353dd3693d4fad3f26db2638fdcce8d05..1bece6005b0398d7bcbca412a24c0fff73b59357 100644 (file)
@@ -6,6 +6,9 @@
 # Therefore, this file is a work-around to inject the mocks into the library for testing purposes.
 # This should exactly match the "settings" file, except for the additional "-Wl,--wrap" parts and the additional mock source file.
 #
+# The flags -o0 must be passed to prevent the compiler from optimizing away any functions being mocked (which results in the mock not happening and a real function being called).
+# Alternatively, figure out which optimization that is disabled by -o0 and have that specific optimization disabled.
+#
 
 build_name f_color
 
@@ -47,7 +50,7 @@ search_exclusive yes
 search_shared yes
 search_static yes
 
-flags -O2 -z now -g -fdiagnostics-color=always -Wno-logical-not-parentheses -Wno-parentheses
+flags -O0 -z now -g -fdiagnostics-color=always -Wno-logical-not-parentheses -Wno-parentheses
 flags-clang -Wno-logical-op-parentheses
 flags-test -fstack-protector
 flags_library -fPIC
index ed7160e8277367ac96fb7ae9d30329fe4a957b41..2568b10d5564138699734ebc957cf31d74cb9acd 100644 (file)
@@ -6,6 +6,9 @@
 # Therefore, this file is a work-around to inject the mocks into the library for testing purposes.
 # This should exactly match the "settings" file, except for the additional "-Wl,--wrap" parts and the additional mock source file.
 #
+# The flags -o0 must be passed to prevent the compiler from optimizing away any functions being mocked (which results in the mock not happening and a real function being called).
+# Alternatively, figure out which optimization that is disabled by -o0 and have that specific optimization disabled.
+#
 
 build_name f_conversion
 
@@ -47,7 +50,7 @@ search_exclusive yes
 search_shared yes
 search_static yes
 
-flags -O2 -z now -g -fdiagnostics-color=always -Wno-logical-not-parentheses -Wno-parentheses
+flags -O0 -z now -g -fdiagnostics-color=always -Wno-logical-not-parentheses -Wno-parentheses
 flags-clang -Wno-logical-op-parentheses
 flags-test -fstack-protector
 
index 3eb294f5156f559808c2d1df578129c11b866123..f01c1578fb366a2d65d7ee0e40f453b4502097cc 100644 (file)
@@ -6,6 +6,9 @@
 # Therefore, this file is a work-around to inject the mocks into the library for testing purposes.
 # This should exactly match the "settings" file, except for the additional "-Wl,--wrap" parts and the additional mock source file.
 #
+# The flags -o0 must be passed to prevent the compiler from optimizing away any functions being mocked (which results in the mock not happening and a real function being called).
+# Alternatively, figure out which optimization that is disabled by -o0 and have that specific optimization disabled.
+#
 
 build_name f_directory
 
@@ -47,7 +50,7 @@ search_exclusive yes
 search_shared yes
 search_static yes
 
-flags -O2 -z now -g -fdiagnostics-color=always -Wno-logical-not-parentheses -Wno-parentheses
+flags -O0 -z now -g -fdiagnostics-color=always -Wno-logical-not-parentheses -Wno-parentheses
 flags-clang -Wno-logical-op-parentheses
 flags-test -fstack-protector
 
@@ -64,7 +67,5 @@ flags -Wl,--wrap=openat
 flags -Wl,--wrap=remove
 flags -Wl,--wrap=scandir
 flags -Wl,--wrap=stat
-flags -Wl,--wrap=strncmp
-flags -Wl,--wrap=strnlen
 flags -Wl,--wrap=utimensat
 flags -Wl,--wrap=versionsort
index 4396552326c45bf74e16616e3a47baaa9fb71cef..16e6b64dfa51f54036b58cf5eaaa24e81a2b581e 100644 (file)
@@ -149,6 +149,22 @@ int __wrap_stat(const char *pathname, struct stat *statbuf) {
     return -1;
   }
 
+  struct stat * const mocked_stat = mock_type(struct stat *);
+
+  statbuf->st_dev = mocked_stat->st_dev;
+  statbuf->st_ino = mocked_stat->st_ino;
+  statbuf->st_mode = mocked_stat->st_mode;
+  statbuf->st_nlink = mocked_stat->st_nlink;
+  statbuf->st_uid = mocked_stat->st_uid;
+  statbuf->st_gid = mocked_stat->st_gid;
+  statbuf->st_rdev = mocked_stat->st_rdev;
+  statbuf->st_size = mocked_stat->st_size;
+  statbuf->st_blksize = mocked_stat->st_blksize;
+  statbuf->st_blocks = mocked_stat->st_blocks;
+  statbuf->st_atime = mocked_stat->st_atime;
+  statbuf->st_mtime = mocked_stat->st_mtime;
+  statbuf->st_ctime = mocked_stat->st_ctime;
+
   return mock_type(int);
 }
 
index 1ed62c2c6eeec59de1b7b225cc86a37105b12adf..eb9156a7c5c75391bc741b3c05125756b5a9560f 100644 (file)
@@ -37,8 +37,8 @@ void test__f_directory_exists_at__fails(void **state) {
 
   for (int i = 0; i < 10; ++i) {
 
-    will_return(__wrap_stat, true);
-    will_return(__wrap_stat, errnos[i]);
+    will_return(__wrap_fstatat, true);
+    will_return(__wrap_fstatat, errnos[i]);
 
     const f_status_t status = f_directory_exists_at(0, path, 0);
 
@@ -64,9 +64,9 @@ void test__f_directory_exists_at__returns_false(void **state) {
   memset(&statistics, 0, sizeof (struct stat));
 
   {
-    will_return(__wrap_stat, false);
-    will_return(__wrap_stat, &statistics);
-    will_return(__wrap_stat, 0);
+    will_return(__wrap_fstatat, false);
+    will_return(__wrap_fstatat, &statistics);
+    will_return(__wrap_fstatat, 0);
 
     const f_status_t status = f_directory_exists_at(0, path, 0);
 
@@ -85,9 +85,9 @@ void test__f_directory_exists_at__returns_true(void **state) {
   statistics.st_mode = 1 | S_IFDIR;
 
   {
-    will_return(__wrap_stat, false);
-    will_return(__wrap_stat, &statistics);
-    will_return(__wrap_stat, 0);
+    will_return(__wrap_fstatat, false);
+    will_return(__wrap_fstatat, &statistics);
+    will_return(__wrap_fstatat, 0);
 
     const f_status_t status = f_directory_exists_at(0, path, 0);
 
index fcc3507967879f46a5262e347af90d42e6f43d79..df82271a7971a6231ebb0feb8b2e75708d7f6196 100644 (file)
@@ -12,6 +12,7 @@ void test__f_directory_is__fails(void **state) {
   int errnos[] = {
     EACCES,
     EFAULT,
+    ELOOP,
     ENAMETOOLONG,
     ENOENT,
     ENOMEM,
@@ -32,7 +33,7 @@ void test__f_directory_is__fails(void **state) {
     F_file_stat,
   };
 
-  for (int i = 0; i < 8; ++i) {
+  for (int i = 0; i < 9; ++i) {
 
     will_return(__wrap_stat, true);
     will_return(__wrap_stat, errnos[i]);
index f6902375e1278d7b45e34f8043c5e892d2cd5792..6c88285dd3298aaee08fd3a96c18a6881aa8dda4 100644 (file)
@@ -37,8 +37,8 @@ void test__f_directory_is_at__fails(void **state) {
 
   for (int i = 0; i < 10; ++i) {
 
-    will_return(__wrap_stat, true);
-    will_return(__wrap_stat, errnos[i]);
+    will_return(__wrap_fstatat, true);
+    will_return(__wrap_fstatat, errnos[i]);
 
     const f_status_t status = f_directory_is_at(0, path, 0);
 
@@ -64,9 +64,9 @@ void test__f_directory_is_at__returns_false(void **state) {
   memset(&statistics, 0, sizeof (struct stat));
 
   {
-    will_return(__wrap_stat, false);
-    will_return(__wrap_stat, &statistics);
-    will_return(__wrap_stat, 0);
+    will_return(__wrap_fstatat, false);
+    will_return(__wrap_fstatat, &statistics);
+    will_return(__wrap_fstatat, 0);
 
     const f_status_t status = f_directory_is_at(0, path, 0);
 
@@ -85,9 +85,9 @@ void test__f_directory_is_at__returns_true(void **state) {
   statistics.st_mode = 1 | S_IFDIR;
 
   {
-    will_return(__wrap_stat, false);
-    will_return(__wrap_stat, &statistics);
-    will_return(__wrap_stat, 0);
+    will_return(__wrap_fstatat, false);
+    will_return(__wrap_fstatat, &statistics);
+    will_return(__wrap_fstatat, 0);
 
     const f_status_t status = f_directory_is_at(0, path, 0);
 
index e36f7154dd68e2a7fe268c94964b15f5753d3d3b..c8fd80c04070f34c6c1f132b5fb10fa1cda03533 100644 (file)
@@ -69,7 +69,13 @@ void test__f_directory_list__returns_directory_empty(void **state) {
   const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
 
   {
+    // The scandir() allocates the entire struct dirent.
+    struct dirent **directories = (struct dirent **) malloc(sizeof(struct dirent *));
+
+    memset(directories, 0, sizeof(struct dirent *));
+
     will_return(__wrap_scandir, false);
+    will_return(__wrap_scandir, directories);
     will_return(__wrap_scandir, 0);
 
     const f_status_t status = f_directory_list(path, 0, 0, &names);
@@ -86,20 +92,18 @@ void test__f_directory_list__works(void **state) {
   const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
 
   {
-    struct dirent directory;
-    memset(&directory, 0, sizeof(struct dirent));
-
-    struct dirent directories[2];
+    // The scandir() allocates the entire struct dirent.
+    struct dirent **directories = (struct dirent **) malloc(sizeof(struct dirent *));
 
-    memset(directories, 0, sizeof(struct dirent) * 2);
+    directories[0] = (struct dirent *) malloc(sizeof(struct dirent));
 
-    directories[0] = directory;
+    memset(directories[0], 0, sizeof(struct dirent));
+    memcpy(directories[0]->d_name, path.string, sizeof(f_char_t) * path.used);
+    directories[0]->d_name[path.used] = 0;
 
     will_return(__wrap_scandir, false);
-    will_return(__wrap_scandir, &directories);
-    will_return(__wrap_strnlen, 1);
-    will_return(__wrap_strncmp, 1);
-    will_return(__wrap_strncmp, 1);
+    will_return(__wrap_scandir, directories);
+    will_return(__wrap_scandir, 1);
 
     const f_status_t status = f_directory_list(path, 0, 0, &names);
 
index 866e91f84deb8d9029948f40e3eb34c489c8d965..af9d2f4935b0d70ad803b6c0307306350ded6cf7 100644 (file)
@@ -29,7 +29,7 @@ void test__f_directory_touch__fails(void **state) {
       F_memory_not,
       F_directory_not,
       F_number_overflow,
-      F_failure,
+      F_file_stat,
     };
 
     for (int i = 0; i < 8; ++i) {
@@ -124,10 +124,17 @@ void test__f_directory_touch__fails(void **state) {
       F_failure,
     };
 
+    struct stat statistics;
+
+    memset(&statistics, 0, sizeof (struct stat));
+
+    statistics.st_mode = 1 | S_IFDIR;
+
     for (int i = 0; i < 12; ++i) {
 
-      will_return(__wrap_mkdir, false);
-      will_return(__wrap_mkdir, 0);
+      will_return(__wrap_stat, false);
+      will_return(__wrap_stat, &statistics);
+      will_return(__wrap_stat, 0);
       will_return(__wrap_utimensat, true);
       will_return(__wrap_utimensat, errnos[i]);
 
@@ -152,10 +159,17 @@ void test__f_directory_touch__works(void **state) {
   const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
 
   {
-      will_return(__wrap_mkdir, false);
-      will_return(__wrap_mkdir, 0);
-      will_return(__wrap_utimensat, false);
-      will_return(__wrap_utimensat, 0);
+    struct stat statistics;
+
+    memset(&statistics, 0, sizeof (struct stat));
+
+    statistics.st_mode = 1 | S_IFDIR;
+
+    will_return(__wrap_stat, false);
+    will_return(__wrap_stat, &statistics);
+    will_return(__wrap_stat, 0);
+    will_return(__wrap_utimensat, false);
+    will_return(__wrap_utimensat, 0);
 
     const f_status_t status = f_directory_touch(path, 0);
 
@@ -163,10 +177,10 @@ void test__f_directory_touch__works(void **state) {
   }
 
   {
-      will_return(__wrap_mkdir, true);
-      will_return(__wrap_mkdir, ENOENT);
-      will_return(__wrap_mkdir, false);
-      will_return(__wrap_mkdir, 0);
+    will_return(__wrap_stat, true);
+    will_return(__wrap_stat, ENOENT);
+    will_return(__wrap_mkdir, false);
+    will_return(__wrap_mkdir, 0);
 
     const f_status_t status = f_directory_touch(path, 0);
 
index 3102ab243ec4f5aa315b0a7049ada71570adf68e..6c941bbbc1ce0e68cd8fe0f4f25ccc3e9b4344e8 100644 (file)
@@ -29,13 +29,13 @@ void test__f_directory_touch_at__fails(void **state) {
       F_memory_not,
       F_directory_not,
       F_number_overflow,
-      F_failure,
+      F_file_stat,
     };
 
     for (int i = 0; i < 8; ++i) {
 
-      will_return(__wrap_stat, true);
-      will_return(__wrap_stat, errnos[i]);
+      will_return(__wrap_fstatat, true);
+      will_return(__wrap_fstatat, errnos[i]);
 
       const f_status_t status = f_directory_touch_at(1, path, 0, 0);
 
@@ -82,10 +82,10 @@ void test__f_directory_touch_at__fails(void **state) {
 
     for (int i = 0; i < 15; ++i) {
 
-      will_return(__wrap_stat, true);
-      will_return(__wrap_stat, ENOENT);
-      will_return(__wrap_mkdir, true);
-      will_return(__wrap_mkdir, errnos[i]);
+      will_return(__wrap_fstatat, true);
+      will_return(__wrap_fstatat, ENOENT);
+      will_return(__wrap_mkdirat, true);
+      will_return(__wrap_mkdirat, errnos[i]);
 
       const f_status_t status = f_directory_touch_at(1, path, 0, 0);
 
@@ -124,10 +124,17 @@ void test__f_directory_touch_at__fails(void **state) {
       F_failure,
     };
 
+    struct stat statistics;
+
+    memset(&statistics, 0, sizeof (struct stat));
+
+    statistics.st_mode = 1 | S_IFDIR;
+
     for (int i = 0; i < 12; ++i) {
 
-      will_return(__wrap_mkdir, false);
-      will_return(__wrap_mkdir, 0);
+      will_return(__wrap_fstatat, false);
+      will_return(__wrap_fstatat, &statistics);
+      will_return(__wrap_fstatat, 0);
       will_return(__wrap_utimensat, true);
       will_return(__wrap_utimensat, errnos[i]);
 
@@ -152,10 +159,17 @@ void test__f_directory_touch_at__works(void **state) {
   const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
 
   {
-      will_return(__wrap_mkdir, false);
-      will_return(__wrap_mkdir, 0);
-      will_return(__wrap_utimensat, false);
-      will_return(__wrap_utimensat, 0);
+    struct stat statistics;
+
+    memset(&statistics, 0, sizeof (struct stat));
+
+    statistics.st_mode = 1 | S_IFDIR;
+
+    will_return(__wrap_fstatat, false);
+    will_return(__wrap_fstatat, &statistics);
+    will_return(__wrap_fstatat, 0);
+    will_return(__wrap_utimensat, false);
+    will_return(__wrap_utimensat, 0);
 
     const f_status_t status = f_directory_touch_at(1, path, 0, 0);
 
@@ -163,10 +177,10 @@ void test__f_directory_touch_at__works(void **state) {
   }
 
   {
-      will_return(__wrap_mkdir, true);
-      will_return(__wrap_mkdir, ENOENT);
-      will_return(__wrap_mkdir, false);
-      will_return(__wrap_mkdir, 0);
+    will_return(__wrap_fstatat, true);
+    will_return(__wrap_fstatat, ENOENT);
+    will_return(__wrap_mkdirat, false);
+    will_return(__wrap_mkdirat, 0);
 
     const f_status_t status = f_directory_touch_at(1, path, 0, 0);
 
index ff117b632fb1bde60d937a104b2caa32c5b08324..da29a283f034f412c0c567cf5b5e8371bf15b19e 100644 (file)
@@ -27,35 +27,30 @@ int main(void) {
     cmocka_unit_test(test__f_directory_create_at__returns_data_not),
     cmocka_unit_test(test__f_directory_create_at__works),
 
-    // Unable to perform tests because stat() appears to not properly get mocked.
-    //cmocka_unit_test(test__f_directory_exists__fails),
-    //cmocka_unit_test(test__f_directory_exists__returns_data_not),
-    //cmocka_unit_test(test__f_directory_exists__returns_false),
-    //cmocka_unit_test(test__f_directory_exists__returns_true),
-
-    // Unable to perform tests because stat() appears to not properly get mocked.
-    //cmocka_unit_test(test__f_directory_exists_at__fails),
-    //cmocka_unit_test(test__f_directory_exists_at__returns_data_not),
-    //cmocka_unit_test(test__f_directory_exists_at__returns_false),
-    //cmocka_unit_test(test__f_directory_exists_at__returns_true),
-
-    // Unable to perform tests because stat() appears to not properly get mocked.
-    //cmocka_unit_test(test__f_directory_is__fails),
-    //cmocka_unit_test(test__f_directory_is__returns_data_not),
-    //cmocka_unit_test(test__f_directory_is__returns_false),
-    //cmocka_unit_test(test__f_directory_is__returns_true),
-
-    // Unable to perform tests because stat() appears to not properly get mocked.
-    //cmocka_unit_test(test__f_directory_is_at__fails),
-    //cmocka_unit_test(test__f_directory_is_at__returns_data_not),
-    //cmocka_unit_test(test__f_directory_is_at__returns_false),
-    //cmocka_unit_test(test__f_directory_is_at__returns_true),
-
-    // Unable to perform tests because scandir() appears to not properly get mocked.
-    //cmocka_unit_test(test__f_directory_list__fails),
-    //cmocka_unit_test(test__f_directory_list__returns_data_not),
-    //cmocka_unit_test(test__f_directory_list__returns_directory_empty),
-    //cmocka_unit_test(test__f_directory_list__works),
+    cmocka_unit_test(test__f_directory_exists__fails),
+    cmocka_unit_test(test__f_directory_exists__returns_data_not),
+    cmocka_unit_test(test__f_directory_exists__returns_false),
+    cmocka_unit_test(test__f_directory_exists__returns_true),
+
+    cmocka_unit_test(test__f_directory_exists_at__fails),
+    cmocka_unit_test(test__f_directory_exists_at__returns_data_not),
+    cmocka_unit_test(test__f_directory_exists_at__returns_false),
+    cmocka_unit_test(test__f_directory_exists_at__returns_true),
+
+    cmocka_unit_test(test__f_directory_is__fails),
+    cmocka_unit_test(test__f_directory_is__returns_data_not),
+    cmocka_unit_test(test__f_directory_is__returns_false),
+    cmocka_unit_test(test__f_directory_is__returns_true),
+
+    cmocka_unit_test(test__f_directory_is_at__fails),
+    cmocka_unit_test(test__f_directory_is_at__returns_data_not),
+    cmocka_unit_test(test__f_directory_is_at__returns_false),
+    cmocka_unit_test(test__f_directory_is_at__returns_true),
+
+    cmocka_unit_test(test__f_directory_list__fails),
+    cmocka_unit_test(test__f_directory_list__returns_data_not),
+    cmocka_unit_test(test__f_directory_list__returns_directory_empty),
+    cmocka_unit_test(test__f_directory_list__works),
 
     cmocka_unit_test(test__f_directory_open__fails),
     cmocka_unit_test(test__f_directory_open__returns_data_not),
@@ -73,15 +68,13 @@ int main(void) {
     cmocka_unit_test(test__f_directory_remove_custom__returns_data_not),
     cmocka_unit_test(test__f_directory_remove_custom__works),
 
-    // Unable to perform tests because stat() appears to not properly get mocked.
-    //cmocka_unit_test(test__f_directory_touch__fails),
-    //cmocka_unit_test(test__f_directory_touch__returns_data_not),
-    //cmocka_unit_test(test__f_directory_touch__works),
+    cmocka_unit_test(test__f_directory_touch__fails),
+    cmocka_unit_test(test__f_directory_touch__returns_data_not),
+    cmocka_unit_test(test__f_directory_touch__works),
 
-    // Unable to perform tests because stat() appears to not properly get mocked.
-    //cmocka_unit_test(test__f_directory_touch_at__fails),
-    //cmocka_unit_test(test__f_directory_touch_at__returns_data_not),
-    //cmocka_unit_test(test__f_directory_touch_at__works),
+    cmocka_unit_test(test__f_directory_touch_at__fails),
+    cmocka_unit_test(test__f_directory_touch_at__returns_data_not),
+    cmocka_unit_test(test__f_directory_touch_at__works),
 
     #ifndef _di_level_0_parameter_checking_
       // f_directory_create() doesn't use parameter checking.