s4 torture: RAW-SEARCH: Only test supported info levels
authorTim Prouty <tprouty@samba.org>
Mon, 14 Jun 2010 23:50:29 +0000 (16:50 -0700)
committerTim Prouty <tprouty@samba.org>
Tue, 15 Jun 2010 20:48:15 +0000 (13:48 -0700)
source4/torture/raw/search.c

index 39516058340effa84555270ef476aeaac314398b..50f6e76193db485d0a8da050c6aa3c663feb80cf 100644 (file)
 
 #define BASEDIR "\\testsearch"
 
+#define CHECK_STATUS_LEVEL(__tctx, __status, __level, __supp)          \
+       do {                                                            \
+               if (NT_STATUS_EQUAL(__status,                           \
+                       NT_STATUS_NOT_SUPPORTED) ||                     \
+                   NT_STATUS_EQUAL(__status,                           \
+                       NT_STATUS_NOT_IMPLEMENTED)) {                   \
+                       torture_warning(__tctx, "(%s) Info "            \
+                           "level "#__level" is %s",                   \
+                           __location__, nt_errstr(__status));         \
+                       __supp = false;                                 \
+               } else {                                                \
+                       torture_assert_ntstatus_ok_goto(__tctx,         \
+                           __status, ret, done, #__level" failed");    \
+                       __supp = true;                                  \
+               }                                                       \
+       } while (0)
+
 /*
   callback function for single_search
 */
@@ -242,6 +259,8 @@ static bool test_one_file(struct torture_context *tctx,
        NTSTATUS status;
        int i;
        union smb_fileinfo all_info, alt_info, name_info, internal_info;
+       bool all_info_supported, alt_info_supported, name_info_supported,
+           internal_info_supported;
        union smb_search_data *s;
 
        fnum = create_complex_file(cli, tctx, fname);
@@ -304,22 +323,26 @@ static bool test_one_file(struct torture_context *tctx,
        all_info.generic.level = RAW_FILEINFO_ALL_INFO;
        all_info.generic.in.file.path = fname;
        status = smb_raw_pathinfo(cli->tree, tctx, &all_info);
-       torture_assert_ntstatus_ok(tctx, status, "RAW_FILEINFO_ALL_INFO failed");
+       CHECK_STATUS_LEVEL(tctx, status, "RAW_FILEINFO_ALL_INFO",
+           all_info_supported);
 
        alt_info.generic.level = RAW_FILEINFO_ALT_NAME_INFO;
        alt_info.generic.in.file.path = fname;
        status = smb_raw_pathinfo(cli->tree, tctx, &alt_info);
-       torture_assert_ntstatus_ok(tctx, status, "RAW_FILEINFO_ALT_NAME_INFO failed");
+       CHECK_STATUS_LEVEL(tctx, status, "RAW_FILEINFO_ALT_NAME_INFO",
+           alt_info_supported);
 
        internal_info.generic.level = RAW_FILEINFO_INTERNAL_INFORMATION;
        internal_info.generic.in.file.path = fname;
        status = smb_raw_pathinfo(cli->tree, tctx, &internal_info);
-       torture_assert_ntstatus_ok(tctx, status, "RAW_FILEINFO_INTERNAL_INFORMATION failed");
+       CHECK_STATUS_LEVEL(tctx, status, "RAW_FILEINFO_INTERNAL_INFORMATION",
+           internal_info_supported);
 
        name_info.generic.level = RAW_FILEINFO_NAME_INFO;
        name_info.generic.in.file.path = fname;
        status = smb_raw_pathinfo(cli->tree, tctx, &name_info);
-       torture_assert_ntstatus_ok(tctx, status, "RAW_FILEINFO_NAME_INFO failed");
+       CHECK_STATUS_LEVEL(tctx, status, "RAW_FILEINFO_NAME_INFO",
+           name_info_supported);
 
 #define CHECK_VAL(name, sname1, field1, v, sname2, field2) do { \
        s = find(name); \
@@ -477,21 +500,34 @@ static bool test_one_file(struct torture_context *tctx,
        CHECK_VAL("ID_FULL_DIRECTORY_INFO", id_full_directory_info,           ea_size, all_info, all_info, ea_size);
        CHECK_VAL("ID_BOTH_DIRECTORY_INFO", id_both_directory_info,           ea_size, all_info, all_info, ea_size);
 
-       CHECK_STR("SEARCH", search, name, alt_info, alt_name_info, fname);
-       CHECK_WSTR("BOTH_DIRECTORY_INFO", both_directory_info, short_name, alt_info, alt_name_info, fname, STR_UNICODE);
+       if (alt_info_supported) {
+               CHECK_STR("SEARCH", search, name, alt_info, alt_name_info,
+                   fname);
+               CHECK_WSTR("BOTH_DIRECTORY_INFO", both_directory_info,
+                   short_name, alt_info, alt_name_info, fname, STR_UNICODE);
+       }
 
        CHECK_NAME("STANDARD",            standard,            name, fname+1, 0);
        CHECK_NAME("EA_SIZE",             ea_size,             name, fname+1, 0);
        CHECK_NAME("DIRECTORY_INFO",      directory_info,      name, fname+1, STR_TERMINATE_ASCII);
        CHECK_NAME("FULL_DIRECTORY_INFO", full_directory_info, name, fname+1, STR_TERMINATE_ASCII);
-       CHECK_NAME("NAME_INFO",           name_info,           name, fname+1, STR_TERMINATE_ASCII);
+
+       if (name_info_supported) {
+               CHECK_NAME("NAME_INFO", name_info, name, fname+1,
+                   STR_TERMINATE_ASCII);
+       }
+
        CHECK_NAME("BOTH_DIRECTORY_INFO", both_directory_info, name, fname+1, STR_TERMINATE_ASCII);
        CHECK_NAME("ID_FULL_DIRECTORY_INFO", id_full_directory_info,           name, fname+1, STR_TERMINATE_ASCII);
        CHECK_NAME("ID_BOTH_DIRECTORY_INFO", id_both_directory_info,           name, fname+1, STR_TERMINATE_ASCII);
        CHECK_UNIX_NAME("UNIX_INFO",           unix_info,           name, fname+1, STR_TERMINATE_ASCII);
 
-       CHECK_VAL("ID_FULL_DIRECTORY_INFO", id_full_directory_info, file_id, internal_info, internal_information, file_id);
-       CHECK_VAL("ID_BOTH_DIRECTORY_INFO", id_both_directory_info, file_id, internal_info, internal_information, file_id);
+       if (internal_info_supported) {
+               CHECK_VAL("ID_FULL_DIRECTORY_INFO", id_full_directory_info,
+                   file_id, internal_info, internal_information, file_id);
+               CHECK_VAL("ID_BOTH_DIRECTORY_INFO", id_both_directory_info,
+                   file_id, internal_info, internal_information, file_id);
+       }
 
 done:
        smb_raw_exit(cli->session);