diff options
author | Andrew Tridgell <tridge@samba.org> | 2004-11-03 10:09:48 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:05:23 -0500 |
commit | dde07058075d357cfdc63624c8dcaa67ebd40add (patch) | |
tree | c3f29090e37f1bc103a3d6051e708d1ebbe305a5 /source4/torture/raw | |
parent | 90a8c4acc7e673e6439197776d19cc4b095ac322 (diff) | |
download | samba-dde07058075d357cfdc63624c8dcaa67ebd40add.tar.gz samba-dde07058075d357cfdc63624c8dcaa67ebd40add.tar.bz2 samba-dde07058075d357cfdc63624c8dcaa67ebd40add.zip |
r3507: - added deferred replies on sharing violation in pvfs open. The
deferred reply is short-circuited immediately when the file is
closed by another user, allowing it to be opened by the waiting user.
- added a sane set of timeval manipulation routines
- converted all the events code and code that uses it to use struct
timeval instead of time_t, which allows for microsecond resolution
instead of 1 second resolution. This was needed for doing the pvfs
deferred open code, and is why the patch is so big.
(This used to be commit 0d51511d408d91eb5f68a35e980e0875299b1831)
Diffstat (limited to 'source4/torture/raw')
-rw-r--r-- | source4/torture/raw/mux.c | 21 | ||||
-rw-r--r-- | source4/torture/raw/open.c | 9 |
2 files changed, 26 insertions, 4 deletions
diff --git a/source4/torture/raw/mux.c b/source4/torture/raw/mux.c index c184fb79a7..c02045817e 100644 --- a/source4/torture/raw/mux.c +++ b/source4/torture/raw/mux.c @@ -42,6 +42,8 @@ static BOOL test_mux_open(struct smbcli_state *cli, TALLOC_CTX *mem_ctx) int fnum; BOOL ret = True; struct smbcli_request *req; + struct timeval tv; + double d; printf("testing multiplexed open/open/close\n"); @@ -64,14 +66,25 @@ static BOOL test_mux_open(struct smbcli_state *cli, TALLOC_CTX *mem_ctx) CHECK_STATUS(status, NT_STATUS_OK); fnum = io.ntcreatex.out.fnum; + tv = timeval_current(); + /* send an open that will conflict */ io.ntcreatex.in.open_disposition = NTCREATEX_DISP_OPEN; status = smb_raw_open(cli->tree, mem_ctx, &io); CHECK_STATUS(status, NT_STATUS_SHARING_VIOLATION); + d = timeval_elapsed(&tv); + if (d < 0.5 || d > 1.5) { + printf("bad timeout for conflict - %.2f should be 1.0\n", d); + ret = False; + } else { + printf("open delay %.2f\n", d); + } + /* same request, but async */ + tv = timeval_current(); req = smb_raw_open_send(cli->tree, &io); /* and close the file */ @@ -81,6 +94,14 @@ static BOOL test_mux_open(struct smbcli_state *cli, TALLOC_CTX *mem_ctx) status = smb_raw_open_recv(req, mem_ctx, &io); CHECK_STATUS(status, NT_STATUS_OK); + d = timeval_elapsed(&tv); + if (d > 0.25) { + printf("bad timeout for async conflict - %.2f should be <0.25\n", d); + ret = False; + } else { + printf("async open delay %.2f\n", d); + } + smbcli_close(cli->tree, io.ntcreatex.out.fnum); done: diff --git a/source4/torture/raw/open.c b/source4/torture/raw/open.c index 81681bbd74..c810984900 100644 --- a/source4/torture/raw/open.c +++ b/source4/torture/raw/open.c @@ -266,6 +266,7 @@ static BOOL test_openx(struct smbcli_state *cli, TALLOC_CTX *mem_ctx) int fnum = -1, fnum2; BOOL ret = True; int i; + struct timeval tv; struct { uint16_t open_func; BOOL with_file; @@ -398,13 +399,13 @@ static BOOL test_openx(struct smbcli_state *cli, TALLOC_CTX *mem_ctx) fnum = io.openx.out.fnum; io.openx.in.timeout = 20000; - start_timer(); + tv = timeval_current(); io.openx.in.open_mode = OPENX_MODE_ACCESS_RDWR | OPENX_MODE_DENY_NONE; status = smb_raw_open(cli->tree, mem_ctx, &io); CHECK_STATUS(status, NT_STATUS_SHARING_VIOLATION); - if (end_timer() > 3) { - printf("(%s) Incorrect timing in openx with timeout - waited %d seconds\n", - __location__, (int)end_timer()); + if (timeval_elapsed(&tv) > 3.0) { + printf("(%s) Incorrect timing in openx with timeout - waited %.2f seconds\n", + __location__, timeval_elapsed(&tv)); ret = False; } smbcli_close(cli->tree, fnum); |