1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

s4:torture: add a durable-open-disconnect test (suite)

this opens a durable, disconnects it and exits

Signed-off-by: Michael Adam <obnox@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
This commit is contained in:
Michael Adam 2013-02-12 17:45:23 +01:00 committed by Stefan Metzmacher
parent f0e6a9be00
commit 42bf98d54c
3 changed files with 65 additions and 0 deletions

View File

@ -41,6 +41,7 @@
^samba3.*raw.qfsinfo
^samba3.*raw.sfileinfo.base
^samba3.smb2.hold-oplock # Not a test, but a way to block other clients for a test
^samba3.smb2.durable-open-disconnect # Not a test, but a way to create a disconnected durable
^samba3.smb2.scan # No tests
^samba4.base.iometer
^samba4.base.casetable

View File

@ -1784,6 +1784,54 @@ done:
return ret;
}
/**
* durable open with oplock, disconnect, exit
*/
static bool test_durable_open_oplock_disconnect(struct torture_context *tctx,
struct smb2_tree *tree)
{
TALLOC_CTX *mem_ctx = talloc_new(tctx);
struct smb2_create io;
struct smb2_handle _h;
struct smb2_handle *h = NULL;
NTSTATUS status;
char fname[256];
bool ret = true;
snprintf(fname, 256, "durable_open_oplock_disconnect_%s.dat",
generate_random_str(tctx, 8));
smb2_util_unlink(tree, fname);
smb2_oplock_create(&io, fname, SMB2_OPLOCK_LEVEL_BATCH);
io.in.durable_open = true;
status = smb2_create(tree, mem_ctx, &io);
CHECK_STATUS(status, NT_STATUS_OK);
_h = io.out.file.handle;
h = &_h;
CHECK_CREATED(&io, CREATED, FILE_ATTRIBUTE_ARCHIVE);
CHECK_VAL(io.out.durable_open, true);
CHECK_VAL(io.out.oplock_level, SMB2_OPLOCK_LEVEL_BATCH);
/* disconnect */
talloc_free(tree);
tree = NULL;
done:
if (tree != NULL) {
if (h != NULL) {
smb2_util_close(tree, *h);
}
smb2_util_unlink(tree, fname);
}
return ret;
}
struct torture_suite *torture_smb2_durable_open_init(void)
{
struct torture_suite *suite =
@ -1819,3 +1867,18 @@ struct torture_suite *torture_smb2_durable_open_init(void)
return suite;
}
struct torture_suite *torture_smb2_durable_open_disconnect_init(void)
{
struct torture_suite *suite =
torture_suite_create(talloc_autofree_context(),
"durable-open-disconnect");
torture_suite_add_1smb2_test(suite, "open-oplock-disconnect",
test_durable_open_oplock_disconnect);
suite->description = talloc_strdup(suite,
"SMB2-DURABLE-OPEN-DISCONNECT tests");
return suite;
}

View File

@ -156,6 +156,7 @@ NTSTATUS torture_smb2_init(void)
torture_suite_add_suite(suite, torture_smb2_acls_init());
torture_suite_add_suite(suite, torture_smb2_notify_init());
torture_suite_add_suite(suite, torture_smb2_durable_open_init());
torture_suite_add_suite(suite, torture_smb2_durable_open_disconnect_init());
torture_suite_add_suite(suite, torture_smb2_durable_v2_open_init());
torture_suite_add_suite(suite, torture_smb2_dir_init());
torture_suite_add_suite(suite, torture_smb2_lease_init());