diff --git a/source4/lib/time.c b/source4/lib/time.c index dbbfab24b5b..9d906af2fae 100644 --- a/source4/lib/time.c +++ b/source4/lib/time.c @@ -409,3 +409,10 @@ NTTIME nttime_from_string(const char *s) { return strtoull(s, NULL, 0); } + +long long usec_time_diff(struct timeval *larget, struct timeval *smallt) +{ + long long sec_diff = larget->tv_sec - smallt->tv_sec; + return (sec_diff * 1000000) + (long long)(larget->tv_usec - smallt->tv_usec); +} + diff --git a/source4/torture/basic/denytest.c b/source4/torture/basic/denytest.c index 102b44fbd34..13cb38633c6 100644 --- a/source4/torture/basic/denytest.c +++ b/source4/torture/basic/denytest.c @@ -1409,6 +1409,7 @@ BOOL torture_denytest1(int dummy) int fnum1, fnum2; int i; BOOL correct = True; + struct timeval tv, tv_start; const char *fnames[2] = {"\\denytest1.dat", "\\denytest1.exe"}; if (!torture_open_connection(&cli1)) { @@ -1428,6 +1429,8 @@ BOOL torture_denytest1(int dummy) printf("testing %d entries\n", ARRAY_SIZE(denytable1)); + GetTimeOfDay(&tv_start); + for (i=0; itree, fnum1); } + GetTimeOfDay(&tv_start); + for (i=0; itree, fname, 0, GENERIC_RIGHTS_FILE_ALL_ACCESS, + FILE_ATTRIBUTE_NORMAL, NTCREATEX_SHARE_ACCESS_NONE, + NTCREATEX_DISP_OPEN_IF, 0, 0); + if (fnum != -1) { + break; + } + } while (NT_STATUS_EQUAL(cli_nt_error(cli->tree),NT_STATUS_SHARING_VIOLATION)); + + if (fnum == -1) { + fprintf(stderr,"Failed to open %s, error=%s\n", fname, cli_errstr(cli->tree)); + return False; + } + + printf("pid %u open %d\n", getpid(), i); + + sleep(10); + i++; + if (NT_STATUS_IS_ERR(cli_close(cli->tree, fnum))) { + fprintf(stderr,"Failed to close %s, error=%s\n", fname, cli_errstr(cli->tree)); + return False; + } + sleep(2); + } + + if (NT_STATUS_IS_ERR(cli_unlink(cli->tree, fname))) { + /* All until the last unlink will fail with sharing violation. */ + if (!NT_STATUS_EQUAL(cli_nt_error(cli->tree),NT_STATUS_SHARING_VIOLATION)) { + printf("unlink of %s failed (%s)\n", fname, cli_errstr(cli->tree)); + correct = False; + } + } + + printf("deferred test finished\n"); + if (!torture_close_connection(cli)) { + correct = False; + } + return correct; +} + /* test how many open files this server supports on the one socket */ @@ -4089,6 +4149,7 @@ static struct { #if 1 {"OPENATTR", run_openattrtest, 0}, #endif + {"DEFER_OPEN", run_deferopen, FLAG_MULTIPROC}, {"XCOPY", run_xcopy, 0}, {"RENAME", run_rename, 0}, {"DELETE", run_deletetest, 0},