svn commit: samba r18371 - in branches/SAMBA_4_0/source/torture/raw: .

tridge at samba.org tridge at samba.org
Mon Sep 11 07:58:10 GMT 2006


Author: tridge
Date: 2006-09-11 07:58:08 +0000 (Mon, 11 Sep 2006)
New Revision: 18371

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

Log:

made the directory depth notify test independent of timing

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


Changeset:
Modified: branches/SAMBA_4_0/source/torture/raw/notify.c
===================================================================
--- branches/SAMBA_4_0/source/torture/raw/notify.c	2006-09-11 07:56:23 UTC (rev 18370)
+++ branches/SAMBA_4_0/source/torture/raw/notify.c	2006-09-11 07:58:08 UTC (rev 18371)
@@ -979,12 +979,14 @@
 	union smb_notify notify;
 	union smb_open io;
 	struct smbcli_request *req;
+	struct timeval tv;
 	struct {
 		const char *path;
 		BOOL recursive;
 		uint32_t filter;
 		int expected;
 		int fnum;
+		int counted;
 	} dirs[] = {
 		{BASEDIR "\\abc",               True, FILE_NOTIFY_CHANGE_NAME, 30 },
 		{BASEDIR "\\zqy",               True, FILE_NOTIFY_CHANGE_NAME, 8 },
@@ -1009,6 +1011,7 @@
 	};
 	int i;
 	NTSTATUS status;
+	BOOL all_done = False;
 
 	printf("TESTING CHANGE NOTIFY FOR DIFFERENT DEPTHS\n");
 
@@ -1053,20 +1056,35 @@
 		talloc_free(path);
 	}
 
-	/* give a bit of time for all the events to propogate */
-	sleep(4);
+	/* give a bit of time for the events to propogate */
+	tv = timeval_current();
 
-	/* count events that have happened in each dir */
+	do {
+		/* count events that have happened in each dir */
+		for (i=0;i<ARRAY_SIZE(dirs);i++) {
+			notify.nttrans.in.file.fnum = dirs[i].fnum;
+			req = smb_raw_changenotify_send(cli->tree, &notify);
+			smb_raw_ntcancel(req);
+			notify.nttrans.out.num_changes = 0;
+			status = smb_raw_changenotify_recv(req, mem_ctx, &notify);
+			dirs[i].counted += notify.nttrans.out.num_changes;
+		}
+		
+		all_done = True;
+
+		for (i=0;i<ARRAY_SIZE(dirs);i++) {
+			if (dirs[i].counted != dirs[i].expected) {
+				all_done = False;
+			}
+		}
+	} while (!all_done && timeval_elapsed(&tv) < 20);
+
+	printf("took %.4f seconds to propogate all events\n", timeval_elapsed(&tv));
+
 	for (i=0;i<ARRAY_SIZE(dirs);i++) {
-		notify.nttrans.in.file.fnum = dirs[i].fnum;
-		req = smb_raw_changenotify_send(cli->tree, &notify);
-		smb_raw_ntcancel(req);
-		notify.nttrans.out.num_changes = 0;
-		status = smb_raw_changenotify_recv(req, mem_ctx, &notify);
-		if (notify.nttrans.out.num_changes != dirs[i].expected) {
+		if (dirs[i].counted != dirs[i].expected) {
 			printf("ERROR: i=%d expected %d got %d for '%s'\n",
-			       i, dirs[i].expected, notify.nttrans.out.num_changes,
-			       dirs[i].path);
+			       i, dirs[i].expected, dirs[i].counted, dirs[i].path);
 			ret = False;
 		}
 	}



More information about the samba-cvs mailing list