r25234: make WINBIND-STRUCT-PING a benchmark test
[kai/samba.git] / source / torture / winbind / struct_based.c
1 /*
2    Unix SMB/CIFS implementation.
3    SMB torture tester - winbind struct based protocol
4    Copyright (C) Stefan Metzmacher 2007
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include "includes.h"
21 #include "torture/torture.h"
22 #include "torture/winbind/proto.h"
23 #include "nsswitch/winbind_client.h"
24
25 #define DO_STRUCT_REQ_REP(op,req,rep) do { \
26         NSS_STATUS _result; \
27         _result = winbindd_request_response(op, req, rep); \
28         torture_assert_int_equal(torture, _result, NSS_STATUS_SUCCESS, \
29                                  __STRING(op) "(struct based)"); \
30 } while (0)
31
32 static bool torture_winbind_struct_ping(struct torture_context *torture)
33 {
34         struct timeval tv = timeval_current();
35         int timelimit = torture_setting_int(torture, "timelimit", 5);
36         uint32_t total = 0;
37
38         torture_comment(torture,
39                         "Running WINBINDD_PING (struct based) for %d seconds\n",
40                         timelimit);
41
42         while (timeval_elapsed(&tv) < timelimit) {
43                 DO_STRUCT_REQ_REP(WINBINDD_PING, NULL, NULL);
44                 total++;
45         }
46
47         torture_comment(torture,
48                         "%u (%.1f/s) WINBINDD_PING (struct based)\n",
49                         total, total / timeval_elapsed(&tv));
50
51         return true;
52 }
53
54 struct torture_suite *torture_winbind_struct_init(void)
55 {
56         struct torture_suite *suite = torture_suite_create(talloc_autofree_context(), "STRUCT");
57
58         torture_suite_add_simple_test(suite, "PING", torture_winbind_struct_ping);
59
60         suite->description = talloc_strdup(suite, "WINBIND - struct based protocol tests");
61
62         return suite;
63 }