s4:smbtorture: add BASE-BENCH-HOLDOPEN
[ira/wip.git] / source4 / torture / basic / base.c
index 4725188e8f75d41466d414ad7df0b11bb92c2a59..ed389fb9d54ae2edf16b1580aee16e50abd671d3 100644 (file)
@@ -27,9 +27,7 @@
 #include "system/filesys.h"
 #include "system/time.h"
 #include "libcli/resolve/resolve.h"
-#include "librpc/gen_ndr/ndr_nbt.h"
 #include "lib/events/events.h"
-#include "lib/cmdline/popt_common.h"
 #include "param/param.h"
 
 
@@ -693,8 +691,12 @@ static bool run_deferopen(struct torture_context *tctx, struct smbcli_state *cli
        }
 
        if (NT_STATUS_IS_ERR(smbcli_unlink(cli->tree, fname))) {
-               /* All until the last unlink will fail with sharing violation. */
-               if (!NT_STATUS_EQUAL(smbcli_nt_error(cli->tree),NT_STATUS_SHARING_VIOLATION)) {
+               /* All until the last unlink will fail with sharing violation
+                  but also the last request can fail since the file could have
+                  been successfully deleted by another (test) process */
+               NTSTATUS status = smbcli_nt_error(cli->tree);
+               if ((!NT_STATUS_EQUAL(status, NT_STATUS_SHARING_VIOLATION))
+                       && (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND))) {
                        torture_comment(tctx, "unlink of %s failed (%s)\n", fname, smbcli_errstr(cli->tree));
                        correct = false;
                }
@@ -1450,14 +1452,8 @@ static bool torture_samba3_errorpaths(struct torture_context *tctx)
        const char *os2_fname = ".+,;=[].";
        const char *dname = "samba3_errordir";
        union smb_open io;
-       TALLOC_CTX *mem_ctx = talloc_init("samba3_errorpaths");
        NTSTATUS status;
 
-       if (mem_ctx == NULL) {
-               torture_comment(tctx, "talloc_init failed\n");
-               return false;
-       }
-
        nt_status_support = lp_nt_status_support(tctx->lp_ctx);
 
        if (!lp_set_cmdline(tctx->lp_ctx, "nt status support", "yes")) {
@@ -1495,7 +1491,7 @@ static bool torture_samba3_errorpaths(struct torture_context *tctx)
 
        io.generic.level = RAW_OPEN_NTCREATEX;
        io.ntcreatex.in.flags = NTCREATEX_FLAGS_EXTENDED;
-       io.ntcreatex.in.root_fid = 0;
+       io.ntcreatex.in.root_fid.fnum = 0;
        io.ntcreatex.in.access_mask = SEC_RIGHTS_FILE_ALL;
        io.ntcreatex.in.alloc_size = 1024*1024;
        io.ntcreatex.in.file_attr = FILE_ATTRIBUTE_DIRECTORY;
@@ -1506,14 +1502,14 @@ static bool torture_samba3_errorpaths(struct torture_context *tctx)
        io.ntcreatex.in.security_flags = 0;
        io.ntcreatex.in.fname = dname;
 
-       status = smb_raw_open(cli_nt->tree, mem_ctx, &io);
+       status = smb_raw_open(cli_nt->tree, tctx, &io);
        if (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
                torture_comment(tctx, "(%s) incorrect status %s should be %s\n",
                       __location__, nt_errstr(status),
                       nt_errstr(NT_STATUS_OBJECT_NAME_COLLISION));
                goto fail;
        }
-       status = smb_raw_open(cli_dos->tree, mem_ctx, &io);
+       status = smb_raw_open(cli_dos->tree, tctx, &io);
        if (!NT_STATUS_EQUAL(status, NT_STATUS_DOS(ERRDOS, ERRfilexists))) {
                torture_comment(tctx, "(%s) incorrect status %s should be %s\n",
                       __location__, nt_errstr(status),
@@ -1563,7 +1559,7 @@ static bool torture_samba3_errorpaths(struct torture_context *tctx)
        }
 
        io.ntcreatex.in.create_options = NTCREATEX_OPTIONS_DIRECTORY;
-       status = smb_raw_open(cli_nt->tree, mem_ctx, &io);
+       status = smb_raw_open(cli_nt->tree, tctx, &io);
        if (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
                torture_comment(tctx, "(%s) incorrect status %s should be %s\n",
                       __location__, nt_errstr(status),
@@ -1571,7 +1567,7 @@ static bool torture_samba3_errorpaths(struct torture_context *tctx)
                goto fail;
        }
 
-       status = smb_raw_open(cli_dos->tree, mem_ctx, &io);
+       status = smb_raw_open(cli_dos->tree, tctx, &io);
        if (!NT_STATUS_EQUAL(status, NT_STATUS_DOS(ERRDOS, ERRfilexists))) {
                torture_comment(tctx, "(%s) incorrect status %s should be %s\n",
                       __location__, nt_errstr(status),
@@ -1629,7 +1625,7 @@ static bool torture_samba3_errorpaths(struct torture_context *tctx)
                smbcli_close(cli_nt->tree, fnum);
 
                io.generic.level = RAW_OPEN_NTCREATEX;
-               io.ntcreatex.in.root_fid = 0;
+               io.ntcreatex.in.root_fid.fnum = 0;
                io.ntcreatex.in.access_mask = SEC_RIGHTS_FILE_ALL;
                io.ntcreatex.in.alloc_size = 0;
                io.ntcreatex.in.file_attr = FILE_ATTRIBUTE_DIRECTORY;
@@ -1644,7 +1640,7 @@ static bool torture_samba3_errorpaths(struct torture_context *tctx)
                io.ntcreatex.in.fname = fname;
                io.ntcreatex.in.flags = 0;
 
-               status = smb_raw_open(cli_nt->tree, mem_ctx, &io);
+               status = smb_raw_open(cli_nt->tree, tctx, &io);
                if (!NT_STATUS_EQUAL(status, NT_STATUS_NOT_A_DIRECTORY)) {
                        torture_comment(tctx, "ntcreate as dir gave %s, "
                                        "expected NT_STATUS_NOT_A_DIRECTORY\n",
@@ -1656,7 +1652,7 @@ static bool torture_samba3_errorpaths(struct torture_context *tctx)
                        smbcli_close(cli_nt->tree, io.ntcreatex.out.file.fnum);
                }
 
-               status = smb_raw_open(cli_dos->tree, mem_ctx, &io);
+               status = smb_raw_open(cli_dos->tree, tctx, &io);
                if (!NT_STATUS_EQUAL(status, NT_STATUS_DOS(ERRDOS,
                                                           ERRbaddirectory))) {
                        torture_comment(tctx, "ntcreate as dir gave %s, "
@@ -1769,8 +1765,13 @@ NTSTATUS torture_base_init(void)
        torture_suite_add_suite(suite, torture_trans2_aliases(suite));
        torture_suite_add_1smb_test(suite, "TRANS2-SCAN", torture_trans2_scan);
        torture_suite_add_1smb_test(suite, "NTTRANS", torture_nttrans_scan);
+       torture_suite_add_1smb_test(suite, "CREATEX_ACCESS", torture_createx_access);
+       torture_suite_add_2smb_test(suite, "CREATEX_SHAREMODES_FILE", torture_createx_sharemodes_file);
+       torture_suite_add_2smb_test(suite, "CREATEX_SHAREMODES_DIR", torture_createx_sharemodes_dir);
+       torture_suite_add_1smb_test(suite, "MAXIMUM_ALLOWED", torture_maximum_allowed);
 
        torture_suite_add_simple_test(suite, "BENCH-HOLDCON", torture_holdcon);
+       torture_suite_add_1smb_test(suite, "BENCH-HOLDOPEN", torture_holdopen);
        torture_suite_add_simple_test(suite, "BENCH-READWRITE", run_benchrw);
        torture_suite_add_smb_multi_test(suite, "BENCH-TORTURE", run_torture);
        torture_suite_add_1smb_test(suite, "SCAN-PIPE_NUMBER", run_pipe_number);