[PATCH] fix smb2.replay.replay5 test to work with scale-out shares
Jeremy Allison
jra at samba.org
Thu Jan 21 22:20:25 UTC 2016
On Thu, Jan 21, 2016 at 09:40:11PM +0100, Michael Adam wrote:
> Before that it only worked against CA but non-SO shares.
> Review appreciated.
LGTM. Pushed.
> From cd2a44fc003c103ddd2d1155a3f766c33272d57d Mon Sep 17 00:00:00 2001
> From: Michael Adam <obnox at samba.org>
> Date: Fri, 15 Jan 2016 17:34:43 +0100
> Subject: [PATCH] s4-torture: let smb2.replay.replay5 test deal with scale out
> shares.
>
> Scale out shares don't hand out batch or exclusive oplocks.
> Hence no durable handles either.
> The important point here is that the behaviour tested
> does largely not rely on the fact that we had a durable
> handle but that we were using a durable handle create
> context to specify a CreateGUID.
>
> Pair-Programmed-With: Guenther Deschner <gd at samba.org>
>
> Signed-off-by: Michael Adam <obnox at samba.org>
> Signed-off-by: Guenther Deschner <gd at samba.org>
>
> ---
> source4/torture/smb2/replay.c | 16 +++++++++++++---
> 1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/source4/torture/smb2/replay.c b/source4/torture/smb2/replay.c
> index 61c947b..e203532 100644
> --- a/source4/torture/smb2/replay.c
> +++ b/source4/torture/smb2/replay.c
> @@ -875,9 +875,12 @@ static bool test_replay5(struct torture_context *tctx, struct smb2_tree *tree)
> bool ret = true;
> uint32_t share_capabilities;
> bool share_is_ca;
> + bool share_is_so;
> const char *fname = BASEDIR "\\replay5.dat";
> struct smb2_transport *transport = tree->session->transport;
> struct smbcli_options options = tree->session->transport->options;
> + uint8_t expect_oplock = smb2_util_oplock_level("b");
> + NTSTATUS expect_status = NT_STATUS_DUPLICATE_OBJECTID;
>
> if (smbXcli_conn_protocol(transport->conn) < PROTOCOL_SMB3_00) {
> torture_skip(tctx, "SMB 3.X Dialect family required for "
> @@ -885,11 +888,18 @@ static bool test_replay5(struct torture_context *tctx, struct smb2_tree *tree)
> }
>
> share_capabilities = smb2cli_tcon_capabilities(tree->smbXcli);
> +
> share_is_ca = share_capabilities & SMB2_SHARE_CAP_CONTINUOUS_AVAILABILITY;
> if (!share_is_ca) {
> torture_skip(tctx, "Persistent File Handles not supported");
> }
>
> + share_is_so = share_capabilities & SMB2_SHARE_CAP_SCALEOUT;
> + if (share_is_so) {
> + expect_oplock = smb2_util_oplock_level("s");
> + expect_status = NT_STATUS_FILE_NOT_AVAILABLE;
> + }
> +
> ZERO_STRUCT(break_info);
> break_info.tctx = tctx;
> transport->oplock.handler = torture_oplock_ack_handler;
> @@ -917,7 +927,7 @@ static bool test_replay5(struct torture_context *tctx, struct smb2_tree *tree)
> _h = io.out.file.handle;
> h = &_h;
> CHECK_CREATED(&io, CREATED, FILE_ATTRIBUTE_ARCHIVE);
> - CHECK_VAL(io.out.oplock_level, smb2_util_oplock_level("b"));
> + CHECK_VAL(io.out.oplock_level, expect_oplock);
> CHECK_VAL(io.out.durable_open, false);
> CHECK_VAL(io.out.durable_open_v2, true);
> CHECK_VAL(io.out.persistent_open, true);
> @@ -935,7 +945,7 @@ static bool test_replay5(struct torture_context *tctx, struct smb2_tree *tree)
>
> /* a re-open of a persistent handle causes an error */
> status = smb2_create(tree, mem_ctx, &io);
> - CHECK_STATUS(status, NT_STATUS_DUPLICATE_OBJECTID);
> + CHECK_STATUS(status, expect_status);
>
> /* SMB2_FLAGS_REPLAY_OPERATION must be set to open the Persistent Handle */
> smb2cli_session_start_replay(tree->session->smbXcli);
> @@ -945,7 +955,7 @@ static bool test_replay5(struct torture_context *tctx, struct smb2_tree *tree)
> CHECK_CREATED(&io, CREATED, FILE_ATTRIBUTE_ARCHIVE);
> CHECK_VAL(io.out.durable_open, false);
> CHECK_VAL(io.out.persistent_open, true);
> - CHECK_VAL(io.out.oplock_level, smb2_util_oplock_level("b"));
> + CHECK_VAL(io.out.oplock_level, expect_oplock);
> _h = io.out.file.handle;
> h = &_h;
>
> --
> 2.5.0
>
More information about the samba-technical
mailing list