r25398: Parse loadparm context to all lp_*() functions.
[kai/samba.git] / source4 / torture / raw / composite.c
index e78227be1617c87414e07ae55451096a2cffe2d1..ab406f86245fb43ff22602143db38b791f4f5f00 100644 (file)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
+#include "torture/torture.h"
 #include "lib/events/events.h"
 #include "libcli/raw/libcliraw.h"
+#include "libcli/libcli.h"
+#include "libcli/security/security.h"
 #include "libcli/composite/composite.h"
+#include "libcli/smb_composite/smb_composite.h"
+#include "librpc/gen_ndr/ndr_misc.h"
 #include "lib/cmdline/popt_common.h"
-#include "librpc/gen_ndr/ndr_security.h"
+#include "torture/util.h"
+#include "param/param.h"
 
 #define BASEDIR "\\composite"
 
 static void loadfile_complete(struct composite_context *c)
 {
-       int *count = talloc_get_type(c->async.private, int);
+       int *count = talloc_get_type(c->async.private_data, int);
        (*count)++;
 }
 
@@ -45,7 +50,7 @@ static BOOL test_loadfile(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
        struct smb_composite_savefile io1;
        struct smb_composite_loadfile io2;
        struct composite_context **c;
-       char *data;
+       uint8_t *data;
        size_t len = random() % 100000;
        const int num_ops = 50;
        int i;
@@ -63,7 +68,7 @@ static BOOL test_loadfile(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
 
        status = smb_composite_savefile(cli->tree, &io1);
        if (!NT_STATUS_IS_OK(status)) {
-               printf("savefile failed: %s\n", nt_errstr(status));
+               printf("(%s) savefile failed: %s\n", __location__,nt_errstr(status));
                return False;
        }
 
@@ -76,32 +81,34 @@ static BOOL test_loadfile(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
        for (i=0;i<num_ops;i++) {
                c[i] = smb_composite_loadfile_send(cli->tree, &io2);
                c[i]->async.fn = loadfile_complete;
-               c[i]->async.private = count;
+               c[i]->async.private_data = count;
        }
 
        printf("waiting for completion\n");
        while (*count != num_ops) {
                event_loop_once(cli->transport->socket->event.ctx);
-               printf("count=%d\r", *count);
-               fflush(stdout);
+               if (lp_parm_bool(NULL, "torture", "progress", true)) {
+                       printf("(%s) count=%d\r", __location__, *count);
+                       fflush(stdout);
+               }
        }
        printf("count=%d\n", *count);
        
        for (i=0;i<num_ops;i++) {
                status = smb_composite_loadfile_recv(c[i], mem_ctx);
                if (!NT_STATUS_IS_OK(status)) {
-                       printf("loadfile[%d] failed - %s\n", i, nt_errstr(status));
+                       printf("(%s) loadfile[%d] failed - %s\n", __location__, i, nt_errstr(status));
                        return False;
                }
 
                if (io2.out.size != len) {
-                       printf("wrong length in returned data - %d should be %d\n",
-                              io2.out.size, len);
+                       printf("(%s) wrong length in returned data - %d should be %d\n",__location__,
+                              io2.out.size, (int)len);
                        return False;
                }
                
                if (memcmp(io2.out.data, data, len) != 0) {
-                       printf("wrong data in loadfile!\n");
+                       printf("(%s) wrong data in loadfile!\n",__location__);
                        return False;
                }
        }
@@ -121,7 +128,7 @@ static BOOL test_fetchfile(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
        struct smb_composite_savefile io1;
        struct smb_composite_fetchfile io2;
        struct composite_context **c;
-       char *data;
+       uint8_t *data;
        int i;
        size_t len = random() % 10000;
        extern int torture_numops;
@@ -141,59 +148,61 @@ static BOOL test_fetchfile(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
 
        status = smb_composite_savefile(cli->tree, &io1);
        if (!NT_STATUS_IS_OK(status)) {
-               printf("savefile failed: %s\n", nt_errstr(status));
+               printf("(%s) savefile failed: %s\n",__location__, nt_errstr(status));
                return False;
        }
 
-       io2.in.dest_host = lp_parm_string(-1, "torture", "host");
+       io2.in.dest_host = lp_parm_string(NULL, "torture", "host");
        io2.in.port = 0;
-       io2.in.called_name = lp_parm_string(-1, "torture", "host");
-       io2.in.service = lp_parm_string(-1, "torture", "share");
+       io2.in.called_name = lp_parm_string(NULL, "torture", "host");
+       io2.in.service = lp_parm_string(NULL, "torture", "share");
        io2.in.service_type = "A:";
 
        io2.in.credentials = cmdline_credentials;
-       io2.in.workgroup  = lp_workgroup();
+       io2.in.workgroup  = lp_workgroup(global_loadparm);
        io2.in.filename = fname;
 
        printf("testing parallel fetchfile with %d ops\n", torture_numops);
 
-       event_ctx = event_context_init(mem_ctx);
+       event_ctx = cli->transport->socket->event.ctx;
        c = talloc_array(mem_ctx, struct composite_context *, torture_numops);
 
        for (i=0; i<torture_numops; i++) {
                c[i] = smb_composite_fetchfile_send(&io2, event_ctx);
                c[i]->async.fn = loadfile_complete;
-               c[i]->async.private = count;
+               c[i]->async.private_data = count;
        }
 
        printf("waiting for completion\n");
 
        while (*count != torture_numops) {
                event_loop_once(event_ctx);
-               printf("count=%d\r", *count);
-               fflush(stdout);
+               if (lp_parm_bool(NULL, "torture", "progress", true)) {
+                       printf("(%s) count=%d\r", __location__, *count);
+                       fflush(stdout);
+               }
        }
        printf("count=%d\n", *count);
 
        for (i=0;i<torture_numops;i++) {
                status = smb_composite_fetchfile_recv(c[i], mem_ctx);
                if (!NT_STATUS_IS_OK(status)) {
-                       printf("loadfile[%d] failed - %s\n", i,
+                       printf("(%s) loadfile[%d] failed - %s\n", __location__, i,
                               nt_errstr(status));
                        ret = False;
                        continue;
                }
 
                if (io2.out.size != len) {
-                       printf("wrong length in returned data - %d "
-                              "should be %d\n",
-                              io2.out.size, len);
+                       printf("(%s) wrong length in returned data - %d "
+                              "should be %d\n", __location__,
+                              io2.out.size, (int)len);
                        ret = False;
                        continue;
                }
                
                if (memcmp(io2.out.data, data, len) != 0) {
-                       printf("wrong data in loadfile!\n");
+                       printf("(%s) wrong data in loadfile!\n", __location__);
                        ret = False;
                        continue;
                }
@@ -234,7 +243,7 @@ static BOOL test_appendacl(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
          
                status = smb_composite_savefile(cli->tree, &io1);
                if (!NT_STATUS_IS_OK(status)) {
-                       printf("savefile failed: %s\n", nt_errstr(status));
+                       printf("(%s) savefile failed: %s\n", __location__, nt_errstr(status));
                        return False;
                }
 
@@ -243,7 +252,7 @@ static BOOL test_appendacl(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
                io_orig[i]->in.sd = security_descriptor_initialise(io_orig[i]);
                status = smb_composite_appendacl(cli->tree, io_orig[i], io_orig[i]);
                if (!NT_STATUS_IS_OK(status)) {
-                       printf("appendacl failed: %s\n", nt_errstr(status));
+                       printf("(%s) appendacl failed: %s\n", __location__, nt_errstr(status));
                        return False;
                }
        }
@@ -263,7 +272,7 @@ static BOOL test_appendacl(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
 
        status = security_descriptor_dacl_add(test_sd, ace);
        if (!NT_STATUS_IS_OK(status)) {
-               printf("appendacl failed: %s\n", nt_errstr(status));
+               printf("(%s) appendacl failed: %s\n", __location__, nt_errstr(status));
                return False;
        }
 
@@ -281,28 +290,30 @@ static BOOL test_appendacl(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
 
                c[i] = smb_composite_appendacl_send(cli->tree, io[i]);
                c[i]->async.fn = loadfile_complete;
-               c[i]->async.private = count;
+               c[i]->async.private_data = count;
        }
 
        event_ctx = talloc_reference(mem_ctx, cli->tree->session->transport->socket->event.ctx);
        printf("waiting for completion\n");
        while (*count != num_ops) {
                event_loop_once(event_ctx);
-               printf("count=%d\r", *count);
-               fflush(stdout);
+               if (lp_parm_bool(NULL, "torture", "progress", true)) {
+                       printf("(%s) count=%d\r", __location__, *count);
+                       fflush(stdout);
+               }
        }
        printf("count=%d\n", *count);
 
        for (i=0; i < num_ops; i++) {
                status = smb_composite_appendacl_recv(c[i], io[i]);
                if (!NT_STATUS_IS_OK(status)) {
-                       printf("appendacl[%d] failed - %s\n", i, nt_errstr(status));
+                       printf("(%s) appendacl[%d] failed - %s\n", __location__, i, nt_errstr(status));
                        return False;
                }
                
                security_descriptor_dacl_add(io_orig[i]->out.sd, ace);
                if (!security_acl_equal(io_orig[i]->out.sd->dacl, io[i]->out.sd->dacl)) {
-                       printf("appendacl[%d] failed - needed acl isn't set\n", i);
+                       printf("(%s) appendacl[%d] failed - needed acl isn't set\n", __location__, i);
                        return False;
                }
        }
@@ -329,13 +340,13 @@ static BOOL test_fsinfo(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
        int *count = talloc_zero(mem_ctx, int);
        BOOL ret = True;
 
-       io1.in.dest_host = lp_parm_string(-1, "torture", "host");
+       io1.in.dest_host = lp_parm_string(NULL, "torture", "host");
        io1.in.port = 0;
-       io1.in.called_name = lp_parm_string(-1, "torture", "host");
-       io1.in.service = lp_parm_string(-1, "torture", "share");
+       io1.in.called_name = lp_parm_string(NULL, "torture", "host");
+       io1.in.service = lp_parm_string(NULL, "torture", "share");
        io1.in.service_type = "A:";
        io1.in.credentials = cmdline_credentials;
-       io1.in.workgroup = lp_workgroup();
+       io1.in.workgroup = lp_workgroup(global_loadparm);
        io1.in.level = RAW_QFS_OBJECTID_INFORMATION;
 
        printf("testing parallel queryfsinfo [Object ID] with %d ops\n", torture_numops);
@@ -346,29 +357,31 @@ static BOOL test_fsinfo(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
        for (i=0; i<torture_numops; i++) {
                c[i] = smb_composite_fsinfo_send(cli->tree,&io1);
                c[i]->async.fn = loadfile_complete;
-               c[i]->async.private = count;
+               c[i]->async.private_data = count;
        }
 
        printf("waiting for completion\n");
 
        while (*count < torture_numops) {
                event_loop_once(event_ctx);
-               printf("count=%d\r", *count);
-               fflush(stdout);
+               if (lp_parm_bool(NULL, "torture", "progress", true)) {
+                       printf("(%s) count=%d\r", __location__, *count);
+                       fflush(stdout);
+               }
        }
        printf("count=%d\n", *count);
 
        for (i=0;i<torture_numops;i++) {
                status = smb_composite_fsinfo_recv(c[i], mem_ctx);
                if (!NT_STATUS_IS_OK(status)) {
-                       printf("fsinfo[%d] failed - %s\n", i, nt_errstr(status));
+                       printf("(%s) fsinfo[%d] failed - %s\n", __location__, i, nt_errstr(status));
                        ret = False;
                        continue;
                }
 
                if (io1.out.fsinfo->generic.level != RAW_QFS_OBJECTID_INFORMATION) {
-                       printf("wrong level in returned info - %d "
-                              "should be %d\n",
+                       printf("(%s) wrong level in returned info - %d "
+                              "should be %d\n", __location__,
                               io1.out.fsinfo->generic.level, RAW_QFS_OBJECTID_INFORMATION);
                        ret = False;
                        continue;
@@ -387,31 +400,22 @@ static BOOL test_fsinfo(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
 /* 
    basic testing of libcli composite calls
 */
-BOOL torture_raw_composite(void)
+bool torture_raw_composite(struct torture_context *tctx, 
+                          struct smbcli_state *cli)
 {
-       struct smbcli_state *cli;
-       BOOL ret = True;
-       TALLOC_CTX *mem_ctx;
-
-       if (!torture_open_connection(&cli)) {
-               return False;
-       }
-
-       mem_ctx = talloc_init("torture_raw_composite");
+       bool ret = true;
 
        if (!torture_setup_dir(cli, BASEDIR)) {
                return False;
        }
 
-       ret &= test_fetchfile(cli, mem_ctx);
-       ret &= test_loadfile(cli, mem_ctx);
-       ret &= test_appendacl(cli, mem_ctx);
-       ret &= test_fsinfo(cli, mem_ctx);
+       ret &= test_fetchfile(cli, tctx);
+       ret &= test_loadfile(cli, tctx);
+       ret &= test_appendacl(cli, tctx);
+       ret &= test_fsinfo(cli, tctx);
 
        smb_raw_exit(cli->session);
        smbcli_deltree(cli->tree, BASEDIR);
 
-       torture_close_connection(cli);
-       talloc_free(mem_ctx);
        return ret;
 }