summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/lib/time.c7
-rw-r--r--source4/torture/basic/denytest.c20
-rw-r--r--source4/torture/torture.c61
3 files changed, 86 insertions, 2 deletions
diff --git a/source4/lib/time.c b/source4/lib/time.c
index dbbfab24b5..9d906af2fa 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 102b44fbd3..13cb38633c 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; i<ARRAY_SIZE(denytable1); i++) {
enum deny_result res;
const char *fname = fnames[denytable1[i].isexe];
@@ -1461,7 +1464,12 @@ BOOL torture_denytest1(int dummy)
}
if (torture_showall || res != denytable1[i].result) {
- printf("%s %8s %10s %8s %10s %s (correct=%s)\n",
+ long long tdif;
+ GetTimeOfDay(&tv);
+ tdif = usec_time_diff(&tv, &tv_start);
+ tdif /= 1000;
+ printf("%lld: %s %8s %10s %8s %10s %s (correct=%s)\n",
+ tdif,
fname,
denystr(denytable1[i].deny1),
openstr(denytable1[i].mode1),
@@ -1498,6 +1506,7 @@ BOOL torture_denytest2(int dummy)
int i;
BOOL correct = True;
const char *fnames[2] = {"\\denytest2.dat", "\\denytest2.exe"};
+ struct timeval tv, tv_start;
if (!torture_open_connection(&cli1) || !torture_open_connection(&cli2)) {
return False;
@@ -1514,6 +1523,8 @@ BOOL torture_denytest2(int dummy)
cli_close(cli1->tree, fnum1);
}
+ GetTimeOfDay(&tv_start);
+
for (i=0; i<ARRAY_SIZE(denytable2); i++) {
enum deny_result res;
const char *fname = fnames[denytable2[i].isexe];
@@ -1547,7 +1558,12 @@ BOOL torture_denytest2(int dummy)
}
if (torture_showall || res != denytable2[i].result) {
- printf("%s %8s %10s %8s %10s %s (correct=%s)\n",
+ long long tdif;
+ GetTimeOfDay(&tv);
+ tdif = usec_time_diff(&tv, &tv_start);
+ tdif /= 1000;
+ printf("%lld: %s %8s %10s %8s %10s %s (correct=%s)\n",
+ tdif,
fname,
denystr(denytable2[i].deny1),
openstr(denytable2[i].mode1),
diff --git a/source4/torture/torture.c b/source4/torture/torture.c
index 4ff340bdd0..4da9592479 100644
--- a/source4/torture/torture.c
+++ b/source4/torture/torture.c
@@ -1760,6 +1760,66 @@ static BOOL run_unlinktest(int dummy)
/*
test how many open files this server supports on the one socket
*/
+
+static BOOL run_deferopen(struct cli_state *cli, int dummy)
+{
+ char *fname = "\\defer_open_test.dat";
+ int retries=4;
+ int i = 0;
+ BOOL correct = True;
+
+ if (retries <= 0) {
+ printf("failed to connect\n");
+ return False;
+ }
+
+ printf("Testing deferred open requests.\n");
+
+ while (i < 4) {
+ int fnum = -1;
+ do {
+ fnum = cli_nt_create_full(cli->tree, 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
+*/
static BOOL run_maxfidtest(struct cli_state *cli, int dummy)
{
const char *template = "\\maxfid.%d.%d";
@@ -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},