diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/dropcount.c | 41 | ||||
-rw-r--r-- | test/test.c | 201 |
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( ¤t_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( ¤t_time ); + if( CompareFileTime( ¤t_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); +} |