Author: tridge
Date: 2005-01-16 12:10:14 +0000 (Sun, 16 Jan 2005)
New Revision: 4779

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=4779

Log:
demonstrate doing 50 parallel loadfile operations, with a callback for 
completion


Modified:
   branches/SAMBA_4_0/source/torture/raw/composite.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/raw/composite.c
===================================================================
--- branches/SAMBA_4_0/source/torture/raw/composite.c   2005-01-16 11:45:49 UTC 
(rev 4778)
+++ branches/SAMBA_4_0/source/torture/raw/composite.c   2005-01-16 12:10:14 UTC 
(rev 4779)
@@ -26,6 +26,12 @@
 
 #define BASEDIR "\\composite"
 
+static void loadfile_complete(struct smbcli_composite *c)
+{
+       int *count = c->async.private;
+       (*count)++;
+}
+
 /*
   test a simple savefile/loadfile combination
 */
@@ -35,8 +41,11 @@
        NTSTATUS status;
        struct smb_composite_savefile io1;
        struct smb_composite_loadfile io2;
+       struct smbcli_composite **c;
        char *data;
        size_t len = random() % 100000;
+       const int num_ops = 50;
+       int i, count=0;
 
        data = talloc_array(mem_ctx, uint8_t, len);
 
@@ -56,23 +65,41 @@
 
        io2.in.fname = fname;
 
-       printf("testing loadfile\n");
+       printf("testing parallel loadfile with %d ops\n", num_ops);
 
-       status = smb_composite_loadfile(cli->tree, mem_ctx, &io2);
-       if (!NT_STATUS_IS_OK(status)) {
-               printf("Loadfile failed: %s\n", nt_errstr(status));
-               return False;
+       c = talloc_array(mem_ctx, struct smbcli_composite *, num_ops);
+
+       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;
        }
 
-       if (io2.out.size != len) {
-               printf("wrong length in returned data - %d should be %d\n",
-                      io2.out.size, len);
-               return False;
+       printf("waiting for completion\n");
+       while (count != num_ops) {
+               event_loop_once(cli->transport->socket->event.ctx);
+               printf("count=%d\r", 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));
+                       return False;
+               }
 
-       if (memcmp(io2.out.data, data, len) != 0) {
-               printf("wrong data in loadfile!\n");
-               return False;
+               if (io2.out.size != len) {
+                       printf("wrong length in returned data - %d should be 
%d\n",
+                              io2.out.size, len);
+                       return False;
+               }
+               
+               if (memcmp(io2.out.data, data, len) != 0) {
+                       printf("wrong data in loadfile!\n");
+                       return False;
+               }
        }
 
        talloc_free(data);

Reply via email to