1/*
2   Unix SMB/CIFS implementation.
3   Copyright (C) Andrew Tridgell 2000
4
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 2 of the License, or
8   (at your option) any later version.
9
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.
14
15   You should have received a copy of the GNU General Public License
16   along with this program; if not, write to the Free Software
17   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18*/
19
20/*
21  test code for internal messaging
22 */
23
24#define NO_SYSLOG
25
26#include "includes.h"
27
28static int pong_count;
29
30/****************************************************************************
31a useful function for testing the message system
32****************************************************************************/
33void pong_message(int msg_type, pid_t src, void *buf, size_t len)
34{
35	pong_count++;
36}
37
38 int main(int argc, char *argv[])
39{
40	pid_t pid;
41	int i, n;
42	char buf[12];
43
44	setup_logging(argv[0],True);
45
46	lp_load(dyn_CONFIGFILE,False,False,False);
47
48	message_init();
49
50	if (argc != 3) {
51		fprintf(stderr, "%s: Usage - %s pid count\n", argv[0], argv[0]);
52		exit(1);
53	}
54
55	pid = atoi(argv[1]);
56	n = atoi(argv[2]);
57
58	message_register(MSG_PONG, pong_message);
59
60	for (i=0;i<n;i++) {
61		message_send_pid(pid, MSG_PING, NULL, 0, True);
62	}
63
64	while (pong_count < i) {
65		message_dispatch();
66		msleep(1);
67	}
68
69	/* Now test that the duplicate filtering code works. */
70	pong_count = 0;
71
72	safe_strcpy(buf, "1234567890", sizeof(buf)-1);
73
74	for (i=0;i<n;i++) {
75		message_send_pid(getpid(), MSG_PING, NULL, 0, False);
76		message_send_pid(getpid(), MSG_PING, buf, 11, False);
77	}
78
79	for (i=0;i<n;i++) {
80		message_dispatch();
81		msleep(1);
82	}
83
84	if (pong_count != 2) {
85		fprintf(stderr, "Duplicate filter failed (%d).\n", pong_count);
86		exit(1);
87	}
88
89	return (0);
90}
91
92