summaryrefslogtreecommitdiff
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
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)
-rw-r--r--source4/torture/config.mk3
-rw-r--r--source4/torture/rpc/async_bind.c78
-rw-r--r--source4/torture/rpc/rpc.c1
3 files changed, 81 insertions, 1 deletions
diff --git a/source4/torture/config.mk b/source4/torture/config.mk
index 63a1280170..6064be9e30 100644
--- a/source4/torture/config.mk
+++ b/source4/torture/config.mk
@@ -146,7 +146,8 @@ OBJ_FILES = \
rpc/dssetup.o \
rpc/alter_context.o \
rpc/bench.o \
- rpc/rpc.o
+ rpc/rpc.o \
+ rpc/async_bind.o
PUBLIC_DEPENDENCIES = \
NDR_TABLE RPC_NDR_UNIXINFO RPC_NDR_SAMR RPC_NDR_WINREG RPC_NDR_INITSHUTDOWN \
RPC_NDR_OXIDRESOLVER RPC_NDR_EVENTLOG RPC_NDR_ECHO RPC_NDR_SVCCTL \
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;
}