diff options
Diffstat (limited to 'libevent/test')
| -rw-r--r-- | libevent/test/Makefile.am | 31 | ||||
| -rw-r--r-- | libevent/test/bench.c | 181 | ||||
| -rw-r--r-- | libevent/test/regress.c | 923 | ||||
| -rw-r--r-- | libevent/test/regress.h | 43 | ||||
| -rw-r--r-- | libevent/test/regress.rpc | 17 | ||||
| -rw-r--r-- | libevent/test/regress_dns.c | 144 | ||||
| -rw-r--r-- | libevent/test/regress_http.c | 426 | ||||
| -rw-r--r-- | libevent/test/test-eof.c | 68 | ||||
| -rw-r--r-- | libevent/test/test-init.c | 27 | ||||
| -rw-r--r-- | libevent/test/test-time.c | 68 | ||||
| -rw-r--r-- | libevent/test/test-weof.c | 68 | ||||
| -rwxr-xr-x | libevent/test/test.sh | 91 |
12 files changed, 0 insertions, 2087 deletions
diff --git a/libevent/test/Makefile.am b/libevent/test/Makefile.am deleted file mode 100644 index 66f0e31..0000000 --- a/libevent/test/Makefile.am +++ /dev/null @@ -1,31 +0,0 @@ -AUTOMAKE_OPTIONS = foreign no-dependencies - -LDADD = ../libevent.la -CPPFPLAGS = -I.. -CFLAGS = -I../compat @CFLAGS@ - -EXTRA_DIST = regress.rpc - -noinst_PROGRAMS = test-init test-eof test-weof test-time regress bench - -BUILT_SOURCES = regress.gen.c regress.gen.h -test_init_SOURCES = test-init.c -test_eof_SOURCES = test-eof.c -test_weof_SOURCES = test-weof.c -test_time_SOURCES = test-time.c -regress_SOURCES = regress.c regress.h regress_http.c regress_dns.c \ - regress.gen.c regress.gen.h -bench_SOURCES = bench.c - -regress.gen.c regress.gen.h: regress.rpc - ../event_rpcgen.py regress.rpc || echo "No Python installed" - -DISTCLEANFILES = *~ -CLEANFILES = regress.gen.h regress.gen.c - -test: test-init test-eof test-weof test-time regress - -verify: test - @./test.sh - -bench test-init test-eof test-weof test-time: ../libevent.la diff --git a/libevent/test/bench.c b/libevent/test/bench.c deleted file mode 100644 index 61b0502..0000000 --- a/libevent/test/bench.c +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright 2003 Niels Provos <provos@citi.umich.edu> - * 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. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - * - * - * Mon 03/10/2003 - Modified by Davide Libenzi <davidel@xmailserver.org> - * - * Added chain event propagation to improve the sensitivity of - * the measure respect to the event loop efficency. - * - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/time.h> -#include <sys/socket.h> -#include <sys/signal.h> -#include <sys/resource.h> -#include <fcntl.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> -#include <errno.h> - -#include <event.h> - - -static int count, writes, fired; -static int *pipes; -static int num_pipes, num_active, num_writes; -static struct event *events; - - - -void -read_cb(int fd, short which, void *arg) -{ - int idx = (int) arg, widx = idx + 1; - u_char ch; - - count += read(fd, &ch, sizeof(ch)); - if (writes) { - if (widx >= num_pipes) - widx -= num_pipes; - write(pipes[2 * widx + 1], "e", 1); - writes--; - fired++; - } -} - -struct timeval * -run_once(void) -{ - int *cp, i, space; - static struct timeval ts, te; - - for (cp = pipes, i = 0; i < num_pipes; i++, cp += 2) { - event_del(&events[i]); - event_set(&events[i], cp[0], EV_READ | EV_PERSIST, read_cb, (void *) i); - event_add(&events[i], NULL); - } - - event_loop(EVLOOP_ONCE | EVLOOP_NONBLOCK); - - fired = 0; - space = num_pipes / num_active; - space = space * 2; - for (i = 0; i < num_active; i++, fired++) - write(pipes[i * space + 1], "e", 1); - - count = 0; - writes = num_writes; - { int xcount = 0; - gettimeofday(&ts, NULL); - do { - event_loop(EVLOOP_ONCE | EVLOOP_NONBLOCK); - xcount++; - } while (count != fired); - gettimeofday(&te, NULL); - - if (xcount != count) fprintf(stderr, "Xcount: %d, Rcount: %d\n", xcount, count); - } - - timersub(&te, &ts, &te); - - return (&te); -} - -int -main (int argc, char **argv) -{ - struct rlimit rl; - int i, c; - struct timeval *tv; - int *cp; - extern char *optarg; - - num_pipes = 100; - num_active = 1; - num_writes = num_pipes; - while ((c = getopt(argc, argv, "n:a:w:")) != -1) { - switch (c) { - case 'n': - num_pipes = atoi(optarg); - break; - case 'a': - num_active = atoi(optarg); - break; - case 'w': - num_writes = atoi(optarg); - break; - default: - fprintf(stderr, "Illegal argument \"%c\"\n", c); - exit(1); - } - } - - rl.rlim_cur = rl.rlim_max = num_pipes * 2 + 50; - if (setrlimit(RLIMIT_NOFILE, &rl) == -1) { - perror("setrlimit"); - exit(1); - } - - events = calloc(num_pipes, sizeof(struct event)); - pipes = calloc(num_pipes * 2, sizeof(int)); - if (events == NULL || pipes == NULL) { - perror("malloc"); - exit(1); - } - - event_init(); - - for (cp = pipes, i = 0; i < num_pipes; i++, cp += 2) { -#ifdef USE_PIPES - if (pipe(cp) == -1) { -#else - if (socketpair(AF_UNIX, SOCK_STREAM, 0, cp) == -1) { -#endif - perror("pipe"); - exit(1); - } - } - - for (i = 0; i < 25; i++) { - tv = run_once(); - if (tv == NULL) - exit(1); - fprintf(stdout, "%ld\n", - tv->tv_sec * 1000000L + tv->tv_usec); - } - - exit(0); -} diff --git a/libevent/test/regress.c b/libevent/test/regress.c deleted file mode 100644 index d0f135c..0000000 --- a/libevent/test/regress.c +++ /dev/null @@ -1,923 +0,0 @@ -/* - * Copyright (c) 2003, 2004 Niels Provos <provos@citi.umich.edu> - * 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. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - */ - -#ifdef WIN32 -#include <winsock2.h> -#include <windows.h> -#endif - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <sys/types.h> -#include <sys/stat.h> -#ifdef HAVE_SYS_TIME_H -#include <sys/time.h> -#endif -#include <sys/queue.h> -#ifndef WIN32 -#include <sys/socket.h> -#include <sys/signal.h> -#include <unistd.h> -#endif -#include <netdb.h> -#include <fcntl.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> - -#include "event.h" -#include "log.h" - -#include "regress.h" -#include "regress.gen.h" - -int pair[2]; -int test_ok; -static int called; -static char wbuf[4096]; -static char rbuf[4096]; -static int woff; -static int roff; -static int usepersist; -static struct timeval tset; -static struct timeval tcalled; -static struct event_base *event_base; - -#define TEST1 "this is a test" -#define SECONDS 1 - -void -simple_read_cb(int fd, short event, void *arg) -{ - char buf[256]; - int len; - - len = read(fd, buf, sizeof(buf)); - - if (len) { - if (!called) { - if (event_add(arg, NULL) == -1) - exit(1); - } - } else if (called == 1) - test_ok = 1; - - called++; -} - -void -simple_write_cb(int fd, short event, void *arg) -{ - int len; - - len = write(fd, TEST1, strlen(TEST1) + 1); - if (len == -1) - test_ok = 0; - else - test_ok = 1; -} - -void -multiple_write_cb(int fd, short event, void *arg) -{ - struct event *ev = arg; - int len; - - len = 128; - if (woff + len >= sizeof(wbuf)) - len = sizeof(wbuf) - woff; - - len = write(fd, wbuf + woff, len); - if (len == -1) { - fprintf(stderr, "%s: write\n", __func__); - if (usepersist) - event_del(ev); - return; - } - - woff += len; - - if (woff >= sizeof(wbuf)) { - shutdown(fd, SHUT_WR); - if (usepersist) - event_del(ev); - return; - } - - if (!usepersist) { - if (event_add(ev, NULL) == -1) - exit(1); - } -} - -void -multiple_read_cb(int fd, short event, void *arg) -{ - struct event *ev = arg; - int len; - - len = read(fd, rbuf + roff, sizeof(rbuf) - roff); - if (len == -1) - fprintf(stderr, "%s: read\n", __func__); - if (len <= 0) { - if (usepersist) - event_del(ev); - return; - } - - roff += len; - if (!usepersist) { - if (event_add(ev, NULL) == -1) - exit(1); - } -} - -void -timeout_cb(int fd, short event, void *arg) -{ - struct timeval tv; - int diff; - - gettimeofday(&tcalled, NULL); - if (timercmp(&tcalled, &tset, >)) - timersub(&tcalled, &tset, &tv); - else - timersub(&tset, &tcalled, &tv); - - diff = tv.tv_sec*1000 + tv.tv_usec/1000 - SECONDS * 1000; - if (diff < 0) - diff = -diff; - - if (diff < 100) - test_ok = 1; -} - -void -signal_cb(int fd, short event, void *arg) -{ - struct event *ev = arg; - - signal_del(ev); - test_ok = 1; -} - -struct both { - struct event ev; - int nread; -}; - -void -combined_read_cb(int fd, short event, void *arg) -{ - struct both *both = arg; - char buf[128]; - int len; - - len = read(fd, buf, sizeof(buf)); - if (len == -1) - fprintf(stderr, "%s: read\n", __func__); - if (len <= 0) - return; - - both->nread += len; - if (event_add(&both->ev, NULL) == -1) - exit(1); -} - -void -combined_write_cb(int fd, short event, void *arg) -{ - struct both *both = arg; - char buf[128]; - int len; - - len = sizeof(buf); - if (len > both->nread) - len = both->nread; - - len = write(fd, buf, len); - if (len == -1) - fprintf(stderr, "%s: write\n", __func__); - if (len <= 0) { - shutdown(fd, SHUT_WR); - return; - } - - both->nread -= len; - if (event_add(&both->ev, NULL) == -1) - exit(1); -} - -/* Test infrastructure */ - -int -setup_test(char *name) -{ - - fprintf(stdout, "%s", name); - - if (socketpair(AF_UNIX, SOCK_STREAM, 0, pair) == -1) { - fprintf(stderr, "%s: socketpair\n", __func__); - exit(1); - } - -#ifdef HAVE_FCNTL - if (fcntl(pair[0], F_SETFL, O_NONBLOCK) == -1) - fprintf(stderr, "fcntl(O_NONBLOCK)"); - - if (fcntl(pair[1], F_SETFL, O_NONBLOCK) == -1) - fprintf(stderr, "fcntl(O_NONBLOCK)"); -#endif - - test_ok = 0; - called = 0; - return (0); -} - -int -cleanup_test(void) -{ -#ifndef WIN32 - close(pair[0]); - close(pair[1]); -#else - CloseHandle((HANDLE)pair[0]); - CloseHandle((HANDLE)pair[1]); -#endif - if (test_ok) - fprintf(stdout, "OK\n"); - else { - fprintf(stdout, "FAILED\n"); - exit(1); - } - - return (0); -} - -void -test_simpleread(void) -{ - struct event ev; - - /* Very simple read test */ - setup_test("Simple read: "); - - write(pair[0], TEST1, strlen(TEST1)+1); - shutdown(pair[0], SHUT_WR); - - event_set(&ev, pair[1], EV_READ, simple_read_cb, &ev); - if (event_add(&ev, NULL) == -1) - exit(1); - event_dispatch(); - - cleanup_test(); -} - -void -test_simplewrite(void) -{ - struct event ev; - - /* Very simple write test */ - setup_test("Simple write: "); - - event_set(&ev, pair[0], EV_WRITE, simple_write_cb, &ev); - if (event_add(&ev, NULL) == -1) - exit(1); - event_dispatch(); - - cleanup_test(); -} - -void -test_multiple(void) -{ - struct event ev, ev2; - int i; - - /* Multiple read and write test */ - setup_test("Multiple read/write: "); - memset(rbuf, 0, sizeof(rbuf)); - for (i = 0; i < sizeof(wbuf); i++) - wbuf[i] = i; - - roff = woff = 0; - usepersist = 0; - - event_set(&ev, pair[0], EV_WRITE, multiple_write_cb, &ev); - if (event_add(&ev, NULL) == -1) - exit(1); - event_set(&ev2, pair[1], EV_READ, multiple_read_cb, &ev2); - if (event_add(&ev2, NULL) == -1) - exit(1); - event_dispatch(); - - if (roff == woff) - test_ok = memcmp(rbuf, wbuf, sizeof(wbuf)) == 0; - - cleanup_test(); -} - -void -test_persistent(void) -{ - struct event ev, ev2; - int i; - - /* Multiple read and write test with persist */ - setup_test("Persist read/write: "); - memset(rbuf, 0, sizeof(rbuf)); - for (i = 0; i < sizeof(wbuf); i++) - wbuf[i] = i; - - roff = woff = 0; - usepersist = 1; - - event_set(&ev, pair[0], EV_WRITE|EV_PERSIST, multiple_write_cb, &ev); - if (event_add(&ev, NULL) == -1) - exit(1); - event_set(&ev2, pair[1], EV_READ|EV_PERSIST, multiple_read_cb, &ev2); - if (event_add(&ev2, NULL) == -1) - exit(1); - event_dispatch(); - - if (roff == woff) - test_ok = memcmp(rbuf, wbuf, sizeof(wbuf)) == 0; - - cleanup_test(); -} - -void -test_combined(void) -{ - struct both r1, r2, w1, w2; - - setup_test("Combined read/write: "); - memset(&r1, 0, sizeof(r1)); - memset(&r2, 0, sizeof(r2)); - memset(&w1, 0, sizeof(w1)); - memset(&w2, 0, sizeof(w2)); - - w1.nread = 4096; - w2.nread = 8192; - - event_set(&r1.ev, pair[0], EV_READ, combined_read_cb, &r1); - event_set(&w1.ev, pair[0], EV_WRITE, combined_write_cb, &w1); - event_set(&r2.ev, pair[1], EV_READ, combined_read_cb, &r2); - event_set(&w2.ev, pair[1], EV_WRITE, combined_write_cb, &w2); - if (event_add(&r1.ev, NULL) == -1) - exit(1); - if (event_add(&w1.ev, NULL)) - exit(1); - if (event_add(&r2.ev, NULL)) - exit(1); - if (event_add(&w2.ev, NULL)) - exit(1); - - event_dispatch(); - - if (r1.nread == 8192 && r2.nread == 4096) - test_ok = 1; - - cleanup_test(); -} - -void -test_simpletimeout(void) -{ - struct timeval tv; - struct event ev; - - setup_test("Simple timeout: "); - - tv.tv_usec = 0; - tv.tv_sec = SECONDS; - evtimer_set(&ev, timeout_cb, NULL); - evtimer_add(&ev, &tv); - - gettimeofday(&tset, NULL); - event_dispatch(); - - cleanup_test(); -} - -#ifndef WIN32 -void -test_simplesignal(void) -{ - struct event ev; - struct itimerval itv; - - setup_test("Simple signal: "); - signal_set(&ev, SIGALRM, signal_cb, &ev); - signal_add(&ev, NULL); - - memset(&itv, 0, sizeof(itv)); - itv.it_value.tv_sec = 1; - if (setitimer(ITIMER_REAL, &itv, NULL) == -1) - goto skip_simplesignal; - - event_dispatch(); - skip_simplesignal: - if (signal_del(&ev) == -1) - test_ok = 0; - - cleanup_test(); -} -#endif - -void -test_loopexit(void) -{ - struct timeval tv, tv_start, tv_end; - struct event ev; - - setup_test("Loop exit: "); - - tv.tv_usec = 0; - tv.tv_sec = 60*60*24; - evtimer_set(&ev, timeout_cb, NULL); - evtimer_add(&ev, &tv); - - tv.tv_usec = 0; - tv.tv_sec = 1; - event_loopexit(&tv); - - gettimeofday(&tv_start, NULL); - event_dispatch(); - gettimeofday(&tv_end, NULL); - timersub(&tv_end, &tv_start, &tv_end); - - evtimer_del(&ev); - - if (tv.tv_sec < 2) - test_ok = 1; - - cleanup_test(); -} - -void -test_evbuffer(void) { - setup_test("Evbuffer: "); - - struct evbuffer *evb = evbuffer_new(); - - evbuffer_add_printf(evb, "%s/%d", "hello", 1); - - if (EVBUFFER_LENGTH(evb) == 7 && - strcmp(EVBUFFER_DATA(evb), "hello/1") == 0) - test_ok = 1; - - cleanup_test(); -} - -void -readcb(struct bufferevent *bev, void *arg) -{ - if (EVBUFFER_LENGTH(bev->input) == 8333) { - bufferevent_disable(bev, EV_READ); - test_ok++; - } -} - -void -writecb(struct bufferevent *bev, void *arg) -{ - if (EVBUFFER_LENGTH(bev->output) == 0) - test_ok++; -} - -void -errorcb(struct bufferevent *bev, short what, void *arg) -{ - test_ok = -2; -} - -void -test_bufferevent(void) -{ - struct bufferevent *bev1, *bev2; - char buffer[8333]; - int i; - - setup_test("Bufferevent: "); - - bev1 = bufferevent_new(pair[0], readcb, writecb, errorcb, NULL); - bev2 = bufferevent_new(pair[1], readcb, writecb, errorcb, NULL); - - bufferevent_disable(bev1, EV_READ); - bufferevent_enable(bev2, EV_READ); - - for (i = 0; i < sizeof(buffer); i++) - buffer[0] = i; - - bufferevent_write(bev1, buffer, sizeof(buffer)); - - event_dispatch(); - - bufferevent_free(bev1); - bufferevent_free(bev2); - - if (test_ok != 2) - test_ok = 0; - - cleanup_test(); -} - -struct test_pri_event { - struct event ev; - int count; -}; - -void -test_priorities_cb(int fd, short what, void *arg) -{ - struct test_pri_event *pri = arg; - struct timeval tv; - - if (pri->count == 3) { - event_loopexit(NULL); - return; - } - - pri->count++; - - timerclear(&tv); - event_add(&pri->ev, &tv); -} - -void -test_priorities(int npriorities) -{ - char buf[32]; - struct test_pri_event one, two; - struct timeval tv; - - snprintf(buf, sizeof(buf), "Priorities %d: ", npriorities); - setup_test(buf); - - event_base_priority_init(event_base, npriorities); - - memset(&one, 0, sizeof(one)); - memset(&two, 0, sizeof(two)); - - timeout_set(&one.ev, test_priorities_cb, &one); - if (event_priority_set(&one.ev, 0) == -1) { - fprintf(stderr, "%s: failed to set priority", __func__); - exit(1); - } - - timeout_set(&two.ev, test_priorities_cb, &two); - if (event_priority_set(&two.ev, npriorities - 1) == -1) { - fprintf(stderr, "%s: failed to set priority", __func__); - exit(1); - } - - timerclear(&tv); - - if (event_add(&one.ev, &tv) == -1) - exit(1); - if (event_add(&two.ev, &tv) == -1) - exit(1); - - event_dispatch(); - - event_del(&one.ev); - event_del(&two.ev); - - if (npriorities == 1) { - if (one.count == 3 && two.count == 3) - test_ok = 1; - } else if (npriorities == 2) { - /* Two is called once because event_loopexit is priority 1 */ - if (one.count == 3 && two.count == 1) - test_ok = 1; - } else { - if (one.count == 3 && two.count == 0) - test_ok = 1; - } - - cleanup_test(); -} - -static void -test_multiple_cb(int fd, short event, void *arg) -{ - if (event & EV_READ) - test_ok |= 1; - else if (event & EV_WRITE) - test_ok |= 2; -} - -void -test_multiple_events_for_same_fd(void) -{ - struct event e1, e2; - - setup_test("Multiple events for same fd: "); - - event_set(&e1, pair[0], EV_READ, test_multiple_cb, NULL); - event_add(&e1, NULL); - event_set(&e2, pair[0], EV_WRITE, test_multiple_cb, NULL); - event_add(&e2, NULL); - event_loop(EVLOOP_ONCE); - event_del(&e2); - write(pair[1], TEST1, strlen(TEST1)+1); - event_loop(EVLOOP_ONCE); - event_del(&e1); - - if (test_ok != 3) - test_ok = 0; - - cleanup_test(); -} - -int decode_int(u_int32_t *pnumber, struct evbuffer *evbuf); - -void -read_once_cb(int fd, short event, void *arg) -{ - char buf[256]; - int len; - - len = read(fd, buf, sizeof(buf)); - - if (called) { - test_ok = 0; - } else if (len) { - /* Assumes global pair[0] can be used for writing */ - write(pair[0], TEST1, strlen(TEST1)+1); - test_ok = 1; - } - - called++; -} - -void -test_want_only_once(void) -{ - struct event ev; - struct timeval tv; - - /* Very simple read test */ - setup_test("Want read only once: "); - - write(pair[0], TEST1, strlen(TEST1)+1); - - /* Setup the loop termination */ - timerclear(&tv); - tv.tv_sec = 1; - event_loopexit(&tv); - - event_set(&ev, pair[1], EV_READ, read_once_cb, &ev); - if (event_add(&ev, NULL) == -1) - exit(1); - event_dispatch(); - - cleanup_test(); -} - -#define TEST_MAX_INT 6 - -void -evtag_int_test(void) -{ - struct evbuffer *tmp = evbuffer_new(); - u_int32_t integers[TEST_MAX_INT] = { - 0xaf0, 0x1000, 0x1, 0xdeadbeef, 0x00, 0xbef000 - }; - u_int32_t integer; - int i; - - for (i = 0; i < TEST_MAX_INT; i++) { - int oldlen, newlen; - oldlen = EVBUFFER_LENGTH(tmp); - encode_int(tmp, integers[i]); - newlen = EVBUFFER_LENGTH(tmp); - fprintf(stdout, "\t\tencoded 0x%08x with %d bytes\n", - integers[i], newlen - oldlen); - } - - for (i = 0; i < TEST_MAX_INT; i++) { - if (decode_int(&integer, tmp) == -1) { - fprintf(stderr, "decode %d failed", i); - exit(1); - } - if (integer != integers[i]) { - fprintf(stderr, "got %x, wanted %x", - integer, integers[i]); - exit(1); - } - } - - if (EVBUFFER_LENGTH(tmp) != 0) { - fprintf(stderr, "trailing data"); - exit(1); - } - evbuffer_free(tmp); - - fprintf(stdout, "\t%s: OK\n", __func__); -} - -void -evtag_fuzz() -{ - u_char buffer[4096]; - struct evbuffer *tmp = evbuffer_new(); - struct timeval tv; - int i, j; - - int not_failed = 0; - for (j = 0; j < 100; j++) { - for (i = 0; i < sizeof(buffer); i++) - buffer[i] = rand(); - evbuffer_drain(tmp, -1); - evbuffer_add(tmp, buffer, sizeof(buffer)); - - if (evtag_unmarshal_timeval(tmp, 0, &tv) != -1) - not_failed++; - } - - /* The majority of decodes should fail */ - if (not_failed >= 10) { - fprintf(stderr, "evtag_unmarshal should have failed"); - exit(1); - } - - /* Now insert some corruption into the tag length field */ - evbuffer_drain(tmp, -1); - timerclear(&tv); - tv.tv_sec = 1; - evtag_marshal_timeval(tmp, 0, &tv); - evbuffer_add(tmp, buffer, sizeof(buffer)); - - EVBUFFER_DATA(tmp)[1] = 0xff; - if (evtag_unmarshal_timeval(tmp, 0, &tv) != -1) { - fprintf(stderr, "evtag_unmarshal_timeval should have failed"); - exit(1); - } - - evbuffer_free(tmp); - - fprintf(stdout, "\t%s: OK\n", __func__); -} - -void -evtag_test(void) -{ - fprintf(stdout, "Testing Tagging:\n"); - - evtag_init(); - evtag_int_test(); - evtag_fuzz(); - - fprintf(stdout, "OK\n"); -} - -void -rpc_test(void) -{ - struct msg *msg, *msg2; - struct kill *kill; - struct run *run; - struct evbuffer *tmp = evbuffer_new(); - int i; - - fprintf(stdout, "Testing RPC: "); - - msg = msg_new(); - EVTAG_ASSIGN(msg, from_name, "niels"); - EVTAG_ASSIGN(msg, to_name, "phoenix"); - - if (EVTAG_GET(msg, kill, &kill) == -1) { - fprintf(stderr, "Failed to set kill message.\n"); - exit(1); - } - - EVTAG_ASSIGN(kill, weapon, "feather"); - EVTAG_ASSIGN(kill, action, "tickle"); - - for (i = 0; i < 3; ++i) { - run = EVTAG_ADD(msg, run); - if (run == NULL) { - fprintf(stderr, "Failed to add run message.\n"); - exit(1); - } - EVTAG_ASSIGN(run, how, "very fast"); - } - - if (msg_complete(msg) == -1) { - fprintf(stderr, "Failed to make complete message.\n"); - exit(1); - } - - evtag_marshal_msg(tmp, 0, msg); - - msg2 = msg_new(); - if (evtag_unmarshal_msg(tmp, 0, msg2) == -1) { - fprintf(stderr, "Failed to unmarshal message.\n"); - exit(1); - } - - if (!EVTAG_HAS(msg2, from_name) || - !EVTAG_HAS(msg2, to_name) || - !EVTAG_HAS(msg2, kill)) { - fprintf(stderr, "Missing data structures.\n"); - exit(1); - } - - if (EVTAG_LEN(msg2, run) != 3) { - fprintf(stderr, "Wrong number of run messages.\n"); - exit(1); - } - - msg_free(msg); - msg_free(msg2); - - fprintf(stdout, "OK\n"); -} - -int -main (int argc, char **argv) -{ -#ifdef WIN32 - WORD wVersionRequested; - WSADATA wsaData; - int err; - - wVersionRequested = MAKEWORD( 2, 2 ); - - err = WSAStartup( wVersionRequested, &wsaData ); -#endif - - setvbuf(stdout, NULL, _IONBF, 0); - - /* Initalize the event library */ - event_base = event_init(); - - http_suite(); - - dns_suite(); - - test_simpleread(); - - test_simplewrite(); - - test_multiple(); - - test_persistent(); - - test_combined(); - - test_simpletimeout(); -#ifndef WIN32 - test_simplesignal(); -#endif - test_loopexit(); - - test_evbuffer(); - - test_bufferevent(); - - test_priorities(1); - test_priorities(2); - test_priorities(3); - - test_multiple_events_for_same_fd(); - - test_want_only_once(); - - evtag_test(); - - rpc_test(); - - return (0); -} - diff --git a/libevent/test/regress.h b/libevent/test/regress.h deleted file mode 100644 index 296c93c..0000000 --- a/libevent/test/regress.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2000-2004 Niels Provos <provos@citi.umich.edu> - * 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. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - */ -#ifndef _REGRESS_H_ -#define _REGRESS_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -void http_suite(void); -void http_basic_test(void); - -void dns_suite(void); - -#ifdef __cplusplus -} -#endif - -#endif /* _REGRESS_H_ */ diff --git a/libevent/test/regress.rpc b/libevent/test/regress.rpc deleted file mode 100644 index 7bc6b75..0000000 --- a/libevent/test/regress.rpc +++ /dev/null @@ -1,17 +0,0 @@ -/* tests data packing and unpacking */ - -struct msg { - string from_name = 1; - string to_name = 2; - optional struct[kill] kill = 3; - array struct[run] run = 4; -} - -struct kill { - string weapon = 1; - string action = 2; -} - -struct run { - string how = 1; -} diff --git a/libevent/test/regress_dns.c b/libevent/test/regress_dns.c deleted file mode 100644 index ce94187..0000000 --- a/libevent/test/regress_dns.c +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (c) 2003-2006 Niels Provos <provos@citi.umich.edu> - * 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. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - */ - -#ifdef WIN32 -#include <winsock2.h> -#include <windows.h> -#endif - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <sys/types.h> -#include <sys/stat.h> -#ifdef HAVE_SYS_TIME_H -#include <sys/time.h> -#endif -#include <sys/queue.h> -#ifndef WIN32 -#include <sys/socket.h> -#include <sys/signal.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <unistd.h> -#endif -#include <netdb.h> -#include <fcntl.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> - -#include "event.h" -#include "evdns.h" -#include "log.h" - -static int dns_ok = 0; - -void -dns_gethostbyname_cb(int result, char type, int count, int ttl, - void *addresses, void *arg) -{ - dns_ok = 0; - - if (result != DNS_ERR_NONE) - goto out; - - fprintf(stderr, "type: %d, count: %d, ttl: %d: ", type, count, ttl); - - switch (type) { - case DNS_IPv4_A: { - struct in_addr *in_addrs = addresses; - int i; - /* a resolution that's not valid does not help */ - if (ttl < 0) - goto out; - for (i = 0; i < count; ++i) - fprintf(stderr, "%s ", inet_ntoa(in_addrs[0])); - break; - } - case DNS_PTR: - /* may get at most one PTR */ - if (count != 1) - goto out; - - fprintf(stderr, "%s ", *(char **)addresses); - break; - default: - goto out; - } - - dns_ok = 1; - -out: - event_loopexit(NULL); -} - -void -dns_gethostbyname() -{ - fprintf(stdout, "Simple DNS resolve: "); - dns_ok = 0; - evdns_resolve_ipv4("www.monkey.org", 0, dns_gethostbyname_cb, NULL); - event_dispatch(); - - if (dns_ok) { - fprintf(stdout, "OK\n"); - } else { - fprintf(stdout, "FAILED\n"); - exit(1); - } -} - -void -dns_gethostbyaddr() -{ - struct in_addr in; - in.s_addr = htonl(0x7f000001ul); /* 127.0.0.1 */ - fprintf(stdout, "Simple reverse DNS resolve: "); - dns_ok = 0; - evdns_resolve_reverse(&in, 0, dns_gethostbyname_cb, NULL); - event_dispatch(); - - if (dns_ok) { - fprintf(stdout, "OK\n"); - } else { - fprintf(stdout, "FAILED\n"); - exit(1); - } -} - -void -dns_suite(void) -{ - evdns_init(); - dns_gethostbyname(); - dns_gethostbyaddr(); - - evdns_shutdown(0); -} diff --git a/libevent/test/regress_http.c b/libevent/test/regress_http.c deleted file mode 100644 index a905b03..0000000 --- a/libevent/test/regress_http.c +++ /dev/null @@ -1,426 +0,0 @@ -/* - * Copyright (c) 2003-2006 Niels Provos <provos@citi.umich.edu> - * 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. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - */ - -#ifdef WIN32 -#include <winsock2.h> -#include <windows.h> -#endif - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <sys/types.h> -#include <sys/stat.h> -#ifdef HAVE_SYS_TIME_H -#include <sys/time.h> -#endif -#include <sys/queue.h> -#ifndef WIN32 -#include <sys/socket.h> -#include <sys/signal.h> -#include <unistd.h> -#endif -#include <netdb.h> -#include <fcntl.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> - -#include "event.h" -#include "evhttp.h" -#include "log.h" -#include "http-internal.h" - -extern int pair[]; -extern int test_ok; - -static struct evhttp *http; - -void http_basic_cb(struct evhttp_request *req, void *arg); -void http_post_cb(struct evhttp_request *req, void *arg); - -struct evhttp * -http_setup(short *pport) -{ - int i; - struct evhttp *myhttp; - short port = -1; - - /* Try a few different ports */ - for (i = 0; i < 50; ++i) { - myhttp = evhttp_start("127.0.0.1", 8080 + i); - if (myhttp != NULL) { - port = 8080 + i; - break; - } - } - - if (port == -1) - event_errx(1, "Could not start web server"); - - /* Register a callback for certain types of requests */ - evhttp_set_cb(myhttp, "/test", http_basic_cb, NULL); - evhttp_set_cb(myhttp, "/postit", http_post_cb, NULL); - - *pport = port; - return (myhttp); -} - -int -http_connect(const char *address, u_short port) -{ - /* Stupid code for connecting */ - struct addrinfo ai, *aitop; - char strport[NI_MAXSERV]; - int fd; - - memset(&ai, 0, sizeof (ai)); - ai.ai_family = AF_INET; - ai.ai_socktype = SOCK_STREAM; - snprintf(strport, sizeof (strport), "%d", port); - if (getaddrinfo(address, strport, &ai, &aitop) != 0) { - event_warn("getaddrinfo"); - return (-1); - } - - fd = socket(AF_INET, SOCK_STREAM, 0); - if (fd == -1) - event_err(1, "socket failed"); - - if (connect(fd, aitop->ai_addr, aitop->ai_addrlen) == -1) - event_err(1, "connect failed"); - - freeaddrinfo(aitop); - - return (fd); -} - -void -http_readcb(struct bufferevent *bev, void *arg) -{ - const char *what = "This is funny"; - - event_debug(("%s: %s\n", __func__, EVBUFFER_DATA(bev->input))); - - if (evbuffer_find(bev->input, what, strlen(what)) != NULL) { - struct evhttp_request *req = evhttp_request_new(NULL, NULL); - req->kind = EVHTTP_RESPONSE; - int done = evhttp_parse_lines(req, bev->input); - - if (done == 1 && - evhttp_find_header(req->input_headers, - "Content-Type") != NULL) - test_ok++; - evhttp_request_free(req); - bufferevent_disable(bev, EV_READ); - event_loopexit(NULL); - } -} - -void -http_writecb(struct bufferevent *bev, void *arg) -{ - if (EVBUFFER_LENGTH(bev->output) == 0) { - /* enable reading of the reply */ - bufferevent_enable(bev, EV_READ); - test_ok++; - } -} - -void -http_errorcb(struct bufferevent *bev, short what, void *arg) -{ - test_ok = -2; - event_loopexit(NULL); -} - -void -http_basic_cb(struct evhttp_request *req, void *arg) -{ - event_debug((stderr, "%s: called\n", __func__)); - - struct evbuffer *evb = evbuffer_new(); - evbuffer_add_printf(evb, "This is funny"); - - evhttp_send_reply(req, HTTP_OK, "Everything is fine", evb); - - evbuffer_free(evb); -} - -void -http_basic_test(void) -{ - struct bufferevent *bev; - int fd; - char *http_request; - short port = -1; - - test_ok = 0; - fprintf(stdout, "Testing Basic HTTP Server: "); - - http = http_setup(&port); - - fd = http_connect("127.0.0.1", port); - - /* Stupid thing to send a request */ - bev = bufferevent_new(fd, http_readcb, http_writecb, - http_errorcb, NULL); - - http_request = - "GET /test HTTP/1.1\r\n" - "Host: somehost \r\n" - "\r\n"; - - bufferevent_write(bev, http_request, strlen(http_request)); - - event_dispatch(); - - bufferevent_free(bev); - close(fd); - - evhttp_free(http); - - if (test_ok != 2) { - fprintf(stdout, "FAILED\n"); - exit(1); - } - - fprintf(stdout, "OK\n"); -} - -void http_request_done(struct evhttp_request *, void *); - -void -http_connection_test(void) -{ - short port = -1; - struct evhttp_connection *evcon = NULL; - struct evhttp_request *req = NULL; - - test_ok = 0; - fprintf(stdout, "Testing Basic HTTP Connection: "); - - http = http_setup(&port); - - evcon = evhttp_connection_new("127.0.0.1", port); - if (evcon == NULL) { - fprintf(stdout, "FAILED\n"); - exit(1); - } - - /* - * At this point, we want to schedule a request to the HTTP - * server using our make request method. - */ - - req = evhttp_request_new(http_request_done, NULL); - - /* Add the information that we care about */ - evhttp_add_header(req->output_headers, "Host", "somehost"); - - /* We give ownership of the request to the connection */ - if (evhttp_make_request(evcon, req, EVHTTP_REQ_GET, "/test") == -1) { - fprintf(stdout, "FAILED\n"); - exit(1); - } - - event_dispatch(); - - evhttp_connection_free(evcon); - evhttp_free(http); - - if (test_ok != 1) { - fprintf(stdout, "FAILED\n"); - exit(1); - } - - fprintf(stdout, "OK\n"); -} - -void -http_request_done(struct evhttp_request *req, void *arg) -{ - const char *what = "This is funny"; - - if (req->response_code != HTTP_OK) { - - fprintf(stderr, "FAILED\n"); - exit(1); - } - - if (evhttp_find_header(req->input_headers, "Content-Type") == NULL) { - fprintf(stderr, "FAILED\n"); - exit(1); - } - - if (EVBUFFER_LENGTH(req->input_buffer) != strlen(what)) { - fprintf(stderr, "FAILED\n"); - exit(1); - } - - if (memcmp(EVBUFFER_DATA(req->input_buffer), what, strlen(what)) != 0) { - fprintf(stderr, "FAILED\n"); - exit(1); - } - - test_ok = 1; - event_loopexit(NULL); -} - -/* - * HTTP POST test. - */ - -void http_postrequest_done(struct evhttp_request *, void *); - -#define POST_DATA "Okay. Not really printf" - -void -http_post_test(void) -{ - short port = -1; - struct evhttp_connection *evcon = NULL; - struct evhttp_request *req = NULL; - - test_ok = 0; - fprintf(stdout, "Testing HTTP POST Request: "); - - http = http_setup(&port); - - evcon = evhttp_connection_new("127.0.0.1", port); - if (evcon == NULL) { - fprintf(stdout, "FAILED\n"); - exit(1); - } - - /* - * At this point, we want to schedule an HTTP POST request - * server using our make request method. - */ - - req = evhttp_request_new(http_postrequest_done, NULL); - if (req == NULL) { - fprintf(stdout, "FAILED\n"); - exit(1); - } - - /* Add the information that we care about */ - evhttp_add_header(req->output_headers, "Host", "somehost"); - evbuffer_add_printf(req->output_buffer, POST_DATA); - - if (evhttp_make_request(evcon, req, EVHTTP_REQ_POST, "/postit") == -1) { - fprintf(stdout, "FAILED\n"); - exit(1); - } - - event_dispatch(); - - evhttp_connection_free(evcon); - evhttp_free(http); - - if (test_ok != 1) { - fprintf(stdout, "FAILED: %d\n", test_ok); - exit(1); - } - - fprintf(stdout, "OK\n"); -} - -void -http_post_cb(struct evhttp_request *req, void *arg) -{ - event_debug((stderr, "%s: called\n", __func__)); - - /* Yes, we are expecting a post request */ - if (req->type != EVHTTP_REQ_POST) { - fprintf(stdout, "FAILED (post type)\n"); - exit(1); - } - - if (EVBUFFER_LENGTH(req->input_buffer) != strlen(POST_DATA)) { - fprintf(stdout, "FAILED (length: %ld vs %ld)\n", - EVBUFFER_LENGTH(req->input_buffer), strlen(POST_DATA)); - exit(1); - } - - if (memcmp(EVBUFFER_DATA(req->input_buffer), POST_DATA, - strlen(POST_DATA))) { - fprintf(stdout, "FAILED (data)\n"); - fprintf(stdout, "Got :%s\n", EVBUFFER_DATA(req->input_buffer)); - fprintf(stdout, "Want:%s\n", POST_DATA); - exit(1); - } - - struct evbuffer *evb = evbuffer_new(); - evbuffer_add_printf(evb, "This is funny"); - - evhttp_send_reply(req, HTTP_OK, "Everything is fine", evb); - - evbuffer_free(evb); -} - -void -http_postrequest_done(struct evhttp_request *req, void *arg) -{ - const char *what = "This is funny"; - - if (req->response_code != HTTP_OK) { - - fprintf(stderr, "FAILED (response code)\n"); - exit(1); - } - - if (evhttp_find_header(req->input_headers, "Content-Type") == NULL) { - fprintf(stderr, "FAILED (content type)\n"); - exit(1); - } - - if (EVBUFFER_LENGTH(req->input_buffer) != strlen(what)) { - fprintf(stderr, "FAILED (length %ld vs %ld)\n", - EVBUFFER_LENGTH(req->input_buffer), strlen(what)); - exit(1); - } - - if (memcmp(EVBUFFER_DATA(req->input_buffer), what, strlen(what)) != 0) { - fprintf(stderr, "FAILED (data)\n"); - exit(1); - } - - test_ok = 1; - event_loopexit(NULL); -} - - -void -http_suite(void) -{ - http_basic_test(); - http_connection_test(); - http_post_test(); -} diff --git a/libevent/test/test-eof.c b/libevent/test/test-eof.c deleted file mode 100644 index 020c661..0000000 --- a/libevent/test/test-eof.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Compile with: - * cc -I/usr/local/include -o time-test time-test.c -L/usr/local/lib -levent - */ - -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/time.h> -#include <sys/socket.h> -#include <fcntl.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> -#include <errno.h> - -#include <event.h> - -int test_okay = 1; -int called = 0; - -void -read_cb(int fd, short event, void *arg) -{ - char buf[256]; - int len; - - len = read(fd, buf, sizeof(buf)); - - printf("%s: read %d%s\n", __func__, - len, len ? "" : " - means EOF"); - - if (len) { - if (!called) - event_add(arg, NULL); - } else if (called == 1) - test_okay = 0; - - called++; -} - -int -main (int argc, char **argv) -{ - struct event ev; - char *test = "test string"; - int pair[2]; - - if (socketpair(AF_UNIX, SOCK_STREAM, 0, pair) == -1) - return (1); - - - write(pair[0], test, strlen(test)+1); - shutdown(pair[0], SHUT_WR); - - /* Initalize the event library */ - event_init(); - - /* Initalize one event */ - event_set(&ev, pair[1], EV_READ, read_cb, &ev); - - event_add(&ev, NULL); - - event_dispatch(); - - return (test_okay); -} - diff --git a/libevent/test/test-init.c b/libevent/test/test-init.c deleted file mode 100644 index 32806ba..0000000 --- a/libevent/test/test-init.c +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Compile with: - * cc -I/usr/local/include -o time-test time-test.c -L/usr/local/lib -levent - */ - -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/time.h> -#include <sys/socket.h> -#include <fcntl.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> -#include <errno.h> - -#include <event.h> - -int -main(int argc, char **argv) -{ - /* Initalize the event library */ - event_init(); - - return (0); -} - diff --git a/libevent/test/test-time.c b/libevent/test/test-time.c deleted file mode 100644 index a26c973..0000000 --- a/libevent/test/test-time.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Compile with: - * cc -I/usr/local/include -o time-test time-test.c -L/usr/local/lib -levent - */ - -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/time.h> -#include <fcntl.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> -#include <errno.h> - -#include <event.h> - -int called = 0; - -#define NEVENT 20000 - -struct event *ev[NEVENT]; - -void -time_cb(int fd, short event, void *arg) -{ - struct timeval tv; - int i, j; - - called++; - - if (called < 10*NEVENT) { - for (i = 0; i < 10; i++) { - j = random() % NEVENT; - tv.tv_sec = 0; - tv.tv_usec = random() % 50000L; - if (tv.tv_usec % 2) - evtimer_add(ev[j], &tv); - else - evtimer_del(ev[j]); - } - } -} - -int -main (int argc, char **argv) -{ - struct timeval tv; - int i; - - /* Initalize the event library */ - event_init(); - - for (i = 0; i < NEVENT; i++) { - ev[i] = malloc(sizeof(struct event)); - - /* Initalize one event */ - evtimer_set(ev[i], time_cb, ev[i]); - tv.tv_sec = 0; - tv.tv_usec = random() % 50000L; - evtimer_add(ev[i], &tv); - } - - event_dispatch(); - - return (called < NEVENT); -} - diff --git a/libevent/test/test-weof.c b/libevent/test/test-weof.c deleted file mode 100644 index 5f3be27..0000000 --- a/libevent/test/test-weof.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Compile with: - * cc -I/usr/local/include -o time-test time-test.c -L/usr/local/lib -levent - */ - -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/time.h> -#include <sys/socket.h> -#include <fcntl.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <signal.h> -#include <unistd.h> -#include <errno.h> - -#include <event.h> - -int pair[2]; -int test_okay = 1; -int called = 0; - -void -write_cb(int fd, short event, void *arg) -{ - char *test = "test string"; - int len; - - len = write(fd, test, strlen(test) + 1); - - printf("%s: write %d%s\n", __func__, - len, len ? "" : " - means EOF"); - - if (len > 0) { - if (!called) - event_add(arg, NULL); - close(pair[0]); - } else if (called == 1) - test_okay = 0; - - called++; -} - -int -main (int argc, char **argv) -{ - struct event ev; - - if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) - return (1); - - if (socketpair(AF_UNIX, SOCK_STREAM, 0, pair) == -1) - return (1); - - /* Initalize the event library */ - event_init(); - - /* Initalize one event */ - event_set(&ev, pair[1], EV_WRITE, write_cb, &ev); - - event_add(&ev, NULL); - - event_dispatch(); - - return (test_okay); -} - diff --git a/libevent/test/test.sh b/libevent/test/test.sh deleted file mode 100755 index 878d468..0000000 --- a/libevent/test/test.sh +++ /dev/null @@ -1,91 +0,0 @@ -#!/bin/sh - -setup () { - EVENT_NOKQUEUE=yes; export EVENT_NOKQUEUE - EVENT_NODEVPOLL=yes; export EVENT_NODEVPOLL - EVENT_NOPOLL=yes; export EVENT_NOPOLL - EVENT_NOSELECT=yes; export EVENT_NOSELECT - EVENT_NOEPOLL=yes; export EVENT_NOEPOLL - EVENT_NORTSIG=yes; export EVENT_NORTSIG -} - -test () { - if ./test-init 2>/dev/null ; - then - true - else - echo Skipping test - return - fi - -echo -n " test-eof: " -if ./test-eof >/dev/null ; -then - echo OKAY ; -else - echo FAILED ; -fi -echo -n " test-weof: " -if ./test-weof >/dev/null ; -then - echo OKAY ; -else - echo FAILED ; -fi -echo -n " test-time: " -if ./test-time >/dev/null ; -then - echo OKAY ; -else - echo FAILED ; -fi -echo -n " regress: " -if ./regress >/dev/null ; -then - echo OKAY ; -else - echo FAILED ; -fi -} - -echo "Running tests:" - -# Need to do this by hand? -setup -unset EVENT_NOKQUEUE -export EVENT_NOKQUEUE -echo "KQUEUE" -test - -setup -unset EVENT_NODEVPOLL -export EVENT_NODEVPOLL -echo "DEVPOLL" -test - -setup -unset EVENT_NOPOLL -export EVENT_NOPOLL -echo "POLL" -test - -setup -unset EVENT_NOSELECT -export EVENT_NOSELECT -echo "SELECT" -test - -setup -unset EVENT_NORTSIG -export EVENT_NORTSIG -echo "RTSIG" -test - -setup -unset EVENT_NOEPOLL -export EVENT_NOEPOLL -echo "EPOLL" -test - - - |