summaryrefslogtreecommitdiff
path: root/source4/torture/rpc
diff options
context:
space:
mode:
authorRafal Szczesniak <mimir@samba.org>2006-05-02 13:08:38 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:05:32 -0500
commitb369ffd1d50a79e0d9d901c3e6d159d9ce1762df (patch)
treeea3452e70567db445f539ef3dc9b09c8580d740d /source4/torture/rpc
parentce3293c5b6864dd4e04638bf819cf0269b761fce (diff)
downloadsamba-b369ffd1d50a79e0d9d901c3e6d159d9ce1762df.tar.gz
samba-b369ffd1d50a79e0d9d901c3e6d159d9ce1762df.tar.bz2
samba-b369ffd1d50a79e0d9d901c3e6d159d9ce1762df.zip
r15394: Put initial code for testing async dcerpc binding. Currently
it only tests multiple simultaneous bind requests using transport specified in command line. It will be interesting to use various transports at the same time and test it agains windows servers... rafal (This used to be commit 7e4756116e59f9a0599a80fb5ac06118817f4326)
Diffstat (limited to 'source4/torture/rpc')
-rw-r--r--source4/torture/rpc/async_bind.c78
-rw-r--r--source4/torture/rpc/rpc.c1
2 files changed, 79 insertions, 0 deletions
diff --git a/source4/torture/rpc/async_bind.c b/source4/torture/rpc/async_bind.c
new file mode 100644
index 0000000000..14a2146e5e
--- /dev/null
+++ b/source4/torture/rpc/async_bind.c
@@ -0,0 +1,78 @@
+/*
+ Unix SMB/CIFS implementation.
+
+ dcerpc torture tests
+
+ Copyright (C) Andrew Tridgell 2003
+ Copyright (C) Rafal Szczesniak 2006
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "torture/torture.h"
+#include "lib/events/events.h"
+#include "librpc/gen_ndr/ndr_lsa.h"
+#include "lib/cmdline/popt_common.h"
+#include "librpc/rpc/dcerpc.h"
+#include "torture/rpc/rpc.h"
+
+/*
+ This test initiates multiple rpc bind requests and verifies
+ whether all of them are served.
+*/
+
+
+BOOL torture_async_bind(struct torture_context *torture)
+{
+ NTSTATUS status;
+ TALLOC_CTX *mem_ctx;
+ struct event_context *evt_ctx;
+ int i;
+ const char *binding_string;
+ struct cli_credentials *creds;
+
+#define ASYNC_COUNT 100
+ struct composite_context *bind_req[ASYNC_COUNT];
+ struct dcerpc_pipe *pipe[ASYNC_COUNT];
+ struct dcerpc_interface_table *table[ASYNC_COUNT];
+
+ binding_string = lp_parm_string(-1, "torture", "binding");
+
+ /* talloc context */
+ mem_ctx = talloc_init("torture_async_bind");
+ if (mem_ctx == NULL) return False;
+
+ /* event context */
+ evt_ctx = event_context_init(mem_ctx);
+ if (evt_ctx == NULL) return False;
+
+ /* credentials */
+ creds = cmdline_credentials;
+
+ for (i = 0; i < ASYNC_COUNT; i++) {
+ table[i] = &dcerpc_table_lsarpc;
+ bind_req[i] = dcerpc_pipe_connect_send(mem_ctx, &pipe[i], binding_string,
+ table[i], creds, evt_ctx);
+ }
+
+ for (i = 0; i < ASYNC_COUNT; i++) {
+ status = dcerpc_pipe_connect_recv(bind_req[i], mem_ctx, &pipe[i]);
+ if (!NT_STATUS_IS_OK(status)) return False;
+ }
+
+ talloc_free(mem_ctx);
+ return True;
+}
diff --git a/source4/torture/rpc/rpc.c b/source4/torture/rpc/rpc.c
index c22eb833a0..f5b2629e81 100644
--- a/source4/torture/rpc/rpc.c
+++ b/source4/torture/rpc/rpc.c
@@ -130,6 +130,7 @@ NTSTATUS torture_rpc_init(void)
register_torture_op("RPC-JOIN", torture_rpc_join, 0);
register_torture_op("RPC-DSSYNC", torture_rpc_dssync, 0);
register_torture_op("BENCH-RPC", torture_bench_rpc, 0);
+ register_torture_op("RPC-ASYNCBIND", torture_async_bind, 0);
return NT_STATUS_OK;
}