]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
test_vfs_gpfs: Add test for file id generation
authorChristof Schmitt <cs@samba.org>
Tue, 18 Aug 2020 21:54:09 +0000 (14:54 -0700)
committerChristof Schmitt <cs@samba.org>
Tue, 8 Sep 2020 22:57:03 +0000 (22:57 +0000)
Signed-off-by: Christof Schmitt <cs@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Christof Schmitt <cs@samba.org>
Autobuild-Date(master): Tue Sep  8 22:57:03 UTC 2020 on sn-devel-184

source3/modules/test_vfs_gpfs.c

index 6feb6b80407cb8ccbbb7bd2ae47c47034622927f..58f3c41934ad67dcb4addd4d8e34ae5a3369c395 100644 (file)
@@ -82,6 +82,59 @@ static void test_dosmode_to_gpfs_winattrs(void **state)
                         GPFS_WINATTR_SYSTEM);
 }
 
+static void test_gpfs_get_file_id(void **state)
+{
+       struct gpfs_iattr64 iattr;
+       uint64_t fileid1, fileid2;
+       NTSTATUS status;
+
+       /*
+        * Ensure that the generated fileid only depends on the
+        * ia_inode, ia_gen and ia_modsnapid fields in struct
+        * gpfs_iattr64 and any changes to these fields result in a
+        * different file id.
+        */
+
+       memset(&iattr, 1, sizeof(iattr));
+       iattr.ia_inode = 0x11;
+       iattr.ia_gen = 0x22;
+       iattr.ia_modsnapid = 0x33;
+       status = vfs_gpfs_get_file_id(&iattr, &fileid1);
+       assert_true(NT_STATUS_IS_OK(status));
+
+       memset(&iattr, 2, sizeof(iattr));
+       iattr.ia_inode = 0x11;
+       iattr.ia_gen = 0x22;
+       iattr.ia_modsnapid = 0x33;
+       status = vfs_gpfs_get_file_id(&iattr, &fileid2);
+       assert_true(NT_STATUS_IS_OK(status));
+       assert_int_equal(fileid1, fileid2);
+
+       iattr.ia_inode = 0x44;
+       iattr.ia_gen = 0x22;
+       iattr.ia_modsnapid = 0x33;
+       status = vfs_gpfs_get_file_id(&iattr, &fileid2);
+       assert_true(NT_STATUS_IS_OK(status));
+       assert_true(NT_STATUS_IS_OK(status));
+       assert_int_not_equal(fileid1, fileid2);
+
+       iattr.ia_inode = 0x11;
+       iattr.ia_gen = 0x44;
+       iattr.ia_modsnapid = 0x33;
+       status = vfs_gpfs_get_file_id(&iattr, &fileid2);
+       assert_true(NT_STATUS_IS_OK(status));
+       assert_true(NT_STATUS_IS_OK(status));
+       assert_int_not_equal(fileid1, fileid2);
+
+       iattr.ia_inode = 0x11;
+       iattr.ia_gen = 0x22;
+       iattr.ia_modsnapid = 0x44;
+       status = vfs_gpfs_get_file_id(&iattr, &fileid2);
+       assert_true(NT_STATUS_IS_OK(status));
+       assert_true(NT_STATUS_IS_OK(status));
+       assert_int_not_equal(fileid1, fileid2);
+}
+
 int main(int argc, char **argv)
 {
        const struct CMUnitTest tests[] = {
@@ -89,6 +142,7 @@ int main(int argc, char **argv)
                cmocka_unit_test(test_gpfs_lease_mapping),
                cmocka_unit_test(test_gpfs_winattrs_to_dosmode),
                cmocka_unit_test(test_dosmode_to_gpfs_winattrs),
+               cmocka_unit_test(test_gpfs_get_file_id),
        };
 
        cmocka_set_message_output(CM_OUTPUT_SUBUNIT);