From b34768962cd6c82b99803f81d9d53cd70431a4e9 Mon Sep 17 00:00:00 2001 From: Brian Barrett Date: Mon, 26 Jun 2006 22:28:59 +0000 Subject: [PATCH] * put event library tests into the testing infrastructure so that they can be built without heroic effort This commit was SVN r10517. --- configure.ac | 1 + test/event/Makefile.am | 44 ++++++++++++ test/event/event-test.c | 144 +++++++++++++++++++++++++++++++++++++++ test/event/signal-test.c | 68 ++++++++++++++++++ test/event/time-test.c | 71 +++++++++++++++++++ 5 files changed, 328 insertions(+) create mode 100644 test/event/Makefile.am create mode 100644 test/event/event-test.c create mode 100644 test/event/signal-test.c create mode 100644 test/event/time-test.c diff --git a/configure.ac b/configure.ac index 35971a4a6b..fa47d65dd5 100644 --- a/configure.ac +++ b/configure.ac @@ -1132,6 +1132,7 @@ AC_CONFIG_FILES([ ompi/tools/wrappers/mpif90-wrapper-data.txt test/Makefile + test/event/Makefile test/asm/Makefile test/class/Makefile test/dss/Makefile diff --git a/test/event/Makefile.am b/test/event/Makefile.am new file mode 100644 index 0000000000..de8a31dd91 --- /dev/null +++ b/test/event/Makefile.am @@ -0,0 +1,44 @@ +# +# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana +# University Research and Technology +# Corporation. All rights reserved. +# Copyright (c) 2004-2005 The University of Tennessee and The University +# of Tennessee Research Foundation. All rights +# reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + + + +check_PROGRAMS = \ + signal-test \ + time-test \ + event-test + +TESTS = $(check_PROGRAMS) + +signal_test_SOURCES = signal-test.c +signal_test_LDFLAGS = $(WRAPPER_EXTRA_LDFLAGS) +signal_test_LDADD = \ + $(top_builddir)/opal/libopal.la +signal_test_DEPENDENCIES = $(signal_test_LDADD) + +time_test_SOURCES = time-test.c +time_test_LDFLAGS = $(WRAPPER_EXTRA_LDFLAGS) +time_test_LDADD = \ + $(top_builddir)/opal/libopal.la +time_test_DEPENDENCIES = $(time_test_LDADD) + +event_test_SOURCES = event-test.c +event_test_LDFLAGS = $(WRAPPER_EXTRA_LDFLAGS) +event_test_LDADD = \ + $(top_builddir)/opal/libopal.la +event_test_DEPENDENCIES = $(event_test_LDADD) diff --git a/test/event/event-test.c b/test/event/event-test.c new file mode 100644 index 0000000000..a612c3c2e7 --- /dev/null +++ b/test/event/event-test.c @@ -0,0 +1,144 @@ +/* + * Compile with: + * cc -I/usr/local/include -o event-test event-test.c -L/usr/local/lib -levent + */ + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#include +#ifndef WIN32 +#ifdef HAVE_SYS_QUEUE_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#else +#include +#endif +#include +#include +#include +#include +#include +#include + +#include + +static void +fifo_read(int fd, short event, void *arg) +{ + char buf[255]; + int len; + struct opal_event *ev = arg; +#ifdef WIN32 + DWORD dwBytesRead; +#endif + + /* Reschedule this event */ + opal_event_add(ev, NULL); + + fprintf(stderr, "fifo_read called with fd: %d, event: %d, arg: %p\n", + fd, event, arg); +#ifdef WIN32 + len = ReadFile((HANDLE)fd, buf, sizeof(buf) - 1, &dwBytesRead, NULL); + + /* Check for end of file. */ + if(len && dwBytesRead == 0) { + fprintf(stderr, "End Of File"); + opal_event_del(ev); + return; + } + + buf[dwBytesRead + 1] = '\0'; +#else + len = read(fd, buf, sizeof(buf) - 1); + + if (len == -1) { + perror("read"); + return; + } else if (len == 0) { + fprintf(stderr, "Connection closed\n"); + return; + } + + buf[len] = '\0'; +#endif + fprintf(stdout, "Read: %s\n", buf); +} + +int +main (int argc, char **argv) +{ + struct opal_event evfifo; +#ifdef WIN32 + HANDLE socket; + // Open a file. + socket = CreateFile("test.txt", // open File + GENERIC_READ, // open for reading + 0, // do not share + NULL, // no security + OPEN_EXISTING, // existing file only + FILE_ATTRIBUTE_NORMAL, // normal file + NULL); // no attr. template + + if(socket == INVALID_HANDLE_VALUE) + return 1; + +#else + struct stat st; + char *fifo = "event.fifo"; + int socket; + + if (lstat (fifo, &st) == 0) { + if ((st.st_mode & S_IFMT) == S_IFREG) { + errno = EEXIST; + perror("lstat"); + exit (1); + } + } + + unlink (fifo); + if (mkfifo (fifo, 0600) == -1) { + perror("mkfifo"); + exit (1); + } + + /* Linux pipes are broken, we need O_RDWR instead of O_RDONLY */ +#ifdef __linux + socket = open (fifo, O_RDWR | O_NONBLOCK, 0); +#else + socket = open (fifo, O_RDONLY | O_NONBLOCK, 0); +#endif + + if (socket == -1) { + perror("open"); + exit (1); + } + + fprintf(stderr, "Write data to %s\n", fifo); +#endif + /* Initalize the event library */ + opal_event_init(); + + /* Initalize one event */ +#ifdef WIN32 + opal_event_set(&evfifo, (int)socket, OPAL_EV_READ, fifo_read, &evfifo); +#else + opal_event_set(&evfifo, socket, OPAL_EV_READ, fifo_read, &evfifo); +#endif + + /* Add it to the active events, without a timeout */ + opal_event_add(&evfifo, NULL); + + opal_event_dispatch(); +#ifdef WIN32 + CloseHandle(socket); +#endif + return (0); +} + diff --git a/test/event/signal-test.c b/test/event/signal-test.c new file mode 100644 index 0000000000..bfde094964 --- /dev/null +++ b/test/event/signal-test.c @@ -0,0 +1,68 @@ +/* + * Compile with: + * cc -I/usr/local/include -o time-test time-test.c -L/usr/local/lib -levent + */ + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#include +#ifndef WIN32 +#ifdef HAVE_SYS_QUEUE_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#else +#include +#endif +#include +#include +#include +#include +#include +#include + +#include + +int called = 0; + +void +signal_cb(int fd, short event, void *arg) +{ + struct opal_event *signal = arg; + + printf("%s: got signal %d\n", __func__, OPAL_EVENT_SIGNAL(signal)); + + if (called >= 2) + opal_event_del(signal); + + called++; +} + +int +main (int argc, char **argv) +{ + struct opal_event signal_int, signal_term; + + /* Initalize the event library */ + opal_event_init(); + + /* Initalize one event */ + opal_event_set(&signal_term, SIGUSR1, OPAL_EV_SIGNAL|OPAL_EV_PERSIST, signal_cb, + &signal_term); + opal_event_set(&signal_int, SIGUSR2, OPAL_EV_SIGNAL|OPAL_EV_PERSIST, signal_cb, + &signal_int); + + opal_event_add(&signal_int, NULL); + opal_event_add(&signal_term, NULL); + + opal_event_dispatch(); + + return (0); +} + diff --git a/test/event/time-test.c b/test/event/time-test.c new file mode 100644 index 0000000000..2d1fecaefe --- /dev/null +++ b/test/event/time-test.c @@ -0,0 +1,71 @@ +/* + * Compile with: + * cc -I/usr/local/include -o time-test time-test.c -L/usr/local/lib -levent + */ + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#include +#ifndef WIN32 +#ifdef HAVE_SYS_QUEUE_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#else +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#include +#include +#include +#include +#include + +#include + +int lasttime; + +void +timeout_cb(int fd, short event, void *arg) +{ + struct timeval tv; + struct opal_event *timeout = arg; + int newtime = time(NULL); + + printf("%s: called at %d: %d\n", __func__, newtime, + newtime - lasttime); + lasttime = newtime; + + timerclear(&tv); + tv.tv_sec = 2; + opal_event_add(timeout, &tv); +} + +int +main (int argc, char **argv) +{ + struct opal_event timeout; + struct timeval tv; + + /* Initalize the event library */ + opal_event_init(); + + /* Initalize one event */ + opal_evtimer_set(&timeout, timeout_cb, &timeout); + + timerclear(&tv); + tv.tv_sec = 2; + opal_event_add(&timeout, &tv); + + lasttime = time(NULL); + + opal_event_dispatch(); + + return (0); +} +