s4-loadparm: 2nd half of lp_ to lpcfg_ conversion
[kamenim/samba.git] / source4 / torture / basic / misc.c
index 0832556b53e7118704fdead5ac85deaa38d28dba..72232729841a12059d0a16a26817a3b9429ab92f 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "includes.h"
 #include "libcli/raw/libcliraw.h"
+#include "libcli/raw/raw_proto.h"
 #include "system/time.h"
 #include "system/wait.h"
 #include "system/filesys.h"
@@ -27,9 +28,7 @@
 #include "libcli/libcli.h"
 #include "lib/events/events.h"
 #include "libcli/resolve/resolve.h"
-#include "auth/credentials/credentials.h"
-#include "librpc/gen_ndr/ndr_nbt.h"
-#include "torture/torture.h"
+#include "torture/smbtorture.h"
 #include "torture/util.h"
 #include "libcli/smb_composite/smb_composite.h"
 #include "libcli/composite/composite.h"
@@ -69,7 +68,7 @@ static bool rw_torture(struct torture_context *tctx, struct smbcli_state *c)
        generate_random_buffer(buf, sizeof(buf));
 
        for (i=0;i<torture_numops;i++) {
-               uint_t n = (uint_t)random()%10;
+               unsigned int n = (unsigned int)random()%10;
                if (i % 10 == 0) {
                        if (torture_setting_bool(tctx, "progress", true)) {
                                torture_comment(tctx, "%d\r", i);
@@ -231,6 +230,69 @@ bool torture_holdcon(struct torture_context *tctx)
        return true;
 }
 
+/*
+  open a file N times on the server and just hold them open
+  used for testing performance when there are N file handles
+  alopenn
+ */
+bool torture_holdopen(struct torture_context *tctx,
+                     struct smbcli_state *cli)
+{
+       int i, fnum;
+       const char *fname = "\\holdopen.dat";
+       NTSTATUS status;
+
+       smbcli_unlink(cli->tree, fname);
+
+       fnum = smbcli_open(cli->tree, fname, O_RDWR|O_CREAT|O_EXCL, DENY_NONE);
+       if (fnum == -1) {
+               torture_comment(tctx, "open of %s failed (%s)\n", fname, smbcli_errstr(cli->tree));
+               return false;
+       }
+
+       smbcli_close(cli->tree, fnum);
+
+       for (i=0;i<torture_numops;i++) {
+               union smb_open op;
+
+               op.generic.level = RAW_OPEN_NTCREATEX;
+               op.ntcreatex.in.root_fid.fnum = 0;
+               op.ntcreatex.in.flags = 0;
+               op.ntcreatex.in.access_mask = SEC_FILE_WRITE_DATA;
+               op.ntcreatex.in.create_options = 0;
+               op.ntcreatex.in.file_attr = FILE_ATTRIBUTE_NORMAL;
+               op.ntcreatex.in.share_access = NTCREATEX_SHARE_ACCESS_MASK;
+               op.ntcreatex.in.alloc_size = 0;
+               op.ntcreatex.in.open_disposition = NTCREATEX_DISP_OPEN;
+               op.ntcreatex.in.impersonation = NTCREATEX_IMPERSONATION_ANONYMOUS;
+               op.ntcreatex.in.security_flags = 0;
+               op.ntcreatex.in.fname = fname;
+               status = smb_raw_open(cli->tree, tctx, &op);
+               if (!NT_STATUS_IS_OK(status)) {
+                       torture_warning(tctx, "open %d failed\n", i);
+                       continue;
+               }
+
+               if (torture_setting_bool(tctx, "progress", true)) {
+                       torture_comment(tctx, "opened %d file\r", i);
+                       fflush(stdout);
+               }
+       }
+
+       torture_comment(tctx, "\nStarting pings\n");
+
+       while (1) {
+               struct smb_echo ec;
+
+               status = smb_raw_echo(cli->transport, &ec);
+               torture_comment(tctx, ".");
+               fflush(stdout);
+               sleep(15);
+       }
+
+       return true;
+}
+
 /*
 test how many open files this server supports on the one socket
 */
@@ -367,7 +429,7 @@ bool torture_ioctl_test(struct torture_context *tctx,
        torture_comment(tctx, "ioctl job info: %s\n", smbcli_errstr(cli->tree));
 
        for (device=0;device<0x100;device++) {
-               torture_comment(tctx, "testing device=0x%x\n", device);
+               torture_comment(tctx, "Testing device=0x%x\n", device);
                for (function=0;function<0x100;function++) {
                        parms.ioctl.in.request = (device << 16) | function;
                        status = smb_raw_ioctl(cli->tree, mem_ctx, &parms);
@@ -423,11 +485,11 @@ struct benchrw_state {
                unsigned int blocksize;
                unsigned int writeratio;
                int num_parallel_requests;
-       } *lp_params;
+       } *lpcfg_params;
 };
 
 /* 
-       init params using lp_parm_xxx 
+       init params using lpcfg_parm_xxx
        return number of unclist entries
 */
 static int init_benchrw_params(struct torture_context *tctx,
@@ -442,12 +504,12 @@ static int init_benchrw_params(struct torture_context *tctx,
        lpar->writeratio = torture_setting_int(tctx, "writeratio",5);
        lpar->num_parallel_requests = torture_setting_int(
                tctx, "parallel_requests", 5);
-       lpar->workgroup = lp_workgroup(tctx->lp_ctx);
+       lpar->workgroup = lpcfg_workgroup(tctx->lp_ctx);
        
        p = torture_setting_string(tctx, "unclist", NULL);
        if (p) {
                char *h, *s;
-               unc_list = file_lines_load(p, &num_unc_names, NULL);
+               unc_list = file_lines_load(p, &num_unc_names, 0, NULL);
                if (!unc_list || num_unc_names <= 0) {
                        torture_comment(tctx, "Failed to load unc names list "
                                        "from '%s'\n", p);
@@ -509,7 +571,7 @@ static NTSTATUS benchrw_close(struct torture_context *tctx,
        NT_STATUS_HAVE_NO_MEMORY(req);
        /*register the callback function!*/
        req->async.fn = benchrw_callback;
-       req->async.private = state;
+       req->async.private_data = state;
        
        return NT_STATUS_OK;
 }
@@ -520,7 +582,7 @@ static void benchrw_callback(struct smbcli_request *req);
 
 static void benchrw_rw_callback(struct smbcli_request *req)
 {
-       struct benchrw_state *state = req->async.private;
+       struct benchrw_state *state = req->async.private_data;
        struct torture_context *tctx = state->tctx;
 
        if (!NT_STATUS_IS_OK(req->status)) {
@@ -557,7 +619,7 @@ static NTSTATUS benchrw_readwrite(struct torture_context *tctx,
        union smb_write wr;
        
        /* randomize between writes and reads*/
-       if (random() % state->lp_params->writeratio == 0) {
+       if (random() % state->lpcfg_params->writeratio == 0) {
                torture_comment(tctx, "Callback WRITE file:%d (%d/%d)\n",
                                state->nr,state->completed,torture_numops);
                wr.generic.level = RAW_WRITE_WRITEX  ;
@@ -565,7 +627,7 @@ static NTSTATUS benchrw_readwrite(struct torture_context *tctx,
                wr.writex.in.offset     = 0;
                wr.writex.in.wmode      = 0             ;
                wr.writex.in.remaining  = 0;
-               wr.writex.in.count      = state->lp_params->blocksize;
+               wr.writex.in.count      = state->lpcfg_params->blocksize;
                wr.writex.in.data       = state->buffer;
                state->readcnt=0;
                req = smb_raw_write_send(state->cli,&wr);
@@ -574,16 +636,16 @@ static NTSTATUS benchrw_readwrite(struct torture_context *tctx,
                torture_comment(tctx,
                                "Callback READ file:%d (%d/%d) Offset:%d\n",
                                state->nr,state->completed,torture_numops,
-                               (state->readcnt*state->lp_params->blocksize));
+                               (state->readcnt*state->lpcfg_params->blocksize));
                rd.generic.level = RAW_READ_READX;
                rd.readx.in.file.fnum   = state->fnum   ;
-               rd.readx.in.offset      = state->readcnt*state->lp_params->blocksize; 
-               rd.readx.in.mincnt      = state->lp_params->blocksize;
+               rd.readx.in.offset      = state->readcnt*state->lpcfg_params->blocksize;
+               rd.readx.in.mincnt      = state->lpcfg_params->blocksize;
                rd.readx.in.maxcnt      = rd.readx.in.mincnt;
                rd.readx.in.remaining   = 0     ;
                rd.readx.out.data       = state->buffer;
                rd.readx.in.read_for_execute = false;
-               if(state->readcnt < state->lp_params->writeblocks){
+               if(state->readcnt < state->lpcfg_params->writeblocks){
                        state->readcnt++;       
                }else{
                        /*start reading from beginn of file*/
@@ -595,7 +657,7 @@ static NTSTATUS benchrw_readwrite(struct torture_context *tctx,
        NT_STATUS_HAVE_NO_MEMORY(req);
        /*register the callback function!*/
        req->async.fn = benchrw_rw_callback;
-       req->async.private = state;
+       req->async.private_data = state;
        
        return NT_STATUS_OK;
 }
@@ -621,21 +683,21 @@ static NTSTATUS benchrw_open(struct torture_context *tctx,
        }
                
        torture_comment(tctx, "Write initial test file:%d (%d/%d)\n",state->nr,
-               (state->writecnt+1)*state->lp_params->blocksize,
-               (state->lp_params->writeblocks*state->lp_params->blocksize));
+               (state->writecnt+1)*state->lpcfg_params->blocksize,
+               (state->lpcfg_params->writeblocks*state->lpcfg_params->blocksize));
        wr.generic.level = RAW_WRITE_WRITEX  ;
        wr.writex.in.file.fnum  = state->fnum ;
        wr.writex.in.offset     = state->writecnt * 
-                                       state->lp_params->blocksize;
+                                       state->lpcfg_params->blocksize;
        wr.writex.in.wmode      = 0             ;
-       wr.writex.in.remaining  = (state->lp_params->writeblocks *
-                                               state->lp_params->blocksize)-
+       wr.writex.in.remaining  = (state->lpcfg_params->writeblocks *
+                                               state->lpcfg_params->blocksize)-
                                                ((state->writecnt+1)*state->
-                                               lp_params->blocksize);
-       wr.writex.in.count      = state->lp_params->blocksize;
+                                               lpcfg_params->blocksize);
+       wr.writex.in.count      = state->lpcfg_params->blocksize;
        wr.writex.in.data       = state->buffer;
        state->writecnt++;
-       if(state->writecnt == state->lp_params->writeblocks){
+       if(state->writecnt == state->lpcfg_params->writeblocks){
                state->mode=READ_WRITE_DATA;
        }
        req = smb_raw_write_send(state->cli,&wr);
@@ -643,7 +705,7 @@ static NTSTATUS benchrw_open(struct torture_context *tctx,
        
        /*register the callback function!*/
        req->async.fn = benchrw_callback;
-       req->async.private = state;
+       req->async.private_data = state;
        return NT_STATUS_OK;
 } 
 
@@ -676,9 +738,9 @@ static NTSTATUS benchrw_mkdir(struct torture_context *tctx,
        open_parms->openx.in.timeout = 0;
        open_parms->openx.in.fname = state->fname;
                
-       writedata = talloc_size(tctx,state->lp_params->blocksize);
+       writedata = talloc_size(tctx,state->lpcfg_params->blocksize);
        NT_STATUS_HAVE_NO_MEMORY(writedata);
-       generate_random_buffer(writedata,state->lp_params->blocksize);
+       generate_random_buffer(writedata,state->lpcfg_params->blocksize);
        state->buffer=writedata;
        state->writecnt=1;
        state->readcnt=0;
@@ -690,7 +752,7 @@ static NTSTATUS benchrw_mkdir(struct torture_context *tctx,
        
        /*register the callback function!*/
        req->async.fn = benchrw_callback;
-       req->async.private = state;
+       req->async.private_data = state;
                
        return NT_STATUS_OK;
 }
@@ -700,7 +762,7 @@ static NTSTATUS benchrw_mkdir(struct torture_context *tctx,
 */
 static void benchrw_callback(struct smbcli_request *req)
 {
-       struct benchrw_state *state = req->async.private;
+       struct benchrw_state *state = req->async.private_data;
        struct torture_context *tctx = state->tctx;
        
        /*dont send new requests when torture_numops is reached*/
@@ -733,7 +795,7 @@ static void benchrw_callback(struct smbcli_request *req)
                break;
        case READ_WRITE_DATA:
                while (state->num_parallel_requests
-                      < state->lp_params->num_parallel_requests) {
+                      < state->lpcfg_params->num_parallel_requests) {
                        NTSTATUS status;
                        status = benchrw_readwrite(tctx,state);
                        if (!NT_STATUS_IS_OK(status)){
@@ -776,7 +838,7 @@ static void async_open_callback(struct composite_context *con)
 {
        struct benchrw_state *state = con->async.private_data;
        struct torture_context *tctx = state->tctx;
-       int retry = state->lp_params->retry;
+       int retry = state->lpcfg_params->retry;
                
        if (NT_STATUS_IS_OK(con->status)) {
                state->cli=((struct smb_composite_connect*)
@@ -807,7 +869,7 @@ static struct composite_context *torture_connect_async(
                                struct torture_context *tctx,
                                struct smb_composite_connect *smb,
                                TALLOC_CTX *mem_ctx,
-                               struct event_context *ev,
+                               struct tevent_context *ev,
                                const char *host,
                                const char *share,
                                const char *workgroup)
@@ -815,14 +877,19 @@ static struct composite_context *torture_connect_async(
        torture_comment(tctx, "Open Connection to %s/%s\n",host,share);
        smb->in.dest_host=talloc_strdup(mem_ctx,host);
        smb->in.service=talloc_strdup(mem_ctx,share);
-       smb->in.dest_ports=lp_smb_ports(tctx->lp_ctx);
+       smb->in.dest_ports=lpcfg_smb_ports(tctx->lp_ctx);
+       smb->in.socket_options = lpcfg_socket_options(tctx->lp_ctx);
        smb->in.called_name = strupper_talloc(mem_ctx, host);
        smb->in.service_type=NULL;
        smb->in.credentials=cmdline_credentials;
        smb->in.fallback_to_anonymous=false;
+       smb->in.gensec_settings = lpcfg_gensec_settings(mem_ctx, tctx->lp_ctx);
        smb->in.workgroup=workgroup;
+       lpcfg_smbcli_options(tctx->lp_ctx, &smb->in.options);
+       lpcfg_smbcli_session_options(tctx->lp_ctx, &smb->in.session_options);
        
-       return smb_composite_connect_send(smb,mem_ctx,ev);
+       return smb_composite_connect_send(smb,mem_ctx,
+                                         lpcfg_resolve_context(tctx->lp_ctx),ev);
 }
 
 bool run_benchrw(struct torture_context *tctx)
@@ -832,7 +899,7 @@ bool run_benchrw(struct torture_context *tctx)
        struct smbcli_request *req;
        struct benchrw_state **state;
        int i , num_unc_names;
-       struct event_context    *ev     ;       
+       struct tevent_context   *ev     ;       
        struct composite_context *req1;
        struct params lpparams;
        union smb_mkdir parms;
@@ -848,7 +915,7 @@ bool run_benchrw(struct torture_context *tctx)
        ev = tctx->ev;
        state = talloc_array(tctx, struct benchrw_state *, torture_nprocs);
 
-       /* init params using lp_parm_xxx */
+       /* init params using lpcfg_parm_xxx */
        num_unc_names = init_benchrw_params(tctx,&lpparams);
        
        /* init private data structs*/
@@ -857,7 +924,7 @@ bool run_benchrw(struct torture_context *tctx)
                state[i]->tctx = tctx;
                state[i]->completed=0;
                state[i]->num_parallel_requests=0;
-               state[i]->lp_params=&lpparams;
+               state[i]->lpcfg_params=&lpparams;
                state[i]->nr=i;
                state[i]->dname=talloc_asprintf(tctx,"benchrw%d",i);
                state[i]->fname=talloc_asprintf(tctx,"%s%s",
@@ -906,7 +973,7 @@ bool run_benchrw(struct torture_context *tctx)
                                req = smb_raw_mkdir_send(state[i]->cli,&parms);
                                /* register callback fn + private data */
                                req->async.fn = benchrw_callback;
-                               req->async.private=state[i];
+                               req->async.private_data=state[i];
                                break;
                        /* error occured , finish */
                        case ERROR: