From 601642d92369ca9c572e40aa32b5b3b53eeb8dbf Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 26 Jan 2010 15:20:57 +0100 Subject: s4:smbtorture: add BASE-BENCH-HOLDOPEN This is useful for manual performance testing with a large number of share mode entries. metze --- source4/torture/basic/base.c | 1 + source4/torture/basic/misc.c | 63 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) (limited to 'source4/torture/basic') diff --git a/source4/torture/basic/base.c b/source4/torture/basic/base.c index 2c72257845..ed389fb9d5 100644 --- a/source4/torture/basic/base.c +++ b/source4/torture/basic/base.c @@ -1771,6 +1771,7 @@ NTSTATUS torture_base_init(void) torture_suite_add_1smb_test(suite, "MAXIMUM_ALLOWED", torture_maximum_allowed); torture_suite_add_simple_test(suite, "BENCH-HOLDCON", torture_holdcon); + torture_suite_add_1smb_test(suite, "BENCH-HOLDOPEN", torture_holdopen); torture_suite_add_simple_test(suite, "BENCH-READWRITE", run_benchrw); torture_suite_add_smb_multi_test(suite, "BENCH-TORTURE", run_torture); torture_suite_add_1smb_test(suite, "SCAN-PIPE_NUMBER", run_pipe_number); diff --git a/source4/torture/basic/misc.c b/source4/torture/basic/misc.c index a8ea88fb7f..ab79d798fc 100644 --- a/source4/torture/basic/misc.c +++ b/source4/torture/basic/misc.c @@ -230,6 +230,69 @@ bool torture_holdcon(struct torture_context *tctx) return true; } +/* + open a file N times on the server and just hold them open + used for testing performance when there are N file handles + alopenn + */ +bool torture_holdopen(struct torture_context *tctx, + struct smbcli_state *cli) +{ + int i, fnum; + const char *fname = "\\holdopen.dat"; + NTSTATUS status; + + smbcli_unlink(cli->tree, fname); + + fnum = smbcli_open(cli->tree, fname, O_RDWR|O_CREAT|O_EXCL, DENY_NONE); + if (fnum == -1) { + torture_comment(tctx, "open of %s failed (%s)\n", fname, smbcli_errstr(cli->tree)); + return false; + } + + smbcli_close(cli->tree, fnum); + + for (i=0;itree, tctx, &op); + if (!NT_STATUS_IS_OK(status)) { + torture_warning(tctx, "open %d failed\n", i); + continue; + } + + if (torture_setting_bool(tctx, "progress", true)) { + torture_comment(tctx, "opened %d file\r", i); + fflush(stdout); + } + } + + torture_comment(tctx, "\nStarting pings\n"); + + while (1) { + struct smb_echo ec; + + status = smb_raw_echo(cli->transport, &ec); + torture_comment(tctx, "."); + fflush(stdout); + sleep(15); + } + + return true; +} + /* test how many open files this server supports on the one socket */ -- cgit