r15394: Put initial code for testing async dcerpc binding. Currently
authorRafal Szczesniak <mimir@samba.org>
Tue, 2 May 2006 13:08:38 +0000 (13:08 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:05:32 +0000 (14:05 -0500)
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

source/torture/config.mk
source/torture/rpc/async_bind.c [new file with mode: 0644]
source/torture/rpc/rpc.c

index 63a128017027cefb7eb376d2fd3ef3e37d393c26..6064be9e3068540a3b7da5d07dfc4e1973c5dfa6 100644 (file)
@@ -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/source/torture/rpc/async_bind.c b/source/torture/rpc/async_bind.c
new file mode 100644 (file)
index 0000000..14a2146
--- /dev/null
@@ -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;
+}
index c22eb833a02ff862228f091ca5c97da72e188017..f5b2629e81dec5f48be60ac5c078e11aaa7e0bfe 100644 (file)
@@ -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;
 }