r21215: extend the RAW-MUX test to test cancelling a async lock request using
authorAndrew Tridgell <tridge@samba.org>
Wed, 7 Feb 2007 07:10:23 +0000 (07:10 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:44:47 +0000 (14:44 -0500)
a SMBexit
(This used to be commit 753a85eff6a19af2c7b0884f705e9f66b5f605fe)

source4/torture/raw/mux.c

index a5fd0ed3f039ff02a7dba972d1a0d0b064a69154..66fed156b3cbba423a71d171a9c7d0658dd5f542 100644 (file)
@@ -290,10 +290,13 @@ static BOOL test_mux_lock(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
        /* cancel the blocking lock */
        smb_raw_ntcancel(req);
 
+       printf("sending 2nd cancel\n");
        /* the 2nd cancel is totally harmless, but tests the server trying to 
           cancel an already cancelled request */
        smb_raw_ntcancel(req);
 
+       printf("sent 2nd cancel\n");
+
        lock[0].pid = 1;
        io.lockx.in.ulock_cnt = 1;
        io.lockx.in.lock_cnt = 0;
@@ -304,7 +307,32 @@ static BOOL test_mux_lock(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
        status = smbcli_request_simple_recv(req);
        CHECK_STATUS(status, NT_STATUS_FILE_LOCK_CONFLICT);     
 
-       smbcli_close(cli->tree, fnum);
+       printf("cancel a lock using exit to close file\n");
+       lock[0].pid = 1;
+       io.lockx.in.ulock_cnt = 0;
+       io.lockx.in.lock_cnt = 1;
+       io.lockx.in.timeout = 1000;
+
+       status = smb_raw_lock(cli->tree, &io);
+       CHECK_STATUS(status, NT_STATUS_OK);
+
+       t = timeval_current();
+       lock[0].pid = 2;
+       req = smb_raw_lock_send(cli->tree, &io);
+
+       smb_raw_exit(cli->session);
+       smb_raw_exit(cli->session);
+       smb_raw_exit(cli->session);
+       smb_raw_exit(cli->session);
+
+       printf("recv the async reply\n");
+       status = smbcli_request_simple_recv(req);
+       CHECK_STATUS(status, NT_STATUS_RANGE_NOT_LOCKED);
+       printf("async lock exit took %.2f msec\n", timeval_elapsed(&t) * 1000);
+       if (timeval_elapsed(&t) > 0.1) {
+               printf("failed to trigger early lock failure\n");
+               return False;           
+       }
 
 done:
        return ret;