2 Unix SMB/CIFS implementation.
3 Copyright (C) Andrew Tridgell 2000
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
20 test code for internal messaging
26 static int pong_count
;
29 /****************************************************************************
30 a useful function for testing the message system
31 ****************************************************************************/
32 static void pong_message(struct messaging_context
*msg_ctx
,
41 int main(int argc
, char *argv
[])
43 struct tevent_context
*evt_ctx
;
44 struct messaging_context
*msg_ctx
;
52 setup_logging(argv
[0], DEBUG_STDOUT
);
54 lp_load_global(get_dyn_CONFIGFILE());
56 if (!(evt_ctx
= tevent_context_init(NULL
)) ||
57 !(msg_ctx
= messaging_init(NULL
, procid_self(), evt_ctx
))) {
58 fprintf(stderr
, "could not init messaging context\n");
63 fprintf(stderr
, "%s: Usage - %s pid count\n", argv
[0],
71 messaging_register(msg_ctx
, NULL
, MSG_PONG
, pong_message
);
74 messaging_send(msg_ctx
, pid_to_procid(pid
), MSG_PING
,
78 while (pong_count
< i
) {
79 ret
= tevent_loop_once(evt_ctx
);
85 /* Now test that the duplicate filtering code works. */
88 strlcpy(buf
, "1234567890", sizeof(buf
));
91 messaging_send(msg_ctx
, messaging_server_id(msg_ctx
), MSG_PING
,
93 messaging_send_buf(msg_ctx
, messaging_server_id(msg_ctx
),
94 MSG_PING
,(uint8
*)buf
, 11);
98 ret
= tevent_loop_once(evt_ctx
);
104 if (pong_count
!= 2) {
105 fprintf(stderr
, "Duplicate filter failed (%d).\n", pong_count
);
113 struct timeval tv
= timeval_current();
114 size_t timelimit
= n
;
115 size_t ping_count
= 0;
117 printf("Sending pings for %d seconds\n", (int)timelimit
);
118 while (timeval_elapsed(&tv
) < timelimit
) {
119 if(NT_STATUS_IS_OK(messaging_send_buf(
120 msg_ctx
, pid_to_procid(pid
),
124 if(NT_STATUS_IS_OK(messaging_send(
125 msg_ctx
, pid_to_procid(pid
),
126 MSG_PING
, &data_blob_null
)))
129 while (ping_count
> pong_count
+ 20) {
130 ret
= tevent_loop_once(evt_ctx
);
137 printf("waiting for %d remaining replies (done %d)\n",
138 (int)(ping_count
- pong_count
), pong_count
);
139 while (timeval_elapsed(&tv
) < 30 && pong_count
< ping_count
) {
140 ret
= tevent_loop_once(evt_ctx
);
146 if (ping_count
!= pong_count
) {
147 fprintf(stderr
, "ping test failed! received %d, sent "
148 "%d\n", pong_count
, (int)ping_count
);
151 printf("ping rate of %.0f messages/sec\n",
152 (ping_count
+pong_count
)/timeval_elapsed(&tv
));