From: Christof Schmitt Date: Tue, 18 Aug 2020 21:54:09 +0000 (-0700) Subject: test_vfs_gpfs: Add test for file id generation X-Git-Tag: talloc-2.3.2~565 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b65fbade02fa128c80cc5cd7ba6dd5b53ded0e20;p=thirdparty%2Fsamba.git test_vfs_gpfs: Add test for file id generation Signed-off-by: Christof Schmitt Reviewed-by: Jeremy Allison Autobuild-User(master): Christof Schmitt Autobuild-Date(master): Tue Sep 8 22:57:03 UTC 2020 on sn-devel-184 --- diff --git a/source3/modules/test_vfs_gpfs.c b/source3/modules/test_vfs_gpfs.c index 6feb6b80407..58f3c41934a 100644 --- a/source3/modules/test_vfs_gpfs.c +++ b/source3/modules/test_vfs_gpfs.c @@ -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);