aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/dropcount.c41
-rw-r--r--test/test.c201
2 files changed, 242 insertions, 0 deletions
diff --git a/test/dropcount.c b/test/dropcount.c
new file mode 100644
index 0000000..1345b73
--- /dev/null
+++ b/test/dropcount.c
@@ -0,0 +1,41 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int main( int argc, char* argv[] )
+{
+ FILE *fd;
+ char buffer[ 256 ];
+ int msg_index = 1, drop_count = 0;
+
+ if( argc < 2 )
+ {
+ puts( "required filename" );
+ return 1;
+ }
+
+ fd = fopen( argv[1], "r" );
+ if( !fd )
+ {
+ perror( "fopen" );
+ return 1;
+ }
+ while( fgets( buffer, sizeof(buffer), fd ) )
+ {
+ char *p;
+ int i;
+
+ p = buffer + strlen( buffer );
+ while( *p != ' ' ) p--;
+ i = strtoul( p, NULL, 10 );
+ while( msg_index < i )
+ {
+ msg_index++;
+ drop_count++;
+ }
+ msg_index++;
+ }
+ printf( "dropped %d message(s)\n", drop_count );
+ fclose( fd );
+ return 0;
+}
diff --git a/test/test.c b/test/test.c
new file mode 100644
index 0000000..fe6d90e
--- /dev/null
+++ b/test/test.c
@@ -0,0 +1,201 @@
+/*
+ * This test is based on logger.c.
+ *
+ * Copyright (c) 1983, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * 1999-02-22 Arkadiusz Mi¶kiewicz <misiek@pld.ORG.PL>
+ * - added Native Language Support
+ * Sun Mar 21 1999 - Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * - fixed strerr(errno) in gettext calls
+ * 2005-06-17 Alexander Yaworsky <yaworsky@mail.ru>
+ * - modified for native win32
+ */
+
+#include <errno.h>
+#include <getopt.h>
+#include <stdlib.h>
+#include <time.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <sys/types.h>
+#include <windows.h>
+
+#define SYSLOG_NAMES
+#include <syslog.h>
+
+#define _(s) s
+
+int decode (char *, CODE *);
+int pencode (char *);
+void usage (void);
+
+int
+main(int argc, char **argv) {
+ int ch;
+ int pri = LOG_NOTICE;
+ int burst = 1, sleep = 1;
+ int max_identical = 0;
+ int iterations = 1;
+ char *tag = NULL;
+ FILETIME current_time, max_time;
+ unsigned long long max_time_64;
+ int msg_index, total_sent;
+
+ while ((ch = getopt(argc, argv, "p:t:b:s:i:n:")) != -1)
+ switch((char)ch) {
+ case 'p': /* priority */
+ pri = pencode(optarg);
+ break;
+ case 't': /* tag */
+ tag = optarg;
+ break;
+ case 'b': /* message burst time in seconds */
+ burst = strtoul( optarg, NULL, 0 );
+ break;
+ case 's': /* sleep time in seconds */
+ sleep = strtoul( optarg, NULL, 0 );
+ break;
+ case 'i': /* max number of identical messages */
+ max_identical = strtoul( optarg, NULL, 0 );
+ break;
+ case 'n': /* number of test iterations */
+ iterations = strtoul( optarg, NULL, 0 );
+ break;
+ case '?':
+ default:
+ usage();
+ }
+
+ openlog(tag ? tag : "test", 0, 0);
+
+ msg_index = 1;
+ total_sent = 0;
+ for(;;) {
+ int messages_sent = 0;
+ int identic_count = 0, identic_index = 0;
+
+ GetSystemTimeAsFileTime( &current_time );
+ max_time = current_time;
+ max_time_64 = (((long long) max_time.dwHighDateTime) << 32) + (long long) max_time.dwLowDateTime;
+ max_time_64 += ((long long) burst) * (long long) 10000000;
+ max_time.dwHighDateTime = max_time_64 >> 32;
+ max_time.dwLowDateTime = max_time_64;
+ for(;;) {
+ int i;
+ for( i = 0; i < 100; i++ ) {
+ syslog(pri, "test message %d", msg_index );
+ messages_sent++;
+ total_sent++;
+ if( identic_index < identic_count )
+ identic_index++;
+ else {
+ msg_index++;
+ identic_index = 0;
+ if( identic_count < max_identical )
+ identic_count++;
+ else
+ identic_count = 0;
+ }
+ }
+ GetSystemTimeAsFileTime( &current_time );
+ if( CompareFileTime( &current_time, &max_time ) >= 0 )
+ break;
+ }
+ printf( "%d messages sent in burst, total %d messages sent\n", messages_sent, total_sent );
+ if( --iterations == 0 )
+ break;
+ printf( "%d iteration(s) remain; sleeping %d sec.\n", iterations, sleep );
+ Sleep( sleep * 1000 );
+ }
+ closelog();
+ exit(0);
+}
+
+/*
+ * Decode a symbolic name to a numeric value
+ */
+int
+pencode(s)
+ register char *s;
+{
+ char *save;
+ int fac, lev;
+
+ for (save = s; *s && *s != '.'; ++s);
+ if (*s) {
+ *s = '\0';
+ fac = decode(save, facilitynames);
+ if (fac < 0) {
+ (void)fprintf(stderr,
+ _("logger: unknown facility name: %s.\n"), save);
+ exit(1);
+ }
+ *s++ = '.';
+ }
+ else {
+ fac = LOG_USER;
+ s = save;
+ }
+ lev = decode(s, prioritynames);
+ if (lev < 0) {
+ (void)fprintf(stderr,
+ _("logger: unknown priority name: %s.\n"), save);
+ exit(1);
+ }
+ return ((lev & LOG_PRIMASK) | (fac & LOG_FACMASK));
+}
+
+int
+decode(name, codetab)
+ char *name;
+ CODE *codetab;
+{
+ register CODE *c;
+
+ if (isdigit(*name))
+ return (atoi(name));
+
+ for (c = codetab; c->c_name; c++)
+ if (!strcasecmp(name, c->c_name))
+ return (c->c_val);
+
+ return (-1);
+}
+
+void
+usage()
+{
+ (void)fprintf(stderr,
+ _("usage: test [-i] [-p pri] [-t tag] [-b burst time] [-s sleep time] [-i max identical] [-n iterations]\n"));
+ exit(1);
+}