s4 torture: Allow READ to be parameterized, add more readx tests
authorZachary Loafman <zachary.loafman@isilon.com>
Mon, 16 Nov 2009 21:13:26 +0000 (21:13 +0000)
committerTim Prouty <tprouty@samba.org>
Fri, 4 Dec 2009 04:21:22 +0000 (20:21 -0800)
Signed-off-by: Tim Prouty <tprouty@samba.org>
source4/torture/raw/read.c
source4/torture/smbtorture.c

index 3b48aac848b16daceef44dc312d9965c076f163b..90ca18d5b62bcedb0dd0d42218a51f292371bd44 100644 (file)
@@ -94,13 +94,18 @@ static bool test_read(struct torture_context *tctx, struct smbcli_state *cli)
 
        buf = talloc_zero_array(tctx, uint8_t, maxsize);
 
+       if (!torture_setting_bool(tctx, "read_support", true)) {
+               printf("server refuses to support READ\n");
+               return true;
+       }
+
        if (!torture_setup_dir(cli, BASEDIR)) {
                return false;
        }
 
        printf("Testing RAW_READ_READ\n");
        io.generic.level = RAW_READ_READ;
-       
+
        fnum = smbcli_open(cli->tree, fname, O_RDWR|O_CREAT, DENY_NONE);
        if (fnum == -1) {
                printf("Failed to create %s - %s\n", fname, smbcli_errstr(cli->tree));
@@ -478,7 +483,29 @@ static bool test_readx(struct torture_context *tctx, struct smbcli_state *cli)
        smbcli_write(cli->tree, fnum, 0, buf, 0, maxsize);
        memset(buf, 0, maxsize);
 
-       printf("Trying large read\n");
+       printf("Trying page sized read\n");
+       io.readx.in.offset = 0;
+       io.readx.in.mincnt = 0x1000;
+       io.readx.in.maxcnt = 0x1000;
+       status = smb_raw_read(cli->tree, &io);
+       CHECK_STATUS(status, NT_STATUS_OK);
+       CHECK_VALUE(io.readx.out.remaining, 0xFFFF);
+       CHECK_VALUE(io.readx.out.compaction_mode, 0);
+       CHECK_VALUE(io.readx.out.nread, io.readx.in.maxcnt);
+       CHECK_BUFFER(buf, seed, io.readx.out.nread);
+
+       printf("Trying page + 1 sized read (check alignment)\n");
+       io.readx.in.offset = 0;
+       io.readx.in.mincnt = 0x1001;
+       io.readx.in.maxcnt = 0x1001;
+       status = smb_raw_read(cli->tree, &io);
+       CHECK_STATUS(status, NT_STATUS_OK);
+       CHECK_VALUE(io.readx.out.remaining, 0xFFFF);
+       CHECK_VALUE(io.readx.out.compaction_mode, 0);
+       CHECK_VALUE(io.readx.out.nread, io.readx.in.maxcnt);
+       CHECK_BUFFER(buf, seed, io.readx.out.nread);
+
+       printf("Trying large read (UINT16_MAX)\n");
        io.readx.in.offset = 0;
        io.readx.in.mincnt = 0xFFFF;
        io.readx.in.maxcnt = 0xFFFF;
index 747911e5a9115de5e9a86ad0f341bfc3efb1cdb2..d02ec2961b987d7df2bdf4ac9d67725befcfdf52 100644 (file)
@@ -548,6 +548,7 @@ int main(int argc,char *argv[])
                    "true");
                lp_set_cmdline(cmdline_lp_ctx, "torture:deny_dos_support", "false");
                lp_set_cmdline(cmdline_lp_ctx, "torture:deny_fcb_support", "false");
+               lp_set_cmdline(cmdline_lp_ctx, "torture:read_support", "false");
        }
 
        if (max_runtime) {