summaryrefslogtreecommitdiff
path: root/source4/torture/smb2
diff options
context:
space:
mode:
Diffstat (limited to 'source4/torture/smb2')
-rw-r--r--source4/torture/smb2/ioctl.c227
1 files changed, 79 insertions, 148 deletions
diff --git a/source4/torture/smb2/ioctl.c b/source4/torture/smb2/ioctl.c
index cbef4d731e..ad300c028d 100644
--- a/source4/torture/smb2/ioctl.c
+++ b/source4/torture/smb2/ioctl.c
@@ -45,17 +45,11 @@ static bool test_ioctl_get_shadow_copy(struct torture_context *torture,
smb2_util_unlink(tree, FNAME);
status = torture_smb2_testfile(tree, FNAME, &h);
- if (!NT_STATUS_IS_OK(status)) {
- printf("create write\n");
- return false;
- }
+ torture_assert_ntstatus_ok(torture, status, "create write");
ZERO_ARRAY(buf);
status = smb2_util_write(tree, h, buf, 0, ARRAY_SIZE(buf));
- if (!NT_STATUS_IS_OK(status)) {
- printf("failed write\n");
- return false;
- }
+ torture_assert_ntstatus_ok(torture, status, "write");
ZERO_STRUCT(ioctl);
ioctl.smb2.level = RAW_IOCTL_SMB2;
@@ -65,10 +59,7 @@ static bool test_ioctl_get_shadow_copy(struct torture_context *torture,
ioctl.smb2.in.flags = SMB2_IOCTL_FLAG_IS_FSCTL;
status = smb2_ioctl(tree, tmp_ctx, &ioctl.smb2);
- if (!NT_STATUS_IS_OK(status)) {
- printf("FSCTL_SRV_ENUM_SNAPS failed\n");
- return false;
- }
+ torture_assert_ntstatus_ok(torture, status, "FSCTL_SRV_ENUM_SNAPS");
return true;
}
@@ -90,17 +81,11 @@ static bool test_ioctl_req_resume_key(struct torture_context *torture,
smb2_util_unlink(tree, FNAME);
status = torture_smb2_testfile(tree, FNAME, &h);
- if (!NT_STATUS_IS_OK(status)) {
- printf("create write\n");
- return false;
- }
+ torture_assert_ntstatus_ok(torture, status, "create write");
ZERO_ARRAY(buf);
status = smb2_util_write(tree, h, buf, 0, ARRAY_SIZE(buf));
- if (!NT_STATUS_IS_OK(status)) {
- printf("failed write\n");
- return false;
- }
+ torture_assert_ntstatus_ok(torture, status, "write");
ZERO_STRUCT(ioctl);
ioctl.smb2.level = RAW_IOCTL_SMB2;
@@ -110,16 +95,12 @@ static bool test_ioctl_req_resume_key(struct torture_context *torture,
ioctl.smb2.in.flags = SMB2_IOCTL_FLAG_IS_FSCTL;
status = smb2_ioctl(tree, tmp_ctx, &ioctl.smb2);
- if (!NT_STATUS_IS_OK(status)) {
- printf("FSCTL_SRV_REQUEST_RESUME_KEY failed\n");
- return false;
- }
+ torture_assert_ntstatus_ok(torture, status, "FSCTL_SRV_REQUEST_RESUME_KEY");
ndr_ret = ndr_pull_struct_blob(&ioctl.smb2.out.out, tmp_ctx, &res_key,
(ndr_pull_flags_fn_t)ndr_pull_req_resume_key_rsp);
- if (ndr_ret != NDR_ERR_SUCCESS) {
- return false;
- }
+ torture_assert_ndr_success(torture, ndr_ret,
+ "ndr_pull_req_resume_key_rsp");
ndr_print_debug((ndr_print_fn_t)ndr_print_req_resume_key_rsp, "yo", &res_key);
@@ -132,7 +113,8 @@ static uint64_t patt_hash(uint64_t off)
return off;
}
-static bool check_pattern(struct smb2_tree *tree, TALLOC_CTX *mem_ctx,
+static bool check_pattern(struct torture_context *torture,
+ struct smb2_tree *tree, TALLOC_CTX *mem_ctx,
struct smb2_handle h, uint64_t off, uint64_t len,
uint64_t patt_off)
{
@@ -145,30 +127,25 @@ static bool check_pattern(struct smb2_tree *tree, TALLOC_CTX *mem_ctx,
r.in.length = len;
r.in.offset = off;
status = smb2_read(tree, mem_ctx, &r);
- if (!NT_STATUS_IS_OK(status)) {
- printf("read failed - %s\n", nt_errstr(status));
- return false;
- } else if (len != r.out.data.length) {
- printf("read data len mismatch got %zu, expected %llu\n",
- r.out.data.length, (unsigned long long)len);
- return false;
- }
+ torture_assert_ntstatus_ok(torture, status, "read");
+
+ torture_assert_u64_equal(torture, r.out.data.length, len,
+ "read data len mismatch");
for (i = 0; i <= len - 8; i += 8, patt_off += 8) {
- if (BVAL(r.out.data.data, i) != patt_hash(patt_off)) {
- printf("pattern bad at %llu, got %llx, expected %llx\n",
- (unsigned long long)i,
- (unsigned long long)BVAL(r.out.data.data, i),
- (unsigned long long)patt_hash(patt_off));
- return false;
- }
+ uint64_t data = BVAL(r.out.data.data, i);
+ torture_assert_u64_equal(torture, data, patt_hash(patt_off),
+ talloc_asprintf(torture, "read data "
+ "pattern bad at %llu\n",
+ (unsigned long long)i));
}
talloc_free(r.out.data.data);
return true;
}
-static bool test_setup_copy_chunk(struct smb2_tree *tree, TALLOC_CTX *mem_ctx,
+static bool test_setup_copy_chunk(struct torture_context *torture,
+ struct smb2_tree *tree, TALLOC_CTX *mem_ctx,
uint32_t nchunks,
struct smb2_handle *src_h,
uint64_t src_size,
@@ -191,37 +168,25 @@ static bool test_setup_copy_chunk(struct smb2_tree *tree, TALLOC_CTX *mem_ctx,
smb2_util_unlink(tree, FNAME2);
status = torture_smb2_testfile(tree, FNAME, src_h);
- if (!NT_STATUS_IS_OK(status)) {
- printf("create write\n");
- return false;
- }
+ torture_assert_ntstatus_ok(torture, status, "create write");
if (src_size > 0) {
for (i = 0; i <= src_size - 8; i += 8) {
SBVAL(buf, i, patt_hash(i));
}
status = smb2_util_write(tree, *src_h, buf, 0, src_size);
- if (!NT_STATUS_IS_OK(status)) {
- printf("failed src write\n");
- return false;
- }
+ torture_assert_ntstatus_ok(torture, status, "src write");
}
status = torture_smb2_testfile(tree, FNAME2, dest_h);
- if (!NT_STATUS_IS_OK(status)) {
- printf("create write\n");
- return false;
- }
+ torture_assert_ntstatus_ok(torture, status, "create write");
if (dest_size > 0) {
for (i = 0; i <= src_size - 8; i += 8) {
SBVAL(buf, i, patt_hash(i));
}
status = smb2_util_write(tree, *dest_h, buf, 0, dest_size);
- if (!NT_STATUS_IS_OK(status)) {
- printf("failed dest write\n");
- return false;
- }
+ torture_assert_ntstatus_ok(torture, status, "dest write");
}
ZERO_STRUCTPN(ioctl);
@@ -233,16 +198,15 @@ static bool test_setup_copy_chunk(struct smb2_tree *tree, TALLOC_CTX *mem_ctx,
ioctl->smb2.in.flags = SMB2_IOCTL_FLAG_IS_FSCTL;
status = smb2_ioctl(tree, mem_ctx, &ioctl->smb2);
- if (!NT_STATUS_IS_OK(status)) {
- printf("FSCTL_SRV_REQUEST_RESUME_KEY failed\n");
- return false;
- }
+ torture_assert_ntstatus_ok(torture, status,
+ "FSCTL_SRV_REQUEST_RESUME_KEY");
+
ndr_ret = ndr_pull_struct_blob(&ioctl->smb2.out.out, mem_ctx, &res_key,
(ndr_pull_flags_fn_t)ndr_pull_req_resume_key_rsp);
- if (ndr_ret != NDR_ERR_SUCCESS) {
- return false;
- }
+
+ torture_assert_ndr_success(torture, ndr_ret,
+ "ndr_pull_req_resume_key_rsp");
ZERO_STRUCTPN(ioctl);
ioctl->smb2.level = RAW_IOCTL_SMB2;
@@ -264,26 +228,18 @@ static bool test_setup_copy_chunk(struct smb2_tree *tree, TALLOC_CTX *mem_ctx,
}
-static bool check_copy_chunk_rsp(struct srv_copychunk_rsp *cc_rsp,
+static bool check_copy_chunk_rsp(struct torture_context *torture,
+ struct srv_copychunk_rsp *cc_rsp,
uint32_t ex_chunks_written,
uint32_t ex_chunk_bytes_written,
uint32_t ex_total_bytes_written)
{
- if (cc_rsp->chunks_written != ex_chunks_written) {
- printf("expected %u chunks, got %u\n",
- ex_chunks_written, cc_rsp->chunks_written);
- return false;
- }
- if (cc_rsp->chunk_bytes_written != ex_chunk_bytes_written) {
- printf("expected %u chunk bytes remaining, got %u\n",
- ex_chunk_bytes_written, cc_rsp->chunk_bytes_written);
- return false;
- }
- if (cc_rsp->total_bytes_written != ex_total_bytes_written) {
- printf("expected %u total bytes, got %u\n",
- ex_total_bytes_written, cc_rsp->total_bytes_written);
- return false;
- }
+ torture_assert_int_equal(torture, cc_rsp->chunks_written,
+ ex_chunks_written, "num chunks");
+ torture_assert_int_equal(torture, cc_rsp->chunk_bytes_written,
+ ex_chunk_bytes_written, "chunk bytes written");
+ torture_assert_int_equal(torture, cc_rsp->total_bytes_written,
+ ex_total_bytes_written, "chunk total bytes");
return true;
}
@@ -300,7 +256,7 @@ static bool test_ioctl_copy_chunk_simple(struct torture_context *torture,
enum ndr_err_code ndr_ret;
bool ok;
- ok = test_setup_copy_chunk(tree, tmp_ctx,
+ ok = test_setup_copy_chunk(torture, tree, tmp_ctx,
1, /* 1 chunk */
&src_h, 4096, /* fill 4096 byte src file */
&dest_h, 0, /* 0 byte dest file */
@@ -318,24 +274,19 @@ static bool test_ioctl_copy_chunk_simple(struct torture_context *torture,
ndr_ret = ndr_push_struct_blob(&ioctl.smb2.in.out, tmp_ctx,
&cc_copy,
(ndr_push_flags_fn_t)ndr_push_srv_copychunk_copy);
- if (ndr_ret != NDR_ERR_SUCCESS) {
- return false;
- }
+ torture_assert_ndr_success(torture, ndr_ret,
+ "ndr_push_srv_copychunk_copy");
status = smb2_ioctl(tree, tmp_ctx, &ioctl.smb2);
- if (!NT_STATUS_IS_OK(status)) {
- printf("FSCTL_SRV_COPYCHUNK failed\n");
- return false;
- }
+ torture_assert_ntstatus_ok(torture, status, "FSCTL_SRV_COPYCHUNK");
ndr_ret = ndr_pull_struct_blob(&ioctl.smb2.out.out, tmp_ctx,
&cc_rsp,
(ndr_pull_flags_fn_t)ndr_pull_srv_copychunk_rsp);
- if (ndr_ret != NDR_ERR_SUCCESS) {
- return false;
- }
+ torture_assert_ndr_success(torture, ndr_ret,
+ "ndr_pull_srv_copychunk_rsp");
- ok = check_copy_chunk_rsp(&cc_rsp,
+ ok = check_copy_chunk_rsp(torture, &cc_rsp,
1, /* chunks written */
0, /* chunk bytes unsuccessfully written */
4096); /* total bytes written */
@@ -343,7 +294,7 @@ static bool test_ioctl_copy_chunk_simple(struct torture_context *torture,
return false;
}
- ok = check_pattern(tree, tmp_ctx, dest_h, 0, 4096, 0);
+ ok = check_pattern(torture, tree, tmp_ctx, dest_h, 0, 4096, 0);
if (!ok) {
return false;
}
@@ -367,7 +318,7 @@ static bool test_ioctl_copy_chunk_multi(struct torture_context *torture,
enum ndr_err_code ndr_ret;
bool ok;
- ok = test_setup_copy_chunk(tree, tmp_ctx,
+ ok = test_setup_copy_chunk(torture, tree, tmp_ctx,
2, /* chunks */
&src_h, 8192, /* src file */
&dest_h, 0, /* dest file */
@@ -389,24 +340,19 @@ static bool test_ioctl_copy_chunk_multi(struct torture_context *torture,
ndr_ret = ndr_push_struct_blob(&ioctl.smb2.in.out, tmp_ctx,
&cc_copy,
(ndr_push_flags_fn_t)ndr_push_srv_copychunk_copy);
- if (ndr_ret != NDR_ERR_SUCCESS) {
- return false;
- }
+ torture_assert_ndr_success(torture, ndr_ret,
+ "ndr_push_srv_copychunk_copy");
status = smb2_ioctl(tree, tmp_ctx, &ioctl.smb2);
- if (!NT_STATUS_IS_OK(status)) {
- printf("FSCTL_SRV_COPYCHUNK failed\n");
- return false;
- }
+ torture_assert_ntstatus_ok(torture, status, "FSCTL_SRV_COPYCHUNK");
ndr_ret = ndr_pull_struct_blob(&ioctl.smb2.out.out, tmp_ctx,
&cc_rsp,
(ndr_pull_flags_fn_t)ndr_pull_srv_copychunk_rsp);
- if (ndr_ret != NDR_ERR_SUCCESS) {
- return false;
- }
+ torture_assert_ndr_success(torture, ndr_ret,
+ "ndr_pull_srv_copychunk_rsp");
- ok = check_copy_chunk_rsp(&cc_rsp,
+ ok = check_copy_chunk_rsp(torture, &cc_rsp,
2, /* chunks written */
0, /* chunk bytes unsuccessfully written */
8192); /* total bytes written */
@@ -433,7 +379,7 @@ static bool test_ioctl_copy_chunk_tiny(struct torture_context *torture,
enum ndr_err_code ndr_ret;
bool ok;
- ok = test_setup_copy_chunk(tree, tmp_ctx,
+ ok = test_setup_copy_chunk(torture, tree, tmp_ctx,
2, /* chunks */
&src_h, 100, /* src file */
&dest_h, 0, /* dest file */
@@ -455,24 +401,19 @@ static bool test_ioctl_copy_chunk_tiny(struct torture_context *torture,
ndr_ret = ndr_push_struct_blob(&ioctl.smb2.in.out, tmp_ctx,
&cc_copy,
(ndr_push_flags_fn_t)ndr_push_srv_copychunk_copy);
- if (ndr_ret != NDR_ERR_SUCCESS) {
- return false;
- }
+ torture_assert_ndr_success(torture, ndr_ret,
+ "ndr_push_srv_copychunk_copy");
status = smb2_ioctl(tree, tmp_ctx, &ioctl.smb2);
- if (!NT_STATUS_IS_OK(status)) {
- printf("FSCTL_SRV_COPYCHUNK failed\n");
- return false;
- }
+ torture_assert_ntstatus_ok(torture, status, "FSCTL_SRV_COPYCHUNK");
ndr_ret = ndr_pull_struct_blob(&ioctl.smb2.out.out, tmp_ctx,
&cc_rsp,
(ndr_pull_flags_fn_t)ndr_pull_srv_copychunk_rsp);
- if (ndr_ret != NDR_ERR_SUCCESS) {
- return false;
- }
+ torture_assert_ndr_success(torture, ndr_ret,
+ "ndr_pull_srv_copychunk_rsp");
- ok = check_copy_chunk_rsp(&cc_rsp,
+ ok = check_copy_chunk_rsp(torture, &cc_rsp,
2, /* chunks written */
0, /* chunk bytes unsuccessfully written */
100); /* total bytes written */
@@ -480,7 +421,7 @@ static bool test_ioctl_copy_chunk_tiny(struct torture_context *torture,
return false;
}
- ok = check_pattern(tree, tmp_ctx, dest_h, 0, 100, 0);
+ ok = check_pattern(torture, tree, tmp_ctx, dest_h, 0, 100, 0);
if (!ok) {
return false;
}
@@ -504,7 +445,7 @@ static bool test_ioctl_copy_chunk_over(struct torture_context *torture,
enum ndr_err_code ndr_ret;
bool ok;
- ok = test_setup_copy_chunk(tree, tmp_ctx,
+ ok = test_setup_copy_chunk(torture, tree, tmp_ctx,
2, /* chunks */
&src_h, 8192, /* src file */
&dest_h, 4096, /* dest file */
@@ -527,24 +468,19 @@ static bool test_ioctl_copy_chunk_over(struct torture_context *torture,
ndr_ret = ndr_push_struct_blob(&ioctl.smb2.in.out, tmp_ctx,
&cc_copy,
(ndr_push_flags_fn_t)ndr_push_srv_copychunk_copy);
- if (ndr_ret != NDR_ERR_SUCCESS) {
- return false;
- }
+ torture_assert_ndr_success(torture, ndr_ret,
+ "ndr_push_srv_copychunk_copy");
status = smb2_ioctl(tree, tmp_ctx, &ioctl.smb2);
- if (!NT_STATUS_IS_OK(status)) {
- printf("FSCTL_SRV_COPYCHUNK failed\n");
- return false;
- }
+ torture_assert_ntstatus_ok(torture, status, "FSCTL_SRV_COPYCHUNK");
ndr_ret = ndr_pull_struct_blob(&ioctl.smb2.out.out, tmp_ctx,
&cc_rsp,
(ndr_pull_flags_fn_t)ndr_pull_srv_copychunk_rsp);
- if (ndr_ret != NDR_ERR_SUCCESS) {
- return false;
- }
+ torture_assert_ndr_success(torture, ndr_ret,
+ "ndr_pull_srv_copychunk_rsp");
- ok = check_copy_chunk_rsp(&cc_rsp,
+ ok = check_copy_chunk_rsp(torture, &cc_rsp,
2, /* chunks written */
0, /* chunk bytes unsuccessfully written */
8192); /* total bytes written */
@@ -552,7 +488,7 @@ static bool test_ioctl_copy_chunk_over(struct torture_context *torture,
return false;
}
- ok = check_pattern(tree, tmp_ctx, dest_h, 0, 4096, 4096);
+ ok = check_pattern(torture, tree, tmp_ctx, dest_h, 0, 4096, 4096);
if (!ok) {
return false;
}
@@ -576,7 +512,7 @@ static bool test_ioctl_copy_chunk_append(struct torture_context *torture,
enum ndr_err_code ndr_ret;
bool ok;
- ok = test_setup_copy_chunk(tree, tmp_ctx,
+ ok = test_setup_copy_chunk(torture, tree, tmp_ctx,
2, /* chunks */
&src_h, 4096, /* src file */
&dest_h, 0, /* dest file */
@@ -598,24 +534,19 @@ static bool test_ioctl_copy_chunk_append(struct torture_context *torture,
ndr_ret = ndr_push_struct_blob(&ioctl.smb2.in.out, tmp_ctx,
&cc_copy,
(ndr_push_flags_fn_t)ndr_push_srv_copychunk_copy);
- if (ndr_ret != NDR_ERR_SUCCESS) {
- return false;
- }
+ torture_assert_ndr_success(torture, ndr_ret,
+ "ndr_push_srv_copychunk_copy");
status = smb2_ioctl(tree, tmp_ctx, &ioctl.smb2);
- if (!NT_STATUS_IS_OK(status)) {
- printf("FSCTL_SRV_COPYCHUNK failed\n");
- return false;
- }
+ torture_assert_ntstatus_ok(torture, status, "FSCTL_SRV_COPYCHUNK");
ndr_ret = ndr_pull_struct_blob(&ioctl.smb2.out.out, tmp_ctx,
&cc_rsp,
(ndr_pull_flags_fn_t)ndr_pull_srv_copychunk_rsp);
- if (ndr_ret != NDR_ERR_SUCCESS) {
- return false;
- }
+ torture_assert_ndr_success(torture, ndr_ret,
+ "ndr_pull_srv_copychunk_rsp");
- ok = check_copy_chunk_rsp(&cc_rsp,
+ ok = check_copy_chunk_rsp(torture, &cc_rsp,
2, /* chunks written */
0, /* chunk bytes unsuccessfully written */
8192); /* total bytes written */
@@ -623,12 +554,12 @@ static bool test_ioctl_copy_chunk_append(struct torture_context *torture,
return false;
}
- ok = check_pattern(tree, tmp_ctx, dest_h, 0, 4096, 0);
+ ok = check_pattern(torture, tree, tmp_ctx, dest_h, 0, 4096, 0);
if (!ok) {
return false;
}
- ok = check_pattern(tree, tmp_ctx, dest_h, 4096, 4096, 0);
+ ok = check_pattern(torture, tree, tmp_ctx, dest_h, 4096, 4096, 0);
if (!ok) {
return false;
}