1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-24 21:34:56 +03:00

Properly report why a test didn't succeed (required for use with known

failures).
This commit is contained in:
Jelmer Vernooij 2008-09-18 16:05:46 +02:00
parent b72d29724d
commit a61c9ded40

View File

@ -55,7 +55,7 @@ static bool test_delayed_write_update(struct torture_context *tctx, struct smbcl
fnum1 = smbcli_open(cli->tree, fname, O_RDWR|O_CREAT, DENY_NONE);
if (fnum1 == -1) {
torture_comment(tctx, "Failed to open %s\n", fname);
torture_result(tctx, TORTURE_FAIL, "Failed to open %s", fname);
return false;
}
@ -65,10 +65,7 @@ static bool test_delayed_write_update(struct torture_context *tctx, struct smbcl
status = smb_raw_fileinfo(cli->tree, tctx, &finfo1);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("fileinfo failed: %s\n", nt_errstr(status)));
return false;
}
torture_assert_ntstatus_ok(tctx, status, "fileinfo failed");
torture_comment(tctx, "Initial write time %s\n",
nt_time_string(tctx, finfo1.basic_info.out.write_time));
@ -80,7 +77,8 @@ static bool test_delayed_write_update(struct torture_context *tctx, struct smbcl
written = smbcli_write(cli->tree, fnum1, 0, "x", 0, 1);
if (written != 1) {
torture_comment(tctx, "write failed - wrote %d bytes (%s)\n",
torture_result(tctx, TORTURE_FAIL,
"write failed - wrote %d bytes (%s)\n",
(int)written, __location__);
return false;
}
@ -117,7 +115,8 @@ static bool test_delayed_write_update(struct torture_context *tctx, struct smbcl
}
if (finfo1.basic_info.out.write_time == finfo2.basic_info.out.write_time) {
torture_comment(tctx, "Server did not update write time (wrong!)\n");
torture_result(tctx, TORTURE_FAIL,
"Server did not update write time (wrong!)");
ret = false;
}
@ -154,7 +153,7 @@ static bool test_delayed_write_update1(struct torture_context *tctx, struct smbc
fnum1 = smbcli_open(cli->tree, fname, O_RDWR|O_CREAT, DENY_NONE);
if (fnum1 == -1) {
torture_comment(tctx, "Failed to open %s\n", fname);
torture_result(tctx, TORTURE_FAIL, "Failed to open %s", fname);
return false;
}
@ -174,10 +173,7 @@ static bool test_delayed_write_update1(struct torture_context *tctx, struct smbc
status = smb_raw_fileinfo(cli->tree, tctx, &finfo1);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("fileinfo failed: %s\n", nt_errstr(status)));
return false;
}
torture_assert_ntstatus_ok(tctx, status, "fileinfo failed");
torture_comment(tctx, "Initial write time %s\n",
nt_time_string(tctx, finfo1.all_info.out.write_time));
@ -186,7 +182,8 @@ static bool test_delayed_write_update1(struct torture_context *tctx, struct smbc
written = smbcli_smbwrite(cli->tree, fnum1, "x", 1024, 0);
if (written != 0) {
torture_comment(tctx, "write failed - wrote %d bytes (%s)\n",
torture_result(tctx, TORTURE_FAIL,
"write failed - wrote %d bytes (%s)\n",
(int)written, __location__);
return false;
}
@ -203,8 +200,9 @@ static bool test_delayed_write_update1(struct torture_context *tctx, struct smbc
}
if (finfo2.all_info.out.size != 1024) {
DEBUG(0, ("file not truncated, size = %u (should be 1024)\n",
(unsigned int)finfo2.all_info.out.size));
torture_result(tctx, TORTURE_FAIL,
"file not truncated, size = %u (should be 1024)",
(unsigned int)finfo2.all_info.out.size);
ret = false;
break;
}
@ -233,7 +231,8 @@ static bool test_delayed_write_update1(struct torture_context *tctx, struct smbc
}
if (finfo1.all_info.out.write_time == finfo2.all_info.out.write_time) {
torture_comment(tctx, "Server did not update write time (wrong!)\n");
torture_result(tctx, TORTURE_FAIL,
"Server did not update write time (wrong!)");
ret = false;
}
@ -241,7 +240,8 @@ static bool test_delayed_write_update1(struct torture_context *tctx, struct smbc
written = smbcli_smbwrite(cli->tree, fnum1, "x", 0, 1);
if (written != 1) {
torture_comment(tctx, "write failed - wrote %d bytes (%s)\n",
torture_result(tctx, TORTURE_FAIL,
"write failed - wrote %d bytes (%s)",
(int)written, __location__);
return false;
}
@ -279,7 +279,8 @@ static bool test_delayed_write_update1(struct torture_context *tctx, struct smbc
}
if (finfo2.all_info.out.write_time != finfo3.all_info.out.write_time) {
torture_comment(tctx, "Server updated write time (wrong!)\n");
torture_result(tctx, TORTURE_FAIL,
"Server updated write time (wrong!)");
ret = false;
}
@ -288,13 +289,11 @@ static bool test_delayed_write_update1(struct torture_context *tctx, struct smbc
fnum1 = -1;
status = smb_raw_pathinfo(cli->tree, tctx, &pinfo4);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("pathinfo failed: %s\n", nt_errstr(status)));
return false;
}
torture_assert_ntstatus_ok(tctx, status, "pathinfo failed");
if (finfo3.all_info.out.write_time == pinfo4.all_info.out.write_time) {
torture_comment(tctx, "Server did not update write time on close (wrong!)\n");
torture_result(tctx, TORTURE_FAIL,
"Server did not update write time on close (wrong!)");
ret = false;
} else if (finfo3.all_info.out.write_time < pinfo4.all_info.out.write_time) {
torture_comment(tctx, "Server updated write time on close (correct)\n");
@ -335,7 +334,7 @@ static bool test_delayed_write_update1a(struct torture_context *tctx, struct smb
fnum1 = smbcli_open(cli->tree, fname, O_RDWR|O_CREAT, DENY_NONE);
if (fnum1 == -1) {
torture_comment(tctx, "Failed to open %s\n", fname);
torture_result(tctx, TORTURE_FAIL, "Failed to open %s", fname);
return false;
}
@ -355,10 +354,7 @@ static bool test_delayed_write_update1a(struct torture_context *tctx, struct smb
status = smb_raw_fileinfo(cli->tree, tctx, &finfo1);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("fileinfo failed: %s\n", nt_errstr(status)));
return false;
}
torture_assert_ntstatus_ok(tctx, status, "fileinfo failed");
torture_comment(tctx, "Initial write time %s\n",
nt_time_string(tctx, finfo1.all_info.out.write_time));
@ -367,7 +363,7 @@ static bool test_delayed_write_update1a(struct torture_context *tctx, struct smb
written = smbcli_smbwrite(cli->tree, fnum1, "x", 10240, 0);
if (written != 0) {
torture_comment(tctx, "write failed - wrote %d bytes (%s)\n",
torture_result(tctx, TORTURE_FAIL, "write failed - wrote %d bytes (%s)",
(int)written, __location__);
return false;
}
@ -378,14 +374,16 @@ static bool test_delayed_write_update1a(struct torture_context *tctx, struct smb
status = smb_raw_fileinfo(cli->tree, tctx, &finfo2);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("fileinfo failed: %s\n", nt_errstr(status)));
torture_result(tctx, TORTURE_FAIL, "fileinfo failed: %s",
nt_errstr(status));
ret = false;
break;
}
if (finfo2.all_info.out.size != 10240) {
DEBUG(0, ("file not truncated, size = %u (should be 10240)\n",
(unsigned int)finfo2.all_info.out.size));
torture_result(tctx, TORTURE_FAIL,
"file not truncated, size = %u (should be 10240)",
(unsigned int)finfo2.all_info.out.size);
ret = false;
break;
}
@ -414,18 +412,16 @@ static bool test_delayed_write_update1a(struct torture_context *tctx, struct smb
}
if (finfo1.all_info.out.write_time == finfo2.all_info.out.write_time) {
torture_comment(tctx, "Server did not update write time (wrong!)\n");
torture_result(tctx, TORTURE_FAIL,
"Server did not update write time (wrong!)");
ret = false;
}
/* Do a non-zero length SMBwrite and make sure it doesn't update the write time. */
written = smbcli_smbwrite(cli->tree, fnum1, "x", 0, 1);
if (written != 1) {
torture_comment(tctx, "write failed - wrote %d bytes (%s)\n",
(int)written, __location__);
return false;
}
torture_assert_int_equal(tctx, written, 1,
"unexpected number of bytes written");
start = timeval_current();
end = timeval_add(&start, (10*sec), 0);
@ -433,14 +429,16 @@ static bool test_delayed_write_update1a(struct torture_context *tctx, struct smb
status = smb_raw_fileinfo(cli->tree, tctx, &finfo3);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("fileinfo failed: %s\n", nt_errstr(status)));
torture_result(tctx, TORTURE_FAIL, "fileinfo failed: %s\n",
nt_errstr(status));
ret = false;
break;
}
if (finfo3.all_info.out.size != 10240) {
DEBUG(0, ("file not truncated, size = %u (should be 10240)\n",
(unsigned int)finfo3.all_info.out.size));
torture_result(tctx, TORTURE_FAIL,
"file not truncated, size = %u (should be 10240)",
(unsigned int)finfo3.all_info.out.size);
ret = false;
break;
}
@ -460,7 +458,8 @@ static bool test_delayed_write_update1a(struct torture_context *tctx, struct smb
}
if (finfo2.all_info.out.write_time != finfo3.all_info.out.write_time) {
torture_comment(tctx, "Server updated write time (wrong!)\n");
torture_result(tctx, TORTURE_FAIL,
"Server updated write time (wrong!)");
ret = false;
}
@ -469,13 +468,11 @@ static bool test_delayed_write_update1a(struct torture_context *tctx, struct smb
fnum1 = -1;
status = smb_raw_pathinfo(cli->tree, tctx, &pinfo4);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("pathinfo failed: %s\n", nt_errstr(status)));
return false;
}
torture_assert_ntstatus_ok(tctx, status, "pathinfo failed");
if (finfo3.all_info.out.write_time == pinfo4.all_info.out.write_time) {
torture_comment(tctx, "Server did not update write time on close (wrong!)\n");
torture_result(tctx, TORTURE_FAIL,
"Server did not update write time on close (wrong!)");
ret = false;
} else if (finfo3.all_info.out.write_time < pinfo4.all_info.out.write_time) {
torture_comment(tctx, "Server updated write time on close (correct)\n");
@ -516,7 +513,7 @@ static bool test_delayed_write_update1b(struct torture_context *tctx, struct smb
fnum1 = smbcli_open(cli->tree, fname, O_RDWR|O_CREAT, DENY_NONE);
if (fnum1 == -1) {
torture_comment(tctx, "Failed to open %s\n", fname);
torture_result(tctx, TORTURE_FAIL, "Failed to open %s", fname);
return false;
}
@ -536,10 +533,7 @@ static bool test_delayed_write_update1b(struct torture_context *tctx, struct smb
status = smb_raw_fileinfo(cli->tree, tctx, &finfo1);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("fileinfo failed: %s\n", nt_errstr(status)));
return false;
}
torture_assert_ntstatus_ok(tctx, status, "fileinfo failed");
torture_comment(tctx, "Initial write time %s\n",
nt_time_string(tctx, finfo1.all_info.out.write_time));
@ -547,11 +541,7 @@ static bool test_delayed_write_update1b(struct torture_context *tctx, struct smb
/* Do a SET_END_OF_FILE_INFO call to truncate. */
status = smbcli_ftruncate(cli->tree, fnum1, (uint64_t)10240);
if (!NT_STATUS_IS_OK(status)) {
torture_comment(tctx, "SET_END_OF_FILE failed (%s)\n",
nt_errstr(status));
return false;
}
torture_assert_ntstatus_ok(tctx, status, "SET_END_OF_FILE failed");
start = timeval_current();
end = timeval_add(&start, (120*sec), 0);
@ -565,8 +555,9 @@ static bool test_delayed_write_update1b(struct torture_context *tctx, struct smb
}
if (finfo2.all_info.out.size != 10240) {
DEBUG(0, ("file not truncated (size = %u, should be 10240)\n",
(unsigned int)finfo2.all_info.out.size ));
torture_result(tctx, TORTURE_FAIL,
"file not truncated (size = %u, should be 10240)",
(unsigned int)finfo2.all_info.out.size );
ret = false;
break;
}
@ -576,9 +567,10 @@ static bool test_delayed_write_update1b(struct torture_context *tctx, struct smb
if (finfo1.all_info.out.write_time != finfo2.all_info.out.write_time) {
double diff = timeval_elapsed(&start);
if (diff > (0.25 * sec * 0.75)) { /* 0.75 to cope with vmware timing */
torture_comment(tctx, "After SET_END_OF_FILE truncate "
torture_result(tctx, TORTURE_FAIL,
"After SET_END_OF_FILE truncate "
"server updated write_time after %.2f seconds"
"(1 sec == %.2f)(wrong!)\n",
"(1 sec == %.2f)(wrong!)",
diff, sec);
ret = false;
break;
@ -595,18 +587,16 @@ static bool test_delayed_write_update1b(struct torture_context *tctx, struct smb
}
if (finfo1.all_info.out.write_time == finfo2.all_info.out.write_time) {
torture_comment(tctx, "Server did not update write time (wrong!)\n");
torture_result(tctx, TORTURE_FAIL,
"Server did not update write time (wrong!)");
ret = false;
}
/* Do a non-zero length SMBwrite and make sure it doesn't update the write time. */
written = smbcli_smbwrite(cli->tree, fnum1, "x", 0, 1);
if (written != 1) {
torture_comment(tctx, "write failed - wrote %d bytes (%s)\n",
(int)written, __location__);
return false;
}
torture_assert_int_equal(tctx, written, 1,
"unexpected number of bytes written");
start = timeval_current();
end = timeval_add(&start, (10*sec), 0);
@ -614,7 +604,8 @@ static bool test_delayed_write_update1b(struct torture_context *tctx, struct smb
status = smb_raw_fileinfo(cli->tree, tctx, &finfo3);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("fileinfo failed: %s\n", nt_errstr(status)));
torture_result(tctx, TORTURE_FAIL,
"fileinfo failed: %s", nt_errstr(status));
ret = false;
break;
}
@ -641,7 +632,7 @@ static bool test_delayed_write_update1b(struct torture_context *tctx, struct smb
}
if (finfo2.all_info.out.write_time != finfo3.all_info.out.write_time) {
torture_comment(tctx, "Server updated write time (wrong!)\n");
torture_result(tctx, TORTURE_FAIL, "Server updated write time (wrong!)\n");
ret = false;
}
@ -650,13 +641,10 @@ static bool test_delayed_write_update1b(struct torture_context *tctx, struct smb
fnum1 = -1;
status = smb_raw_pathinfo(cli->tree, tctx, &pinfo4);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("pathinfo failed: %s\n", nt_errstr(status)));
return false;
}
torture_assert_ntstatus_ok(tctx, status, "pathinfo failed");
if (finfo3.all_info.out.write_time == pinfo4.all_info.out.write_time) {
torture_comment(tctx, "Server did not update write time on close (wrong!)\n");
torture_result(tctx, TORTURE_FAIL, "Server did not update write time on close (wrong!)\n");
ret = false;
} else if (finfo3.all_info.out.write_time < pinfo4.all_info.out.write_time) {
torture_comment(tctx, "Server updated write time on close (correct)\n");
@ -697,7 +685,7 @@ static bool test_delayed_write_update1c(struct torture_context *tctx, struct smb
fnum1 = smbcli_open(cli->tree, fname, O_RDWR|O_CREAT, DENY_NONE);
if (fnum1 == -1) {
torture_comment(tctx, "Failed to open %s\n", fname);
torture_result(tctx, TORTURE_FAIL, "Failed to open %s", fname);
return false;
}
@ -717,10 +705,7 @@ static bool test_delayed_write_update1c(struct torture_context *tctx, struct smb
status = smb_raw_fileinfo(cli->tree, tctx, &finfo1);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("fileinfo failed: %s\n", nt_errstr(status)));
return false;
}
torture_assert_ntstatus_ok(tctx, status, "fileinfo failed");
torture_comment(tctx, "Initial write time %s\n",
nt_time_string(tctx, finfo1.all_info.out.write_time));
@ -732,11 +717,8 @@ static bool test_delayed_write_update1c(struct torture_context *tctx, struct smb
status = smb_raw_setfileinfo(cli->tree, &parms);
if (!NT_STATUS_IS_OK(status)) {
torture_comment(tctx, "RAW_SFILEINFO_ALLOCATION_INFO failed (%s)\n",
nt_errstr(status));
return false;
}
torture_assert_ntstatus_ok(tctx, status,
"RAW_SFILEINFO_ALLOCATION_INFO failed");
start = timeval_current();
end = timeval_add(&start, (120*sec), 0);
@ -744,14 +726,16 @@ static bool test_delayed_write_update1c(struct torture_context *tctx, struct smb
status = smb_raw_fileinfo(cli->tree, tctx, &finfo2);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("fileinfo failed: %s\n", nt_errstr(status)));
torture_result(tctx, TORTURE_FAIL, "fileinfo failed: %s",
nt_errstr(status));
ret = false;
break;
}
if (finfo2.all_info.out.size != 0) {
DEBUG(0, ("file not truncated (size = %u, should be 10240)\n",
(unsigned int)finfo2.all_info.out.size ));
torture_result(tctx, TORTURE_FAIL,
"file not truncated (size = %u, should be 10240)",
(unsigned int)finfo2.all_info.out.size);
ret = false;
break;
}
@ -780,18 +764,15 @@ static bool test_delayed_write_update1c(struct torture_context *tctx, struct smb
}
if (finfo1.all_info.out.write_time == finfo2.all_info.out.write_time) {
torture_comment(tctx, "Server did not update write time (wrong!)\n");
torture_result(tctx, TORTURE_FAIL,
"Server did not update write time (wrong!)");
ret = false;
}
/* Do a non-zero length SMBwrite and make sure it doesn't update the write time. */
written = smbcli_smbwrite(cli->tree, fnum1, "x", 0, 1);
if (written != 1) {
torture_comment(tctx, "write failed - wrote %d bytes (%s)\n",
(int)written, __location__);
return false;
}
torture_assert_int_equal(tctx, written, 1,
"Unexpected number of bytes written");
start = timeval_current();
end = timeval_add(&start, (10*sec), 0);
@ -799,13 +780,14 @@ static bool test_delayed_write_update1c(struct torture_context *tctx, struct smb
status = smb_raw_fileinfo(cli->tree, tctx, &finfo3);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("fileinfo failed: %s\n", nt_errstr(status)));
torture_result(tctx, TORTURE_FAIL, "fileinfo failed: %s",
nt_errstr(status));
ret = false;
break;
}
if (finfo3.all_info.out.size != 1) {
DEBUG(0, ("file not expanded\n"));
torture_result(tctx, TORTURE_FAIL, "file not expanded");
ret = false;
break;
}
@ -825,7 +807,8 @@ static bool test_delayed_write_update1c(struct torture_context *tctx, struct smb
}
if (finfo2.all_info.out.write_time != finfo3.all_info.out.write_time) {
torture_comment(tctx, "Server updated write time (wrong!)\n");
torture_result(tctx, TORTURE_FAIL,
"Server updated write time (wrong!)");
ret = false;
}
@ -834,13 +817,10 @@ static bool test_delayed_write_update1c(struct torture_context *tctx, struct smb
fnum1 = -1;
status = smb_raw_pathinfo(cli->tree, tctx, &pinfo4);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("pathinfo failed: %s\n", nt_errstr(status)));
return false;
}
torture_assert_ntstatus_ok(tctx, status, "pathinfo failed");
if (finfo3.all_info.out.write_time == pinfo4.all_info.out.write_time) {
torture_comment(tctx, "Server did not update write time on close (wrong!)\n");
torture_result(tctx, TORTURE_FAIL, "Server did not update write time on close (wrong!)\n");
ret = false;
} else if (finfo3.all_info.out.write_time < pinfo4.all_info.out.write_time) {
torture_comment(tctx, "Server updated write time on close (correct)\n");
@ -894,10 +874,7 @@ static bool test_delayed_write_update2(struct torture_context *tctx, struct smbc
status = smb_raw_fileinfo(cli->tree, tctx, &finfo1);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("fileinfo failed: %s\n", nt_errstr(status)));
return false;
}
torture_assert_ntstatus_ok(tctx, status, "fileinfo failed");
torture_comment(tctx, "Initial write time %s\n",
nt_time_string(tctx, finfo1.basic_info.out.write_time));
@ -927,10 +904,7 @@ static bool test_delayed_write_update2(struct torture_context *tctx, struct smbc
status = smb_raw_setfileinfo(cli->tree, &sfinfo);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("sfileinfo failed: %s\n", nt_errstr(status)));
return false;
}
torture_assert_ntstatus_ok(tctx, status, "sfileinfo failed");
}
finfo2.basic_info.in.file.path = fname;
@ -947,7 +921,7 @@ static bool test_delayed_write_update2(struct torture_context *tctx, struct smbc
if (finfo1.basic_info.out.write_time != finfo2.basic_info.out.write_time) {
torture_comment(tctx, "Server updated write_time (correct)\n");
} else {
torture_comment(tctx, "Server did not update write time (wrong!)\n");
torture_result(tctx, TORTURE_FAIL, "Server did not update write time (wrong!)\n");
ret = false;
}
@ -1195,7 +1169,7 @@ static bool test_delayed_write_update2(struct torture_context *tctx, struct smbc
}
if (finfo1.basic_info.out.write_time == finfo2.basic_info.out.write_time) {
torture_comment(tctx, "Server did not update write time (wrong!)\n");
torture_result(tctx, TORTURE_FAIL, "Server did not update write time (wrong!)\n");
ret = false;
}
@ -2900,7 +2874,7 @@ struct torture_suite *torture_delay_write(void)
torture_suite_add_2smb_test(suite, "finfo update on close", test_finfo_after_write);
torture_suite_add_1smb_test(suite, "delayed update of write time", test_delayed_write_update);
torture_suite_add_1smb_test(suite, "update of write time and SMBwrite truncate ", test_delayed_write_update1);
torture_suite_add_1smb_test(suite, "update of write time and SMBwrite truncate", test_delayed_write_update1);
torture_suite_add_1smb_test(suite, "update of write time and SMBwrite truncate expand", test_delayed_write_update1a);
torture_suite_add_1smb_test(suite, "update of write time using SET_END_OF_FILE", test_delayed_write_update1b);
torture_suite_add_1smb_test(suite, "update of write time using SET_ALLOCATION_SIZE", test_delayed_write_update1c);