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);
