]> Kevux Git Server - fll/commitdiff
Progress: Continue implementing f_file unit tests.
authorKevin Day <thekevinday@gmail.com>
Tue, 19 Apr 2022 03:31:45 +0000 (22:31 -0500)
committerKevin Day <thekevinday@gmail.com>
Tue, 19 Apr 2022 03:31:45 +0000 (22:31 -0500)
24 files changed:
level_0/f_file/data/build/settings-mocks
level_0/f_file/tests/unit/c/mock-file.c
level_0/f_file/tests/unit/c/mock-file.h
level_0/f_file/tests/unit/c/test-file-exists.c
level_0/f_file/tests/unit/c/test-file-is.c
level_0/f_file/tests/unit/c/test-file-mode_read.c
level_0/f_file/tests/unit/c/test-file-remove.c
level_0/f_file/tests/unit/c/test-file-remove_at.c
level_0/f_file/tests/unit/c/test-file-rename.c
level_0/f_file/tests/unit/c/test-file-rename_at.c
level_0/f_file/tests/unit/c/test-file-role_change.c
level_0/f_file/tests/unit/c/test-file-role_change.h
level_0/f_file/tests/unit/c/test-file-role_change_at.c
level_0/f_file/tests/unit/c/test-file-role_change_at.h
level_0/f_file/tests/unit/c/test-file-seek.c
level_0/f_file/tests/unit/c/test-file-size.c
level_0/f_file/tests/unit/c/test-file-size_at.c
level_0/f_file/tests/unit/c/test-file-size_by_id.c
level_0/f_file/tests/unit/c/test-file-size_by_id.h
level_0/f_file/tests/unit/c/test-file-stat.c
level_0/f_file/tests/unit/c/test-file-stat_at.c
level_0/f_file/tests/unit/c/test-file-stat_by_id.c
level_0/f_file/tests/unit/c/test-file-stat_by_id.h
level_0/f_file/tests/unit/c/test-file.c

index e45ccaffbc408eca794a470341a9722b7f568f22..be55dfe20ca5d9e58fd5d946a3aa52c4e0c8126a 100644 (file)
@@ -78,6 +78,7 @@ flags -Wl,--wrap=fwrite
 flags -Wl,--wrap=lchown
 flags -Wl,--wrap=link
 flags -Wl,--wrap=linkat
+flags -Wl,--wrap=lseek
 flags -Wl,--wrap=lstat
 flags -Wl,--wrap=makedev
 flags -Wl,--wrap=mkdir
@@ -91,6 +92,9 @@ flags -Wl,--wrap=openat
 flags -Wl,--wrap=read
 flags -Wl,--wrap=readlink
 flags -Wl,--wrap=readlinkat
+flags -Wl,--wrap=rename
+flags -Wl,--wrap=renameat
+flags -Wl,--wrap=renameat2
 flags -Wl,--wrap=remove
 flags -Wl,--wrap=stat
 flags -Wl,--wrap=symlink
index 0379c1f3e9bb8d99b16f603ecaa1f43efd45f1c7..8e2e2aaf9376e53e4f3c5835868125decb4189a5 100644 (file)
@@ -295,6 +295,19 @@ int __wrap_linkat(const char *oldpath, const char *newpath) {
   return mock_type(int);
 }
 
+off_t __wrap_lseek(int fd, off_t offset, int whence) {
+
+  const bool failure = mock_type(bool);
+
+  if (failure) {
+    errno = mock_type(int);
+
+    return -1;
+  }
+
+  return mock_type(int);
+}
+
 int __wrap_lstat(const char *pathname, struct stat *statbuf) {
 
   const bool failure = mock_type(bool);
@@ -482,7 +495,33 @@ ssize_t __wrap_readlinkat(int dirfd, const char *pathname, char *buf, size_t buf
   return mock_type(int);
 }
 
-int __wrap_remove(const char *pathname) {
+int __wrap_rename(const char *oldpath, const char *newpath) {
+
+  const bool failure = mock_type(bool);
+
+  if (failure) {
+    errno = mock_type(int);
+
+    return -1;
+  }
+
+  return mock_type(int);
+}
+
+int __wrap_renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath) {
+
+  const bool failure = mock_type(bool);
+
+  if (failure) {
+    errno = mock_type(int);
+
+    return -1;
+  }
+
+  return mock_type(int);
+}
+
+int __wrap_renameat2(int olddirfd, const char *oldpath, int newdirfd, const char *newpath, unsigned int flags) {
 
   const bool failure = mock_type(bool);
 
index 7c08cd5a99566181bf313fcab20d4a178c287f47..11029b32473678c6d8ed2df0099bc6afb23a4230 100644 (file)
@@ -50,6 +50,7 @@ extern size_t __wrap_fwrite_unlocked(const void *ptr, size_t size, size_t nmemb,
 extern int __wrap_lchown(const char *pathname, uid_t owner, gid_t group);
 extern int __wrap_link(const char *oldpath, const char *newpath);
 extern int __wrap_linkat(const char *oldpath, const char *newpath);
+extern off_t __wrap_lseek(int fd, off_t offset, int whence);
 extern int __wrap_lstat(const char *pathname, struct stat *statbuf);
 extern int __wrap_mkdir(const char *pathname, mode_t mode);
 extern int __wrap_mkdirat(int dirfd, const char *pathname, mode_t mode);
@@ -62,7 +63,9 @@ extern int __wrap_openat(int dirfd, const char *pathname, int flags, mode_t mode
 extern ssize_t __wrap_read(int fd, void *buf, size_t count);
 extern ssize_t __wrap_readlink(const char *pathname, char *buf, size_t bufsiz);
 extern ssize_t __wrap_readlinkat(int dirfd, const char *pathname, char *buf, size_t bufsiz);
-extern int __wrap_remove(const char *pathname);
+extern int __wrap_rename(const char *oldpath, const char *newpath);
+extern int __wrap_renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath);
+extern int __wrap_renameat2(int olddirfd, const char *oldpath, int newdirfd, const char *newpath, unsigned int flags);
 extern int __wrap_stat(const char *pathname, struct stat *statbuf);
 extern int __wrap_symlink(const char *target, const char *linkpath);
 extern int __wrap_symlinkat(const char *target, int newdirfd, const char *linkpath);
index 52ca77902d523215c55a9cd3866bb7ae0ee1c5c3..01e9e03421a4c2a14f9fe91ff62c3a4061fdcc27 100644 (file)
@@ -12,6 +12,7 @@ void test__f_file_exists__fails(void **state) {
   int errnos[] = {
     EACCES,
     EFAULT,
+    EINVAL,
     ELOOP,
     ENAMETOOLONG,
     ENOENT,
@@ -24,6 +25,7 @@ void test__f_file_exists__fails(void **state) {
   f_status_t statuss[] = {
     F_access_denied,
     F_buffer,
+    F_parameter,
     F_loop,
     F_name,
     F_false,
@@ -33,7 +35,7 @@ void test__f_file_exists__fails(void **state) {
     F_file_stat,
   };
 
-  for (int i = 0; i < 9; ++i) {
+  for (int i = 0; i < 10; ++i) {
 
     will_return(__wrap_lstat, true);
     will_return(__wrap_lstat, errnos[i]);
index da63c9a91e94bf10b18c493e67077f4c874b7947..2786cc8d409e194daeab3d94e8fe1c8ce9b83c16 100644 (file)
@@ -12,6 +12,7 @@ void test__f_file_is__fails(void **state) {
   int errnos[] = {
     EACCES,
     EFAULT,
+    EINVAL,
     ELOOP,
     ENAMETOOLONG,
     ENOENT,
@@ -24,6 +25,7 @@ void test__f_file_is__fails(void **state) {
   f_status_t statuss[] = {
     F_access_denied,
     F_buffer,
+    F_parameter,
     F_loop,
     F_name,
     F_file_found_not,
@@ -46,7 +48,7 @@ void test__f_file_is__fails(void **state) {
 
   for (int j = 0; j < 8; ++j) {
 
-    for (int i = 0; i < 9; ++i) {
+    for (int i = 0; i < 10; ++i) {
 
       will_return(__wrap_lstat, true);
       will_return(__wrap_lstat, errnos[i]);
index 4cbc4163071a7de328a6af93a96ec145ca493381..876bb25f25bbd734f189106892ad5ccae1e160fc 100644 (file)
@@ -12,6 +12,7 @@ void test__f_file_mode_read__fails(void **state) {
   int errnos[] = {
     EACCES,
     EFAULT,
+    EINVAL,
     ELOOP,
     ENAMETOOLONG,
     ENOENT,
@@ -24,6 +25,7 @@ void test__f_file_mode_read__fails(void **state) {
   f_status_t statuss[] = {
     F_access_denied,
     F_buffer,
+    F_parameter,
     F_loop,
     F_name,
     F_file_found_not,
@@ -33,7 +35,7 @@ void test__f_file_mode_read__fails(void **state) {
     F_file_stat,
   };
 
-  for (int i = 0; i < 9; ++i) {
+  for (int i = 0; i < 10; ++i) {
 
     mode_t mode = 0;
 
index 251627ffafc87a841e61a6e185d5d149bd32d807..bd3db21a6993ecc9e649e3cc8f4e5bd49aa5ba05 100644 (file)
@@ -6,24 +6,20 @@ extern "C" {
 #endif
 
 void test__f_file_remove__fails(void **state) {
-/*
+
   const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
 
   int errnos[] = {
     EACCES,
     EBUSY,
     EFAULT,
-    EINVAL,
     EIO,
     EISDIR,
     ELOOP,
-    EMFILE,
     ENAMETOOLONG,
-    ENFILE,
     ENOENT,
     ENOMEM,
     ENOTDIR,
-    ENOTEMPTY,
     EPERM,
     EROFS,
     mock_errno_generic,
@@ -33,34 +29,29 @@ void test__f_file_remove__fails(void **state) {
     F_access_denied,
     F_busy,
     F_buffer,
-    F_parameter,
     F_input_output,
     F_file_type_directory,
     F_loop,
-    F_file_descriptor_max,
     F_name,
-    F_file_open_max,
     F_file_found_not,
     F_memory_not,
-    F_file_not,
-    F_file_empty_not,
+    F_directory_not,
     F_prohibited,
     F_read_only,
     F_failure,
   };
 
   {
-    for (int i = 0; i < 17; ++i) {
+    for (int i = 0; i < 13; ++i) {
 
-      will_return(__wrap_remove, true);
-      will_return(__wrap_remove, errnos[i]);
+      will_return(__wrap_unlink, true);
+      will_return(__wrap_unlink, errnos[i]);
 
       const f_status_t status = f_file_remove(path);
 
       assert_int_equal(F_status_set_fine(status), statuss[i]);
     } // for
   }
-  */
 }
 
 void test__f_file_remove__returns_data_not(void **state) {
@@ -73,18 +64,17 @@ void test__f_file_remove__returns_data_not(void **state) {
 }
 
 void test__f_file_remove__works(void **state) {
-/*
+
   const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
 
   {
-    will_return(__wrap_remove, false);
-    will_return(__wrap_remove, 0);
+    will_return(__wrap_unlink, false);
+    will_return(__wrap_unlink, 0);
 
     const f_status_t status = f_file_remove(path);
 
     assert_int_equal(status, F_none);
   }
-  */
 }
 
 #ifdef __cplusplus
index 71df150e1791b447d13c3b08d05b8524806064e4..aac3ca89fef1768e4a4414f40177486d2124a966 100644 (file)
@@ -7,23 +7,53 @@ extern "C" {
 
 void test__f_file_remove_at__fails(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
   int errnos[] = {
+    EACCES,
+    EBADF,
+    EBUSY,
+    EFAULT,
+    EIO,
+    EISDIR,
+    ELOOP,
+    ENAMETOOLONG,
+    ENOENT,
+    ENOMEM,
+    ENOTDIR,
+    EPERM,
+    EROFS,
     mock_errno_generic,
   };
 
   f_status_t statuss[] = {
+    F_access_denied,
+    F_directory_descriptor,
+    F_busy,
+    F_buffer,
+    F_input_output,
+    F_file_type_directory,
+    F_loop,
+    F_name,
+    F_file_found_not,
+    F_memory_not,
+    F_directory_not,
+    F_prohibited,
+    F_read_only,
     F_failure,
   };
 
-  for (int i = 0; i < 1; ++i) {
+  {
+    for (int i = 0; i < 14; ++i) {
 
-    //will_return(__wrap_open, true);
-    //will_return(__wrap_open, errnos[i]);
+      will_return(__wrap_unlinkat, true);
+      will_return(__wrap_unlinkat, errnos[i]);
 
-    //const f_status_t status = f_file_remove_at(path, F_false, &id);
+      const f_status_t status = f_file_remove_at(0, path, 0);
 
-    //assert_int_equal(F_status_set_fine(status), statuss[i]);
-  } // for
+      assert_int_equal(F_status_set_fine(status), statuss[i]);
+    } // for
+  }
 }
 
 void test__f_file_remove_at__returns_data_not(void **state) {
@@ -37,14 +67,15 @@ void test__f_file_remove_at__returns_data_not(void **state) {
 
 void test__f_file_remove_at__works(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
   {
-    //will_return(__wrap_open, false);
-    //will_return(__wrap_open, 5);
+    will_return(__wrap_unlinkat, false);
+    will_return(__wrap_unlinkat, 0);
 
-    //const f_status_t status = f_file_remove_at();
+    const f_status_t status = f_file_remove_at(0, path, 0);
 
-    //assert_int_equal(status, F_none);
-    //assert_int_equal(id, 5);
+    assert_int_equal(status, F_none);
   }
 }
 
index 1922d39d2ff84d7ddb12c9c6047f946714ea91f9..e38fb2668e2265575fcb6062d29f7145116c3c18 100644 (file)
@@ -7,23 +7,63 @@ extern "C" {
 
 void test__f_file_rename__fails(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
   int errnos[] = {
+    EACCES,
+    EBUSY,
+    EDQUOT,
+    EFAULT,
+    EINVAL,
+    EISDIR,
+    ELOOP,
+    EMLINK,
+    ENAMETOOLONG,
+    ENOENT,
+    ENOMEM,
+    ENOSPC,
+    ENOTDIR,
+    ENOTEMPTY,
+    EEXIST,
+    EPERM,
+    EROFS,
+    EXDEV,
     mock_errno_generic,
   };
 
   f_status_t statuss[] = {
+    F_access_denied,
+    F_busy,
+    F_filesystem_quota_block,
+    F_buffer,
+    F_parameter,
+    F_file_type_directory,
+    F_loop,
+    F_link,
+    F_name,
+    F_file_found_not,
+    F_memory_not,
+    F_space_not,
+    F_directory_not,
+    F_directory_empty_not,
+    F_directory_empty_not,
+    F_prohibited,
+    F_read_only,
+    F_mount,
     F_failure,
   };
 
-  for (int i = 0; i < 1; ++i) {
+  {
+    for (int i = 0; i < 19; ++i) {
 
-    //will_return(__wrap_open, true);
-    //will_return(__wrap_open, errnos[i]);
+      will_return(__wrap_rename, true);
+      will_return(__wrap_rename, errnos[i]);
 
-    //const f_status_t status = f_file_rename(path, F_false, &id);
+      const f_status_t status = f_file_rename(path, path);
 
-    //assert_int_equal(F_status_set_fine(status), statuss[i]);
-  } // for
+      assert_int_equal(F_status_set_fine(status), statuss[i]);
+    } // for
+  }
 }
 
 void test__f_file_rename__returns_data_not(void **state) {
@@ -51,14 +91,15 @@ void test__f_file_rename__returns_data_not(void **state) {
 
 void test__f_file_rename__works(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
   {
-    //will_return(__wrap_open, false);
-    //will_return(__wrap_open, 5);
+    will_return(__wrap_rename, false);
+    will_return(__wrap_rename, 0);
 
-    //const f_status_t status = f_file_rename();
+    const f_status_t status = f_file_rename(path, path);
 
-    //assert_int_equal(status, F_none);
-    //assert_int_equal(id, 5);
+    assert_int_equal(status, F_none);
   }
 }
 
index 123f913c241000e533819461fe3159122adc4431..0373bf0780320be9bb10ba08619dd2696a7abbec 100644 (file)
@@ -7,23 +7,70 @@ extern "C" {
 
 void test__f_file_rename_at__fails(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
   int errnos[] = {
+    EACCES,
+    EBADF,
+    EBUSY,
+    EDQUOT,
+    EFAULT,
+    EINVAL,
+    EISDIR,
+    ELOOP,
+    EMLINK,
+    ENAMETOOLONG,
+    ENOENT,
+    ENOMEM,
+    ENOSPC,
+    ENOTDIR,
+    ENOTEMPTY,
+    EEXIST,
+    EPERM,
+    EROFS,
+    EXDEV,
     mock_errno_generic,
   };
 
   f_status_t statuss[] = {
+    F_access_denied,
+    F_directory_descriptor,
+    F_busy,
+    F_filesystem_quota_block,
+    F_buffer,
+    F_parameter,
+    F_file_type_directory,
+    F_loop,
+    F_link,
+    F_name,
+    F_file_found_not,
+    F_memory_not,
+    F_space_not,
+    F_directory_not,
+    F_directory_empty_not,
+    F_directory_empty_not,
+    F_prohibited,
+    F_read_only,
+    F_mount,
     F_failure,
   };
 
-  for (int i = 0; i < 1; ++i) {
+  {
+    for (int i = 0; i < 20; ++i) {
 
-    //will_return(__wrap_open, true);
-    //will_return(__wrap_open, errnos[i]);
+      #ifdef _f_file_rename_use_renameat2_
+        will_return(__wrap_renameat2, true);
+        will_return(__wrap_renameat2, errnos[i]);
+      #else
+        will_return(__wrap_renameat, true);
+        will_return(__wrap_renameat, errnos[i]);
+      #endif // _f_file_rename_use_renameat2_
 
-    //const f_status_t status = f_file_rename_at(path, F_false, &id);
+      const f_status_t status = f_file_rename_at(0, 0, path, path, 0);
 
-    //assert_int_equal(F_status_set_fine(status), statuss[i]);
-  } // for
+      assert_int_equal(F_status_set_fine(status), statuss[i]);
+    } // for
+  }
 }
 
 void test__f_file_rename_at__returns_data_not(void **state) {
@@ -31,19 +78,19 @@ void test__f_file_rename_at__returns_data_not(void **state) {
   const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
 
   {
-    const f_status_t status = f_file_rename_at(0, 0, f_string_empty_s, f_string_empty_s);
+    const f_status_t status = f_file_rename_at(0, 0, f_string_empty_s, f_string_empty_s, 0);
 
     assert_int_equal(status, F_data_not);
   }
 
   {
-    const f_status_t status = f_file_rename_at(0, 0, path, f_string_empty_s);
+    const f_status_t status = f_file_rename_at(0, 0, path, f_string_empty_s, 0);
 
     assert_int_equal(status, F_data_not);
   }
 
   {
-    const f_status_t status = f_file_rename_at(0, 0, f_string_empty_s, path);
+    const f_status_t status = f_file_rename_at(0, 0, f_string_empty_s, path, 0);
 
     assert_int_equal(status, F_data_not);
   }
@@ -51,14 +98,20 @@ void test__f_file_rename_at__returns_data_not(void **state) {
 
 void test__f_file_rename_at__works(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
   {
-    //will_return(__wrap_open, false);
-    //will_return(__wrap_open, 5);
+    #ifdef _f_file_rename_use_renameat2_
+      will_return(__wrap_renameat2, false);
+      will_return(__wrap_renameat2, 0);
+    #else
+      will_return(__wrap_renameat, false);
+      will_return(__wrap_renameat, 0);
+    #endif // _f_file_rename_use_renameat2_
 
-    //const f_status_t status = f_file_rename_at();
+    const f_status_t status = f_file_rename_at(0, 0, path, path, 0);
 
-    //assert_int_equal(status, F_none);
-    //assert_int_equal(id, 5);
+    assert_int_equal(status, F_none);
   }
 }
 
index 43aec90d00034101609030a296a0815bc6ec032a..61eb9c6af3cfd67ec2ddde04ea860e0f751605ad 100644 (file)
 extern "C" {
 #endif
 
-void test__f_file_role_change__fails(void **state) {
+void test__f_file_role_change__fails_for_dereference(void **state) {
+
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
 
   int errnos[] = {
+    EACCES,
+    EFAULT,
+    EIO,
+    ELOOP,
+    ENAMETOOLONG,
+    ENOENT,
+    ENOMEM,
+    ENOTDIR,
+    EPERM,
+    EROFS,
     mock_errno_generic,
   };
 
-  f_status_t statuss[] = {
+  f_status_t status_owners[] = {
+    F_access_denied,
+    F_buffer,
+    F_input_output,
+    F_loop,
+    F_name,
+    F_file_found_not,
+    F_memory_not,
+    F_directory_not,
+    F_access_owner,
+    F_read_only,
+    F_failure,
+  };
+
+  f_status_t status_groups[] = {
+    F_access_denied,
+    F_buffer,
+    F_input_output,
+    F_loop,
+    F_name,
+    F_file_found_not,
+    F_memory_not,
+    F_directory_not,
+    F_access_group,
+    F_read_only,
     F_failure,
   };
 
-  for (int i = 0; i < 1; ++i) {
+  for (int i = 0; i < 11; ++i) {
+
+    will_return(__wrap_chown, true);
+    will_return(__wrap_chown, errnos[i]);
+
+    const f_status_t status = f_file_role_change(path, 0, 0, F_true);
+
+    assert_int_equal(F_status_set_fine(status), status_owners[i]);
+  } // for
+
+  for (int i = 0; i < 11; ++i) {
+
+    will_return(__wrap_chown, false);
+    will_return(__wrap_chown, 0);
+
+    will_return(__wrap_chown, true);
+    will_return(__wrap_chown, errnos[i]);
+
+    const f_status_t status = f_file_role_change(path, 0, 0, F_true);
+
+    assert_int_equal(F_status_set_fine(status), status_groups[i]);
+  } // for
+
+  for (int i = 0; i < 11; ++i) {
+
+    will_return(__wrap_chown, true);
+    will_return(__wrap_chown, errnos[i]);
+
+    const f_status_t status = f_file_role_change(path, -1, 0, F_true);
+
+    assert_int_equal(F_status_set_fine(status), status_groups[i]);
+  } // for
+
+  for (int i = 0; i < 11; ++i) {
+
+    will_return(__wrap_chown, true);
+    will_return(__wrap_chown, errnos[i]);
+
+    const f_status_t status = f_file_role_change(path, 0, -1, F_true);
+
+    assert_int_equal(F_status_set_fine(status), status_owners[i]);
+  } // for
+}
+
+void test__f_file_role_change__fails_for_reference(void **state) {
+
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
+  int errnos[] = {
+    EACCES,
+    EFAULT,
+    EIO,
+    ELOOP,
+    ENAMETOOLONG,
+    ENOENT,
+    ENOMEM,
+    ENOTDIR,
+    EPERM,
+    EROFS,
+    mock_errno_generic,
+  };
+
+  f_status_t status_owners[] = {
+    F_access_denied,
+    F_buffer,
+    F_input_output,
+    F_loop,
+    F_name,
+    F_file_found_not,
+    F_memory_not,
+    F_directory_not,
+    F_access_owner,
+    F_read_only,
+    F_failure,
+  };
+
+  f_status_t status_groups[] = {
+    F_access_denied,
+    F_buffer,
+    F_input_output,
+    F_loop,
+    F_name,
+    F_file_found_not,
+    F_memory_not,
+    F_directory_not,
+    F_access_group,
+    F_read_only,
+    F_failure,
+  };
+
+  for (int i = 0; i < 11; ++i) {
+
+    will_return(__wrap_lchown, true);
+    will_return(__wrap_lchown, errnos[i]);
+
+    const f_status_t status = f_file_role_change(path, 0, 0, F_false);
+
+    assert_int_equal(F_status_set_fine(status), status_owners[i]);
+  } // for
+
+  for (int i = 0; i < 11; ++i) {
+
+    will_return(__wrap_lchown, false);
+    will_return(__wrap_lchown, 0);
+
+    will_return(__wrap_lchown, true);
+    will_return(__wrap_lchown, errnos[i]);
+
+    const f_status_t status = f_file_role_change(path, 0, 0, F_false);
+
+    assert_int_equal(F_status_set_fine(status), status_groups[i]);
+  } // for
+
+  for (int i = 0; i < 11; ++i) {
+
+    will_return(__wrap_lchown, true);
+    will_return(__wrap_lchown, errnos[i]);
+
+    const f_status_t status = f_file_role_change(path, -1, 0, F_false);
+
+    assert_int_equal(F_status_set_fine(status), status_groups[i]);
+  } // for
 
-    //will_return(__wrap_open, true);
-    //will_return(__wrap_open, errnos[i]);
+  for (int i = 0; i < 11; ++i) {
 
-    //const f_status_t status = f_file_role_change(path, F_false, &id);
+    will_return(__wrap_lchown, true);
+    will_return(__wrap_lchown, errnos[i]);
 
-    //assert_int_equal(F_status_set_fine(status), statuss[i]);
+    const f_status_t status = f_file_role_change(path, 0, -1, F_false);
+
+    assert_int_equal(F_status_set_fine(status), status_owners[i]);
   } // for
 }
 
 void test__f_file_role_change__returns_data_not(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
+  {
+    const f_status_t status = f_file_role_change(f_string_empty_s, -1, -1, F_true);
+
+    assert_int_equal(status, F_data_not);
+  }
+
   {
-    //const f_status_t status = f_file_role_change(f_string_empty_s);
+    const f_status_t status = f_file_role_change(path, -1, -1, F_true);
 
-    //assert_int_equal(status, F_data_not);
+    assert_int_equal(status, F_data_not);
+  }
+
+  {
+    const f_status_t status = f_file_role_change(f_string_empty_s, 0, 0, F_true);
+
+    assert_int_equal(status, F_data_not);
   }
 }
 
-void test__f_file_role_change__works(void **state) {
+void test__f_file_role_change__works_for_dereference(void **state) {
+
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
+  {
+    will_return(__wrap_chown, false);
+    will_return(__wrap_chown, 0);
+
+    will_return(__wrap_chown, false);
+    will_return(__wrap_chown, 0);
+
+    const f_status_t status = f_file_role_change(path, 0, 0, F_true);
+
+    assert_int_equal(status, F_none);
+  }
+
+  {
+    will_return(__wrap_chown, false);
+    will_return(__wrap_chown, 0);
+
+    const f_status_t status = f_file_role_change(path, -1, 0, F_true);
+
+    assert_int_equal(status, F_none);
+  }
+
+  {
+    will_return(__wrap_chown, false);
+    will_return(__wrap_chown, 0);
+
+    const f_status_t status = f_file_role_change(path, 0, -1, F_true);
+
+    assert_int_equal(status, F_none);
+  }
+}
+
+void test__f_file_role_change__works_for_reference(void **state) {
+
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
+  {
+    will_return(__wrap_lchown, false);
+    will_return(__wrap_lchown, 0);
+
+    will_return(__wrap_lchown, false);
+    will_return(__wrap_lchown, 0);
+
+    const f_status_t status = f_file_role_change(path, 0, 0, F_false);
+
+    assert_int_equal(status, F_none);
+  }
+
+  {
+    will_return(__wrap_lchown, false);
+    will_return(__wrap_lchown, 0);
+
+    const f_status_t status = f_file_role_change(path, -1, 0, F_false);
+
+    assert_int_equal(status, F_none);
+  }
 
   {
-    //will_return(__wrap_open, false);
-    //will_return(__wrap_open, 5);
+    will_return(__wrap_lchown, false);
+    will_return(__wrap_lchown, 0);
 
-    //const f_status_t status = f_file_role_change();
+    const f_status_t status = f_file_role_change(path, 0, -1, F_false);
 
-    //assert_int_equal(status, F_none);
-    //assert_int_equal(id, 5);
+    assert_int_equal(status, F_none);
   }
 }
 
index 37e16f9153aa81c11e17a1d3645ecf5d7a72c0ca..4d2031951c113b04f758517fdb1c4bcf82e25f73 100644 (file)
 #define _TEST__F_file_role_change_h
 
 /**
- * Test that function fails.
+ * Test that function fails for dereferenced files.
  *
  * @see f_file_role_change()
  */
-extern void test__f_file_role_change__fails(void **state);
+extern void test__f_file_role_change__fails_for_dereference(void **state);
+
+/**
+ * Test that function fails for referenced files.
+ *
+ * @see f_file_role_change()
+ */
+extern void test__f_file_role_change__fails_for_reference(void **state);
 
 /**
  * Test that function works but the path is empty.
@@ -25,10 +32,17 @@ extern void test__f_file_role_change__fails(void **state);
 extern void test__f_file_role_change__returns_data_not(void **state);
 
 /**
- * Test that function works.
+ * Test that function works for dereferenced files.
+ *
+ * @see f_file_role_change()
+ */
+extern void test__f_file_role_change__works_for_dereference(void **state);
+
+/**
+ * Test that function works for referenced files.
  *
  * @see f_file_role_change()
  */
-extern void test__f_file_role_change__works(void **state);
+extern void test__f_file_role_change__works_for_reference(void **state);
 
 #endif // _TEST__F_file_role_change_h
index 74a9a05cbd89abb45acdd3aa9f267af6b54fc2cf..ab69cb0bda4b71f63c8338e071827829718cc5a9 100644 (file)
 extern "C" {
 #endif
 
-void test__f_file_role_change_at__fails(void **state) {
+void test__f_file_role_change_at__fails_for_dereference(void **state) {
+
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
 
   int errnos[] = {
+    EACCES,
+    EBADF,
+    EFAULT,
+    EIO,
+    ELOOP,
+    ENAMETOOLONG,
+    ENOENT,
+    ENOMEM,
+    ENOTDIR,
+    EPERM,
+    EROFS,
     mock_errno_generic,
   };
 
-  f_status_t statuss[] = {
+  f_status_t status_owners[] = {
+    F_access_denied,
+    F_directory_descriptor,
+    F_buffer,
+    F_input_output,
+    F_loop,
+    F_name,
+    F_file_found_not,
+    F_memory_not,
+    F_directory_not,
+    F_access_owner,
+    F_read_only,
+    F_failure,
+  };
+
+  f_status_t status_groups[] = {
+    F_access_denied,
+    F_directory_descriptor,
+    F_buffer,
+    F_input_output,
+    F_loop,
+    F_name,
+    F_file_found_not,
+    F_memory_not,
+    F_directory_not,
+    F_access_group,
+    F_read_only,
     F_failure,
   };
 
-  for (int i = 0; i < 1; ++i) {
+  for (int i = 0; i < 12; ++i) {
+
+    will_return(__wrap_fchownat, true);
+    will_return(__wrap_fchownat, errnos[i]);
+
+    const f_status_t status = f_file_role_change_at(0, path, 0, 0, 0);
+
+    assert_int_equal(F_status_set_fine(status), status_owners[i]);
+  } // for
+
+  for (int i = 0; i < 12; ++i) {
+
+    will_return(__wrap_fchownat, false);
+    will_return(__wrap_fchownat, 0);
+
+    will_return(__wrap_fchownat, true);
+    will_return(__wrap_fchownat, errnos[i]);
+
+    const f_status_t status = f_file_role_change_at(0, path, 0, 0, 0);
+
+    assert_int_equal(F_status_set_fine(status), status_groups[i]);
+  } // for
+
+  for (int i = 0; i < 12; ++i) {
+
+    will_return(__wrap_fchownat, true);
+    will_return(__wrap_fchownat, errnos[i]);
+
+    const f_status_t status = f_file_role_change_at(0, path, -1, 0, 0);
+
+    assert_int_equal(F_status_set_fine(status), status_groups[i]);
+  } // for
+
+  for (int i = 0; i < 12; ++i) {
+
+    will_return(__wrap_fchownat, true);
+    will_return(__wrap_fchownat, errnos[i]);
+
+    const f_status_t status = f_file_role_change_at(0, path, 0, -1, 0);
+
+    assert_int_equal(F_status_set_fine(status), status_owners[i]);
+  } // for
+}
+
+void test__f_file_role_change_at__fails_for_reference(void **state) {
+
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
+  int errnos[] = {
+    EACCES,
+    EBADF,
+    EFAULT,
+    EIO,
+    ELOOP,
+    ENAMETOOLONG,
+    ENOENT,
+    ENOMEM,
+    ENOTDIR,
+    EPERM,
+    EROFS,
+    mock_errno_generic,
+  };
+
+  f_status_t status_owners[] = {
+    F_access_denied,
+    F_directory_descriptor,
+    F_buffer,
+    F_input_output,
+    F_loop,
+    F_name,
+    F_file_found_not,
+    F_memory_not,
+    F_directory_not,
+    F_access_owner,
+    F_read_only,
+    F_failure,
+  };
+
+  f_status_t status_groups[] = {
+    F_access_denied,
+    F_directory_descriptor,
+    F_buffer,
+    F_input_output,
+    F_loop,
+    F_name,
+    F_file_found_not,
+    F_memory_not,
+    F_directory_not,
+    F_access_group,
+    F_read_only,
+    F_failure,
+  };
+
+  for (int i = 0; i < 12; ++i) {
+
+    will_return(__wrap_fchownat, true);
+    will_return(__wrap_fchownat, errnos[i]);
+
+    const f_status_t status = f_file_role_change_at(0, path, 0, 0, F_file_at_symlink_follow_no_d);
+
+    assert_int_equal(F_status_set_fine(status), status_owners[i]);
+  } // for
+
+  for (int i = 0; i < 12; ++i) {
+
+    will_return(__wrap_fchownat, false);
+    will_return(__wrap_fchownat, 0);
+
+    will_return(__wrap_fchownat, true);
+    will_return(__wrap_fchownat, errnos[i]);
+
+    const f_status_t status = f_file_role_change_at(0, path, 0, 0, F_file_at_symlink_follow_no_d);
+
+    assert_int_equal(F_status_set_fine(status), status_groups[i]);
+  } // for
+
+  for (int i = 0; i < 12; ++i) {
+
+    will_return(__wrap_fchownat, true);
+    will_return(__wrap_fchownat, errnos[i]);
+
+    const f_status_t status = f_file_role_change_at(0, path, -1, 0, F_file_at_symlink_follow_no_d);
+
+    assert_int_equal(F_status_set_fine(status), status_groups[i]);
+  } // for
 
-    //will_return(__wrap_open, true);
-    //will_return(__wrap_open, errnos[i]);
+  for (int i = 0; i < 12; ++i) {
 
-    //const f_status_t status = f_file_role_change_at(path, F_false, &id);
+    will_return(__wrap_fchownat, true);
+    will_return(__wrap_fchownat, errnos[i]);
 
-    //assert_int_equal(F_status_set_fine(status), statuss[i]);
+    const f_status_t status = f_file_role_change_at(0, path, 0, -1, F_file_at_symlink_follow_no_d);
+
+    assert_int_equal(F_status_set_fine(status), status_owners[i]);
   } // for
 }
 
 void test__f_file_role_change_at__returns_data_not(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
+  {
+    const f_status_t status = f_file_role_change_at(0, f_string_empty_s, -1, -1, 0);
+
+    assert_int_equal(status, F_data_not);
+  }
+
   {
-    //const f_status_t status = f_file_role_change_at(f_string_empty_s);
+    const f_status_t status = f_file_role_change_at(0, path, -1, -1, 0);
 
-    //assert_int_equal(status, F_data_not);
+    assert_int_equal(status, F_data_not);
+  }
+
+  {
+    const f_status_t status = f_file_role_change_at(0, f_string_empty_s, 0, 0, 0);
+
+    assert_int_equal(status, F_data_not);
   }
 }
 
-void test__f_file_role_change_at__works(void **state) {
+void test__f_file_role_change_at__works_for_dereference(void **state) {
+
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
+  {
+    will_return(__wrap_fchownat, false);
+    will_return(__wrap_fchownat, 0);
+
+    will_return(__wrap_fchownat, false);
+    will_return(__wrap_fchownat, 0);
+
+    const f_status_t status = f_file_role_change_at(0, path, 0, 0, 0);
+
+    assert_int_equal(status, F_none);
+  }
+
+  {
+    will_return(__wrap_fchownat, false);
+    will_return(__wrap_fchownat, 0);
+
+    const f_status_t status = f_file_role_change_at(0, path, -1, 0, 0);
+
+    assert_int_equal(status, F_none);
+  }
+
+  {
+    will_return(__wrap_fchownat, false);
+    will_return(__wrap_fchownat, 0);
+
+    const f_status_t status = f_file_role_change_at(0, path, 0, -1, 0);
+
+    assert_int_equal(status, F_none);
+  }
+}
+
+void test__f_file_role_change_at__works_for_reference(void **state) {
+
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
+  {
+    will_return(__wrap_fchownat, false);
+    will_return(__wrap_fchownat, 0);
+
+    will_return(__wrap_fchownat, false);
+    will_return(__wrap_fchownat, 0);
+
+    const f_status_t status = f_file_role_change_at(0, path, 0, 0, F_file_at_symlink_follow_no_d);
+
+    assert_int_equal(status, F_none);
+  }
+
+  {
+    will_return(__wrap_fchownat, false);
+    will_return(__wrap_fchownat, 0);
+
+    const f_status_t status = f_file_role_change_at(0, path, -1, 0, F_file_at_symlink_follow_no_d);
+
+    assert_int_equal(status, F_none);
+  }
 
   {
-    //will_return(__wrap_open, false);
-    //will_return(__wrap_open, 5);
+    will_return(__wrap_fchownat, false);
+    will_return(__wrap_fchownat, 0);
 
-    //const f_status_t status = f_file_role_change_at();
+    const f_status_t status = f_file_role_change_at(0, path, 0, -1, F_file_at_symlink_follow_no_d);
 
-    //assert_int_equal(status, F_none);
-    //assert_int_equal(id, 5);
+    assert_int_equal(status, F_none);
   }
 }
 
index c4e8f48fe1c3908d29666d6c546e002e46c5f1c1..5ba8f48901138368d78f5246c4178ffa0de73567 100644 (file)
 #define _TEST__F_file_role_change_at_h
 
 /**
- * Test that function fails.
+ * Test that function fails for dereferenced files.
  *
  * @see f_file_role_change_at()
  */
-extern void test__f_file_role_change_at__fails(void **state);
+extern void test__f_file_role_change_at__fails_for_dereference(void **state);
+
+/**
+ * Test that function fails for referenced files.
+ *
+ * @see f_file_role_change_at()
+ */
+extern void test__f_file_role_change_at__fails_for_reference(void **state);
 
 /**
  * Test that function works but the path is empty.
@@ -25,10 +32,17 @@ extern void test__f_file_role_change_at__fails(void **state);
 extern void test__f_file_role_change_at__returns_data_not(void **state);
 
 /**
- * Test that function works.
+ * Test that function works for dereferenced files.
+ *
+ * @see f_file_role_change_at()
+ */
+extern void test__f_file_role_change_at__works_for_dereference(void **state);
+
+/**
+ * Test that function works for referenced files.
  *
  * @see f_file_role_change_at()
  */
-extern void test__f_file_role_change_at__works(void **state);
+extern void test__f_file_role_change_at__works_for_reference(void **state);
 
 #endif // _TEST__F_file_role_change_at_h
index 0e2e2e42444dc80b36c1a68b894b93c0dfe72891..a1bae7f29e24d8a1fa6c5ed81930499f9a0a57a3 100644 (file)
@@ -8,27 +8,53 @@ extern "C" {
 void test__f_file_seek__fails(void **state) {
 
   int errnos[] = {
+    EBADF,
+    EINVAL,
+    ENXIO,
+    EOVERFLOW,
+    ESPIPE,
     mock_errno_generic,
   };
 
   f_status_t statuss[] = {
+    F_file_descriptor,
+    F_parameter,
+    F_bound_not,
+    F_number_overflow,
+    F_file_type_pipe,
     F_failure,
   };
 
-  for (int i = 0; i < 1; ++i) {
+  for (int i = 0; i < 6; ++i) {
 
-    //will_return(__wrap_open, true);
-    //will_return(__wrap_open, errnos[i]);
+    off_t seeked = 0;
 
-    //const f_status_t status = f_file_seek(path, F_false, &id);
+    will_return(__wrap_lseek, true);
+    will_return(__wrap_lseek, errnos[i]);
 
-    //assert_int_equal(F_status_set_fine(status), statuss[i]);
+    const f_status_t status = f_file_seek(0, 0, 0, &seeked);
+
+    assert_int_equal(F_status_set_fine(status), statuss[i]);
   } // for
 }
 
 #ifndef _di_level_0_parameter_checking_
   void test__f_file_seek__parameter_checking(void **state) {
 
+    off_t seeked = 0;
+
+    {
+      const f_status_t status = f_file_seek(0, -1, 0, 0);
+
+      assert_int_equal(F_status_set_fine(status), F_parameter);
+    }
+
+    {
+      const f_status_t status = f_file_seek(0, -1, 0, &seeked);
+
+      assert_int_equal(F_status_set_fine(status), F_parameter);
+    }
+
     {
       const f_status_t status = f_file_seek(0, 0, 0, 0);
 
@@ -40,13 +66,14 @@ void test__f_file_seek__fails(void **state) {
 void test__f_file_seek__works(void **state) {
 
   {
-    //will_return(__wrap_open, false);
-    //will_return(__wrap_open, 5);
+    off_t seeked = 0;
+
+    will_return(__wrap_lseek, false);
+    will_return(__wrap_lseek, 0);
 
-    //const f_status_t status = f_file_seek();
+    const f_status_t status = f_file_seek(0, 0, 0, &seeked);
 
-    //assert_int_equal(status, F_none);
-    //assert_int_equal(id, 5);
+    assert_int_equal(status, F_none);
   }
 }
 
index a09198ba54d36f35a362ca9503d4aa88c2d1b84f..7a8eab30a43687ca4074ee3dbae90a5561d566b1 100644 (file)
@@ -7,22 +7,44 @@ extern "C" {
 
 void test__f_file_size__fails(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
   int errnos[] = {
+    EACCES,
+    EFAULT,
+    EINVAL,
+    ELOOP,
+    ENAMETOOLONG,
+    ENOENT,
+    ENOMEM,
+    ENOTDIR,
+    EOVERFLOW,
     mock_errno_generic,
   };
 
   f_status_t statuss[] = {
-    F_failure,
+    F_access_denied,
+    F_buffer,
+    F_parameter,
+    F_loop,
+    F_name,
+    F_file_found_not,
+    F_memory_not,
+    F_directory_not,
+    F_number_overflow,
+    F_file_stat,
   };
 
-  for (int i = 0; i < 1; ++i) {
+  for (int i = 0; i < 10; ++i) {
+
+    off_t size = 0;
 
-    //will_return(__wrap_open, true);
-    //will_return(__wrap_open, errnos[i]);
+    will_return(__wrap_lstat, true);
+    will_return(__wrap_lstat, errnos[i]);
 
-    //const f_status_t status = f_file_size(path, F_false, &id);
+    const f_status_t status = f_file_size(path, F_false, &size);
 
-    //assert_int_equal(F_status_set_fine(status), statuss[i]);
+    assert_int_equal(F_status_set_fine(status), statuss[i]);
   } // for
 }
 
@@ -50,14 +72,26 @@ void test__f_file_size__returns_data_not(void **state) {
 
 void test__f_file_size__works(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
+  struct stat statistics;
+
+  memset(&statistics, 0, sizeof(struct stat));
+
   {
-    //will_return(__wrap_open, false);
-    //will_return(__wrap_open, 5);
+    off_t size = 0;
+
+    statistics.st_mode = 1 | F_file_type_regular_d;
+    statistics.st_size = 1;
+
+    will_return(__wrap_stat, false);
+    will_return(__wrap_stat, &statistics);
+    will_return(__wrap_stat, 0);
 
-    //const f_status_t status = f_file_size();
+    const f_status_t status = f_file_size(path, F_true, &size);
 
-    //assert_int_equal(status, F_none);
-    //assert_int_equal(id, 5);
+    assert_int_equal(status, F_none);
+    assert_int_equal(size, statistics.st_size);
   }
 }
 
index 551ab066b3af160224e240a579e0a4093f83a066..3de4ad83104aac073b9d8e0ddfa58a4cbac69774 100644 (file)
@@ -7,22 +7,46 @@ extern "C" {
 
 void test__f_file_size_at__fails(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
   int errnos[] = {
+    EACCES,
+    EBADF,
+    EFAULT,
+    EINVAL,
+    ELOOP,
+    ENAMETOOLONG,
+    ENOENT,
+    ENOMEM,
+    ENOTDIR,
+    EOVERFLOW,
     mock_errno_generic,
   };
 
   f_status_t statuss[] = {
-    F_failure,
+    F_access_denied,
+    F_directory_descriptor,
+    F_buffer,
+    F_parameter,
+    F_loop,
+    F_name,
+    F_file_found_not,
+    F_memory_not,
+    F_directory_not,
+    F_number_overflow,
+    F_file_stat,
   };
 
-  for (int i = 0; i < 1; ++i) {
+  for (int i = 0; i < 11; ++i) {
+
+    off_t size = 0;
 
-    //will_return(__wrap_open, true);
-    //will_return(__wrap_open, errnos[i]);
+    will_return(__wrap_fstatat, true);
+    will_return(__wrap_fstatat, errnos[i]);
 
-    //const f_status_t status = f_file_size_at(path, F_false, &id);
+    const f_status_t status = f_file_size_at(0, path, F_false, &size);
 
-    //assert_int_equal(F_status_set_fine(status), statuss[i]);
+    assert_int_equal(F_status_set_fine(status), statuss[i]);
   } // for
 }
 
@@ -40,7 +64,9 @@ void test__f_file_size_at__fails(void **state) {
 void test__f_file_size_at__returns_data_not(void **state) {
 
   {
-    const f_status_t status = f_file_size_at(0, f_string_empty_s, F_false, 0);
+    off_t size = 0;
+
+    const f_status_t status = f_file_size_at(0, f_string_empty_s, F_false, &size);
 
     assert_int_equal(status, F_data_not);
   }
@@ -48,14 +74,42 @@ void test__f_file_size_at__returns_data_not(void **state) {
 
 void test__f_file_size_at__works(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
+  struct stat statistics;
+
+  memset(&statistics, 0, sizeof(struct stat));
+
   {
-    //will_return(__wrap_open, false);
-    //will_return(__wrap_open, 5);
+    off_t size = 0;
+
+    statistics.st_mode = 1 | F_file_type_link_d;
+    statistics.st_size = 1;
+
+    will_return(__wrap_fstatat, false);
+    will_return(__wrap_fstatat, &statistics);
+    will_return(__wrap_fstatat, 0);
+
+    const f_status_t status = f_file_size_at(0, path, F_false, &size);
+
+    assert_int_equal(status, F_none);
+    assert_int_equal(size, statistics.st_size);
+  }
+
+  {
+    off_t size = 0;
+
+    statistics.st_mode = 1 | F_file_type_regular_d;
+    statistics.st_size = 1;
+
+    will_return(__wrap_fstatat, false);
+    will_return(__wrap_fstatat, &statistics);
+    will_return(__wrap_fstatat, 0);
 
-    //const f_status_t status = f_file_size_at();
+    const f_status_t status = f_file_size_at(0, path, F_true, &size);
 
-    //assert_int_equal(status, F_none);
-    //assert_int_equal(id, 5);
+    assert_int_equal(status, F_none);
+    assert_int_equal(size, statistics.st_size);
   }
 }
 
index d54be262fad17f95430bc2160aa8137de6813d7b..2b289fb8978022aa7541d38c45e96680dc792c98 100644 (file)
@@ -7,22 +7,48 @@ extern "C" {
 
 void test__f_file_size_by_id__fails(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
   int errnos[] = {
+    EACCES,
+    EBADF,
+    EFAULT,
+    EINVAL,
+    ELOOP,
+    ENAMETOOLONG,
+    ENOENT,
+    ENOMEM,
+    ENOTDIR,
+    EOVERFLOW,
     mock_errno_generic,
   };
 
   f_status_t statuss[] = {
-    F_failure,
+    F_access_denied,
+    F_file_descriptor,
+    F_buffer,
+    F_parameter,
+    F_loop,
+    F_name,
+    F_file_found_not,
+    F_memory_not,
+    F_directory_not,
+    F_number_overflow,
+    F_file_stat,
   };
 
-  for (int i = 0; i < 1; ++i) {
+  for (int i = 0; i < 11; ++i) {
+
+    off_t size = 0;
 
-    //will_return(__wrap_open, true);
-    //will_return(__wrap_open, errnos[i]);
+    printf("\nDEBUG: i=%d\n", i);
 
-    //const f_status_t status = f_file_size_by_id(path, F_false, &id);
+    will_return(__wrap_fstat, true);
+    will_return(__wrap_fstat, errnos[i]);
 
-    //assert_int_equal(F_status_set_fine(status), statuss[i]);
+    const f_status_t status = f_file_size_by_id(0, &size);
+
+    assert_int_equal(F_status_set_fine(status), statuss[i]);
   } // for
 }
 
@@ -37,16 +63,39 @@ void test__f_file_size_by_id__fails(void **state) {
   }
 #endif // _di_level_0_parameter_checking_
 
+void test__f_file_size_by_id__returns_file_closed(void **state) {
+
+  {
+    off_t size = 0;
+
+    const f_status_t status = f_file_size_by_id(-1, &size);
+
+    assert_int_equal(F_status_set_fine(status), F_file_closed);
+  } // for
+}
+
 void test__f_file_size_by_id__works(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
+  struct stat statistics;
+
+  memset(&statistics, 0, sizeof(struct stat));
+
   {
-    //will_return(__wrap_open, false);
-    //will_return(__wrap_open, 5);
+    off_t size = 0;
+
+    statistics.st_mode = 1 | F_file_type_regular_d;
+    statistics.st_size = 1;
+
+    will_return(__wrap_fstat, false);
+    will_return(__wrap_fstat, &statistics);
+    will_return(__wrap_fstat, 0);
 
-    //const f_status_t status = f_file_size_by_id();
+    const f_status_t status = f_file_size_by_id(0, &size);
 
-    //assert_int_equal(status, F_none);
-    //assert_int_equal(id, 5);
+    assert_int_equal(status, F_none);
+    assert_int_equal(size, statistics.st_size);
   }
 }
 
index bc095b2bf05479df043f366629f61dd258ca5122..088faa664ae7a2a368b75e50149a022d22610712 100644 (file)
@@ -27,6 +27,13 @@ extern void test__f_file_size_by_id__fails(void **state);
 #endif // _di_level_0_parameter_checking_
 
 /**
+ * Test that function works but the file is closed.
+ *
+ * @see f_file_size_by_id()
+ */
+extern void test__f_file_size_by_id__returns_file_closed(void **state);
+
+/**
  * Test that function works.
  *
  * @see f_file_size_by_id()
index edc1396a85bbee0da7732a565d7617701e5d41f3..c19228c04c5db27c955ce1947d1ecc037c4f822d 100644 (file)
@@ -1,5 +1,5 @@
 #include "test-file.h"
-#include "test-file-stat.h"
+#include "test-file-size.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -7,22 +7,46 @@ extern "C" {
 
 void test__f_file_stat__fails(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
   int errnos[] = {
+    EACCES,
+    EFAULT,
+    EINVAL,
+    ELOOP,
+    ENAMETOOLONG,
+    ENOENT,
+    ENOMEM,
+    ENOTDIR,
+    EOVERFLOW,
     mock_errno_generic,
   };
 
   f_status_t statuss[] = {
-    F_failure,
+    F_access_denied,
+    F_buffer,
+    F_parameter,
+    F_loop,
+    F_name,
+    F_file_found_not,
+    F_memory_not,
+    F_directory_not,
+    F_number_overflow,
+    F_file_stat,
   };
 
-  for (int i = 0; i < 1; ++i) {
+  for (int i = 0; i < 10; ++i) {
+
+    struct stat result;
+
+    memset(&result, 0, sizeof(struct stat));
 
-    //will_return(__wrap_open, true);
-    //will_return(__wrap_open, errnos[i]);
+    will_return(__wrap_lstat, true);
+    will_return(__wrap_lstat, errnos[i]);
 
-    //const f_status_t status = f_file_stat(path, F_false, &id);
+    const f_status_t status = f_file_stat(path, F_false, &result);
 
-    //assert_int_equal(F_status_set_fine(status), statuss[i]);
+    assert_int_equal(F_status_set_fine(status), statuss[i]);
   } // for
 }
 
@@ -40,9 +64,11 @@ void test__f_file_stat__fails(void **state) {
 void test__f_file_stat__returns_data_not(void **state) {
 
   {
-    struct stat statistics;
+    struct stat result;
 
-    const f_status_t status = f_file_stat(f_string_empty_s, F_false, &statistics);
+    memset(&result, 0, sizeof(struct stat));
+
+    const f_status_t status = f_file_stat(f_string_empty_s, F_false, &result);
 
     assert_int_equal(status, F_data_not);
   }
@@ -50,14 +76,29 @@ void test__f_file_stat__returns_data_not(void **state) {
 
 void test__f_file_stat__works(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
+  struct stat statistics;
+
+  memset(&statistics, 0, sizeof(struct stat));
+
   {
-    //will_return(__wrap_open, false);
-    //will_return(__wrap_open, 5);
+    struct stat result;
+
+    memset(&result, 0, sizeof(struct stat));
+
+    statistics.st_mode = 1 | F_file_type_regular_d;
+    statistics.st_size = 1;
+
+    will_return(__wrap_stat, false);
+    will_return(__wrap_stat, &statistics);
+    will_return(__wrap_stat, 0);
 
-    //const f_status_t status = f_file_stat();
+    const f_status_t status = f_file_stat(path, F_true, &result);
 
-    //assert_int_equal(status, F_none);
-    //assert_int_equal(id, 5);
+    assert_int_equal(status, F_none);
+    assert_int_equal(result.st_mode, statistics.st_mode);
+    assert_int_equal(result.st_size, statistics.st_size);
   }
 }
 
index 06d25bcbe40af1864e293366c7fd2cfe5fb21361..ba565f1efa921667007464bb33a8586cbbc3f58e 100644 (file)
@@ -1,5 +1,5 @@
 #include "test-file.h"
-#include "test-file-stat_at.h"
+#include "test-file-size_at.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -7,22 +7,48 @@ extern "C" {
 
 void test__f_file_stat_at__fails(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
   int errnos[] = {
+    EACCES,
+    EBADF,
+    EFAULT,
+    EINVAL,
+    ELOOP,
+    ENAMETOOLONG,
+    ENOENT,
+    ENOMEM,
+    ENOTDIR,
+    EOVERFLOW,
     mock_errno_generic,
   };
 
   f_status_t statuss[] = {
-    F_failure,
+    F_access_denied,
+    F_directory_descriptor,
+    F_buffer,
+    F_parameter,
+    F_loop,
+    F_name,
+    F_file_found_not,
+    F_memory_not,
+    F_directory_not,
+    F_number_overflow,
+    F_file_stat,
   };
 
-  for (int i = 0; i < 1; ++i) {
+  for (int i = 0; i < 11; ++i) {
+
+    struct stat result;
+
+    memset(&result, 0, sizeof(struct stat));
 
-    //will_return(__wrap_open, true);
-    //will_return(__wrap_open, errnos[i]);
+    will_return(__wrap_fstatat, true);
+    will_return(__wrap_fstatat, errnos[i]);
 
-    //const f_status_t status = f_file_stat_at(path, F_false, &id);
+    const f_status_t status = f_file_stat_at(0, path, F_false, &result);
 
-    //assert_int_equal(F_status_set_fine(status), statuss[i]);
+    assert_int_equal(F_status_set_fine(status), statuss[i]);
   } // for
 }
 
@@ -30,7 +56,7 @@ void test__f_file_stat_at__fails(void **state) {
   void test__f_file_stat_at__parameter_checking(void **state) {
 
     {
-      const f_status_t status = f_file_stat_at(0, f_string_empty_s, 0, 0);
+      const f_status_t status = f_file_stat_at(0, f_string_empty_s, F_false, 0);
 
       assert_int_equal(F_status_set_fine(status), F_parameter);
     }
@@ -40,9 +66,11 @@ void test__f_file_stat_at__fails(void **state) {
 void test__f_file_stat_at__returns_data_not(void **state) {
 
   {
-    struct stat statistics;
+    struct stat result;
 
-    const f_status_t status = f_file_stat_at(0, f_string_empty_s, 0, &statistics);
+    memset(&result, 0, sizeof(struct stat));
+
+    const f_status_t status = f_file_stat_at(0, f_string_empty_s, F_false, &result);
 
     assert_int_equal(status, F_data_not);
   }
@@ -50,14 +78,48 @@ void test__f_file_stat_at__returns_data_not(void **state) {
 
 void test__f_file_stat_at__works(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
+  struct stat statistics;
+
+  memset(&statistics, 0, sizeof(struct stat));
+
+  {
+    struct stat result;
+
+    memset(&result, 0, sizeof(struct stat));
+
+    statistics.st_mode = 1 | F_file_type_link_d;
+    statistics.st_size = 1;
+
+    will_return(__wrap_fstatat, false);
+    will_return(__wrap_fstatat, &statistics);
+    will_return(__wrap_fstatat, 0);
+
+    const f_status_t status = f_file_stat_at(0, path, F_false, &result);
+
+    assert_int_equal(status, F_none);
+    assert_int_equal(result.st_mode, statistics.st_mode);
+    assert_int_equal(result.st_size, statistics.st_size);
+  }
+
   {
-    //will_return(__wrap_open, false);
-    //will_return(__wrap_open, 5);
+    struct stat result;
+
+    memset(&result, 0, sizeof(struct stat));
+
+    statistics.st_mode = 1 | F_file_type_regular_d;
+    statistics.st_size = 1;
+
+    will_return(__wrap_fstatat, false);
+    will_return(__wrap_fstatat, &statistics);
+    will_return(__wrap_fstatat, 0);
 
-    //const f_status_t status = f_file_stat_at();
+    const f_status_t status = f_file_stat_at(0, path, F_true, &result);
 
-    //assert_int_equal(status, F_none);
-    //assert_int_equal(id, 5);
+    assert_int_equal(status, F_none);
+    assert_int_equal(result.st_mode, statistics.st_mode);
+    assert_int_equal(result.st_size, statistics.st_size);
   }
 }
 
index 27305634414d2e6b8a9ac64c9bdb5405aca37dbc..6fd4a0823088cd55eaf07dd4a808876ccbf0b96a 100644 (file)
@@ -1,5 +1,5 @@
 #include "test-file.h"
-#include "test-file-stat_by_id.h"
+#include "test-file-size_by_id.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -7,22 +7,50 @@ extern "C" {
 
 void test__f_file_stat_by_id__fails(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
   int errnos[] = {
+    EACCES,
+    EBADF,
+    EFAULT,
+    EINVAL,
+    ELOOP,
+    ENAMETOOLONG,
+    ENOENT,
+    ENOMEM,
+    ENOTDIR,
+    EOVERFLOW,
     mock_errno_generic,
   };
 
   f_status_t statuss[] = {
-    F_failure,
+    F_access_denied,
+    F_file_descriptor,
+    F_buffer,
+    F_parameter,
+    F_loop,
+    F_name,
+    F_file_found_not,
+    F_memory_not,
+    F_directory_not,
+    F_number_overflow,
+    F_file_stat,
   };
 
-  for (int i = 0; i < 1; ++i) {
+  for (int i = 0; i < 11; ++i) {
+
+    struct stat result;
+
+    memset(&result, 0, sizeof(struct stat));
 
-    //will_return(__wrap_open, true);
-    //will_return(__wrap_open, errnos[i]);
+    printf("\nDEBUG: i=%d\n", i);
 
-    //const f_status_t status = f_file_stat_by_id(path, F_false, &id);
+    will_return(__wrap_fstat, true);
+    will_return(__wrap_fstat, errnos[i]);
 
-    //assert_int_equal(F_status_set_fine(status), statuss[i]);
+    const f_status_t status = f_file_stat_by_id(0, &result);
+
+    assert_int_equal(F_status_set_fine(status), statuss[i]);
   } // for
 }
 
@@ -37,16 +65,44 @@ void test__f_file_stat_by_id__fails(void **state) {
   }
 #endif // _di_level_0_parameter_checking_
 
+void test__f_file_stat_by_id__returns_file_closed(void **state) {
+
+  {
+    struct stat result;
+
+    memset(&result, 0, sizeof(struct stat));
+
+    const f_status_t status = f_file_stat_by_id(-1, &result);
+
+    assert_int_equal(F_status_set_fine(status), F_file_closed);
+  } // for
+}
+
 void test__f_file_stat_by_id__works(void **state) {
 
+  const f_string_static_t path = macro_f_string_static_t_initialize("test", 0, 4);
+
+  struct stat statistics;
+
+  memset(&statistics, 0, sizeof(struct stat));
+
   {
-    //will_return(__wrap_open, false);
-    //will_return(__wrap_open, 5);
+    struct stat result;
+
+    memset(&result, 0, sizeof(struct stat));
+
+    statistics.st_mode = 1 | F_file_type_regular_d;
+    statistics.st_size = 1;
+
+    will_return(__wrap_fstat, false);
+    will_return(__wrap_fstat, &statistics);
+    will_return(__wrap_fstat, 0);
 
-    //const f_status_t status = f_file_stat_by_id();
+    const f_status_t status = f_file_stat_by_id(0, &result);
 
-    //assert_int_equal(status, F_none);
-    //assert_int_equal(id, 5);
+    assert_int_equal(status, F_none);
+    assert_int_equal(result.st_mode, statistics.st_mode);
+    assert_int_equal(result.st_size, statistics.st_size);
   }
 }
 
index c845894d0b1e0ba1b2523ea6bf58d049a7d6c883..2565d2651cc2a84728e4922aff8d64bbea39ae33 100644 (file)
@@ -27,6 +27,13 @@ extern void test__f_file_stat_by_id__fails(void **state);
 #endif // _di_level_0_parameter_checking_
 
 /**
+ * Test that function works but the file is closed.
+ *
+ * @see f_file_stat_by_id()
+ */
+extern void test__f_file_stat_by_id__returns_file_closed(void **state);
+
+/**
  * Test that function works.
  *
  * @see f_file_stat_by_id()
index 38df2ef098e1186e17019edcc3e03d5059a2d900..1ef2b7ddfd1eea6011d743e70d5bd9cedfc2e015 100644 (file)
@@ -204,7 +204,6 @@ int main(void) {
     cmocka_unit_test(test__f_file_read_until__returns_file_closed),
     cmocka_unit_test(test__f_file_read_until__works),
 
-/*
     cmocka_unit_test(test__f_file_remove__fails),
     cmocka_unit_test(test__f_file_remove__returns_data_not),
     cmocka_unit_test(test__f_file_remove__works),
@@ -213,27 +212,54 @@ int main(void) {
     cmocka_unit_test(test__f_file_remove_at__returns_data_not),
     cmocka_unit_test(test__f_file_remove_at__works),
 
-    // f_file_rename
+    cmocka_unit_test(test__f_file_rename__fails),
+    cmocka_unit_test(test__f_file_rename__returns_data_not),
+    cmocka_unit_test(test__f_file_rename__works),
+
+    cmocka_unit_test(test__f_file_rename_at__fails),
+    cmocka_unit_test(test__f_file_rename_at__returns_data_not),
+    cmocka_unit_test(test__f_file_rename_at__works),
 
-    // f_file_rename_at
+    cmocka_unit_test(test__f_file_role_change__fails_for_dereference),
+    cmocka_unit_test(test__f_file_role_change__fails_for_reference),
+    cmocka_unit_test(test__f_file_role_change__returns_data_not),
+    cmocka_unit_test(test__f_file_role_change__works_for_dereference),
+    cmocka_unit_test(test__f_file_role_change__works_for_reference),
 
-    // f_file_role_change
+    cmocka_unit_test(test__f_file_role_change_at__fails_for_dereference),
+    cmocka_unit_test(test__f_file_role_change_at__fails_for_reference),
+    cmocka_unit_test(test__f_file_role_change_at__returns_data_not),
+    cmocka_unit_test(test__f_file_role_change_at__works_for_dereference),
+    cmocka_unit_test(test__f_file_role_change_at__works_for_reference),
 
-    // f_file_role_change_at
+    cmocka_unit_test(test__f_file_seek__fails),
+    cmocka_unit_test(test__f_file_seek__works),
 
-    // f_file_seek
+    cmocka_unit_test(test__f_file_size__fails),
+    cmocka_unit_test(test__f_file_size__returns_data_not),
+    cmocka_unit_test(test__f_file_size__works),
 
-    // f_file_size
+    cmocka_unit_test(test__f_file_size_at__fails),
+    cmocka_unit_test(test__f_file_size_at__returns_data_not),
+    cmocka_unit_test(test__f_file_size_at__works),
 
-    // f_file_size_at
+    cmocka_unit_test(test__f_file_size_by_id__fails),
+    cmocka_unit_test(test__f_file_size_by_id__returns_file_closed),
+    cmocka_unit_test(test__f_file_size_by_id__works),
 
-    // f_file_size_by_id
+    cmocka_unit_test(test__f_file_stat__fails),
+    cmocka_unit_test(test__f_file_stat__returns_data_not),
+    cmocka_unit_test(test__f_file_stat__works),
 
-    // f_file_stat
+    cmocka_unit_test(test__f_file_stat_at__fails),
+    cmocka_unit_test(test__f_file_stat_at__returns_data_not),
+    cmocka_unit_test(test__f_file_stat_at__works),
 
-    // f_file_stat_at
+    cmocka_unit_test(test__f_file_stat_by_id__fails),
+    cmocka_unit_test(test__f_file_stat_by_id__returns_file_closed),
+    cmocka_unit_test(test__f_file_stat_by_id__works),
 
-    // f_file_stat_by_id
+/*
 
     // f_file_stream_close