1fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath/* 2fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * Copyright (c) 2003-2007 Niels Provos <provos@citi.umich.edu> 3fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson 4fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * 5fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * Redistribution and use in source and binary forms, with or without 6fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * modification, are permitted provided that the following conditions 7fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * are met: 8fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * 1. Redistributions of source code must retain the above copyright 9fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * notice, this list of conditions and the following disclaimer. 10fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * 2. Redistributions in binary form must reproduce the above copyright 11fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * notice, this list of conditions and the following disclaimer in the 12fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * documentation and/or other materials provided with the distribution. 13fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * 3. The name of the author may not be used to endorse or promote products 14fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * derived from this software without specific prior written permission. 15fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * 16fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 21fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath */ 27fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include "util-internal.h" 28fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 29fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#ifdef _WIN32 30fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <winsock2.h> 31fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <windows.h> 32fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <io.h> 33fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <fcntl.h> 34fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 35fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 36fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#if defined(__APPLE__) && defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) 37fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#if (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1060 && \ 38fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) 39fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#define FORK_BREAKS_GCOV 40fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <vproc.h> 41fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 42fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 43fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 44fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include "event2/event-config.h" 45fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 46fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#if 0 47fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <sys/types.h> 48fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <sys/stat.h> 49fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#ifdef EVENT__HAVE_SYS_TIME_H 50fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <sys/time.h> 51fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 52fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <sys/queue.h> 53fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <signal.h> 54fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <errno.h> 55fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 56fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 57fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <sys/types.h> 58fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#ifdef EVENT__HAVE_SYS_STAT_H 59fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <sys/stat.h> 60fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 61fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 62fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#ifndef _WIN32 63fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <sys/socket.h> 64fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <sys/wait.h> 65fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <signal.h> 66fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <unistd.h> 67fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <netdb.h> 68fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 69fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 70fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <stdlib.h> 71fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <stdio.h> 72fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <string.h> 73fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include <assert.h> 74fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 75fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include "event2/util.h" 76fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include "event2/event.h" 77fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include "event2/event_compat.h" 78fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include "event2/dns.h" 79fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include "event2/dns_compat.h" 80fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include "event2/thread.h" 81fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 82fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include "event2/event-config.h" 83fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include "regress.h" 84fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include "tinytest.h" 85fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include "tinytest_macros.h" 86fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include "../iocp-internal.h" 87fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#include "../event-internal.h" 88fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 89fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathstruct evutil_weakrand_state test_weakrand_state; 90fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 91fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathlong 92fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathtimeval_msec_diff(const struct timeval *start, const struct timeval *end) 93fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath{ 94fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath long ms = end->tv_sec - start->tv_sec; 95fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath ms *= 1000; 96fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath ms += ((end->tv_usec - start->tv_usec)+500) / 1000; 97fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return ms; 98fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath} 99fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 100fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath/* ============================================================ */ 101fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath/* Code to wrap up old legacy test cases that used setup() and cleanup(). 102fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * 103fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * Not all of the tests designated "legacy" are ones that used setup() and 104fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * cleanup(), of course. A test is legacy it it uses setup()/cleanup(), OR 105fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * if it wants to find its event base/socketpair in global variables (ugh), 106fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * OR if it wants to communicate success/failure through test_ok. 107fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath */ 108fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 109fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath/* This is set to true if we're inside a legacy test wrapper. It lets the 110fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath setup() and cleanup() functions in regress.c know they're not needed. 111fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath */ 112fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathint in_legacy_test_wrapper = 0; 113fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 114fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathstatic void dnslogcb(int w, const char *m) 115fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath{ 116fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath TT_BLATHER(("%s", m)); 117fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath} 118fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 119fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath/* creates a temporary file with the data in it. If *filename_out gets set, 120fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath * the caller should try to unlink it. */ 121fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathint 122fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathregress_make_tmpfile(const void *data, size_t datalen, char **filename_out) 123fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath{ 124fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#ifndef _WIN32 125fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath char tmpfilename[32]; 126fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath int fd; 127fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath *filename_out = NULL; 128fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath strcpy(tmpfilename, "/tmp/eventtmp.XXXXXX"); 129fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#ifdef EVENT__HAVE_UMASK 130fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath umask(0077); 131fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 132fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath fd = mkstemp(tmpfilename); 133fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (fd == -1) 134fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return (-1); 135fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (write(fd, data, datalen) != (int)datalen) { 136fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath close(fd); 137fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return (-1); 138fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath } 139fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath lseek(fd, 0, SEEK_SET); 140fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath /* remove it from the file system */ 141fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath unlink(tmpfilename); 142fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return (fd); 143fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#else 144fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath /* XXXX actually delete the file later */ 145fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath char tmpfilepath[MAX_PATH]; 146fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath char tmpfilename[MAX_PATH]; 147fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath DWORD r, written; 148fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath int tries = 16; 149fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath HANDLE h; 150fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath r = GetTempPathA(MAX_PATH, tmpfilepath); 151fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (r > MAX_PATH || r == 0) 152fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return (-1); 153fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath for (; tries > 0; --tries) { 154fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath r = GetTempFileNameA(tmpfilepath, "LIBEVENT", 0, tmpfilename); 155fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (r == 0) 156fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return (-1); 157fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath h = CreateFileA(tmpfilename, GENERIC_READ|GENERIC_WRITE, 158fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 159fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (h != INVALID_HANDLE_VALUE) 160fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath break; 161fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath } 162fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (tries == 0) 163fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return (-1); 164fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath written = 0; 165fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath *filename_out = strdup(tmpfilename); 166fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath WriteFile(h, data, (DWORD)datalen, &written, NULL); 167fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath /* Closing the fd returned by this function will indeed close h. */ 168fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return _open_osfhandle((intptr_t)h,_O_RDONLY); 169fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 170fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath} 171fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 172fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#ifndef _WIN32 173fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathpid_t 174fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathregress_fork(void) 175fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath{ 176fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath pid_t pid = fork(); 177fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#ifdef FORK_BREAKS_GCOV 178fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath vproc_transaction_begin(0); 179fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 180fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return pid; 181fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath} 182fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 183fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 184fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathstatic void 185fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathignore_log_cb(int s, const char *msg) 186fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath{ 187fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath} 188fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 189fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathstatic void * 190fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathbasic_test_setup(const struct testcase_t *testcase) 191fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath{ 192fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath struct event_base *base = NULL; 193fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath evutil_socket_t spair[2] = { -1, -1 }; 194fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath struct basic_test_data *data = NULL; 195fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 196fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#ifndef _WIN32 197fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (testcase->flags & TT_ENABLE_IOCP_FLAG) 198fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return (void*)TT_SKIP; 199fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 200fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 201fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (testcase->flags & TT_NEED_THREADS) { 202fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (!(testcase->flags & TT_FORK)) 203fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return NULL; 204fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#if defined(EVTHREAD_USE_PTHREADS_IMPLEMENTED) 205fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (evthread_use_pthreads()) 206fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath exit(1); 207fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#elif defined(EVTHREAD_USE_WINDOWS_THREADS_IMPLEMENTED) 208fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (evthread_use_windows_threads()) 209fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath exit(1); 210fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#else 211fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return (void*)TT_SKIP; 212fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 213fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath } 214fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 215fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (testcase->flags & TT_NEED_SOCKETPAIR) { 216fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (evutil_socketpair(AF_UNIX, SOCK_STREAM, 0, spair) == -1) { 217fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath fprintf(stderr, "%s: socketpair\n", __func__); 218fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath exit(1); 219fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath } 220fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 221fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (evutil_make_socket_nonblocking(spair[0]) == -1) { 222fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath fprintf(stderr, "fcntl(O_NONBLOCK)"); 223fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath exit(1); 224fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath } 225fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 226fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (evutil_make_socket_nonblocking(spair[1]) == -1) { 227fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath fprintf(stderr, "fcntl(O_NONBLOCK)"); 228fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath exit(1); 229fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath } 230fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath } 231fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (testcase->flags & TT_NEED_BASE) { 232fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (testcase->flags & TT_LEGACY) 233fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath base = event_init(); 234fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath else 235fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath base = event_base_new(); 236fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (!base) 237fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath exit(1); 238fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath } 239fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (testcase->flags & TT_ENABLE_IOCP_FLAG) { 240fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (event_base_start_iocp_(base, 0)<0) { 241fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath event_base_free(base); 242fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return (void*)TT_SKIP; 243fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath } 244fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath } 245fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 246fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (testcase->flags & TT_NEED_DNS) { 247fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath evdns_set_log_fn(dnslogcb); 248fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (evdns_init()) 249fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return NULL; /* fast failure */ /*XXX asserts. */ 250fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath } 251fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 252fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (testcase->flags & TT_NO_LOGS) 253fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath event_set_log_callback(ignore_log_cb); 254fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 255fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath data = calloc(1, sizeof(*data)); 256fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (!data) 257fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath exit(1); 258fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath data->base = base; 259fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath data->pair[0] = spair[0]; 260fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath data->pair[1] = spair[1]; 261fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath data->setup_data = testcase->setup_data; 262fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return data; 263fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath} 264fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 265fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathstatic int 266fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathbasic_test_cleanup(const struct testcase_t *testcase, void *ptr) 267fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath{ 268fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath struct basic_test_data *data = ptr; 269fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 270fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (testcase->flags & TT_NO_LOGS) 271fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath event_set_log_callback(NULL); 272fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 273fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (testcase->flags & TT_NEED_SOCKETPAIR) { 274fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (data->pair[0] != -1) 275fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath evutil_closesocket(data->pair[0]); 276fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (data->pair[1] != -1) 277fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath evutil_closesocket(data->pair[1]); 278fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath } 279fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 280fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (testcase->flags & TT_NEED_DNS) { 281fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath evdns_shutdown(0); 282fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath } 283fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 284fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (testcase->flags & TT_NEED_BASE) { 285fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (data->base) { 286fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath event_base_assert_ok_(data->base); 287fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath event_base_free(data->base); 288fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath } 289fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath } 290fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 291fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (testcase->flags & TT_FORK) 292fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath libevent_global_shutdown(); 293fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 294fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath free(data); 295fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 296fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return 1; 297fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath} 298fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 299fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathconst struct testcase_setup_t basic_setup = { 300fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath basic_test_setup, basic_test_cleanup 301fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath}; 302fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 303fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath/* The "data" for a legacy test is just a pointer to the void fn(void) 304fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath function implementing the test case. We need to set up some globals, 305fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath though, since that's where legacy tests expect to find a socketpair 306fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath (sometimes) and a global event_base (sometimes). 307fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath */ 308fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathstatic void * 309fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathlegacy_test_setup(const struct testcase_t *testcase) 310fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath{ 311fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath struct basic_test_data *data = basic_test_setup(testcase); 312fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (data == (void*)TT_SKIP || data == NULL) 313fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return data; 314fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath global_base = data->base; 315fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath pair[0] = data->pair[0]; 316fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath pair[1] = data->pair[1]; 317fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath data->legacy_test_fn = testcase->setup_data; 318fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return data; 319fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath} 320fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 321fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath/* This function is the implementation of every legacy test case. It 322fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath sets test_ok to 0, invokes the test function, and tells tinytest that 323fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath the test failed if the test didn't set test_ok to 1. 324fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath */ 325fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathvoid 326fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathrun_legacy_test_fn(void *ptr) 327fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath{ 328fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath struct basic_test_data *data = ptr; 329fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath test_ok = called = 0; 330fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 331fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath in_legacy_test_wrapper = 1; 332fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath data->legacy_test_fn(); /* This part actually calls the test */ 333fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath in_legacy_test_wrapper = 0; 334fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 335fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (!test_ok) 336fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath tt_abort_msg("Legacy unit test failed"); 337fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 338fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathend: 339fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath test_ok = 0; 340fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath} 341fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 342fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath/* This function doesn't have to clean up ptr (which is just a pointer 343fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath to the test function), but it may need to close the socketpair or 344fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath free the event_base. 345fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath */ 346fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathstatic int 347fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathlegacy_test_cleanup(const struct testcase_t *testcase, void *ptr) 348fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath{ 349fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath int r = basic_test_cleanup(testcase, ptr); 350fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath pair[0] = pair[1] = -1; 351fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath global_base = NULL; 352fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return r; 353fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath} 354fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 355fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathconst struct testcase_setup_t legacy_setup = { 356fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath legacy_test_setup, legacy_test_cleanup 357fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath}; 358fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 359fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath/* ============================================================ */ 360fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 361fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#if (!defined(EVENT__HAVE_PTHREADS) && !defined(_WIN32)) || defined(EVENT__DISABLE_THREAD_SUPPORT) 362fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathstruct testcase_t thread_testcases[] = { 363fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "basic", NULL, TT_SKIP, NULL, NULL }, 364fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath END_OF_TESTCASES 365fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath}; 366fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 367fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 368fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathstruct testgroup_t testgroups[] = { 369fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "main/", main_testcases }, 370fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "heap/", minheap_testcases }, 371fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "et/", edgetriggered_testcases }, 372fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "finalize/", finalize_testcases }, 373fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "evbuffer/", evbuffer_testcases }, 374fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "signal/", signal_testcases }, 375fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "util/", util_testcases }, 376fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "bufferevent/", bufferevent_testcases }, 377fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "http/", http_testcases }, 378fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "dns/", dns_testcases }, 379fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "evtag/", evtag_testcases }, 380fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "rpc/", rpc_testcases }, 381fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "thread/", thread_testcases }, 382fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "listener/", listener_testcases }, 383fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#ifdef _WIN32 384fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "iocp/", iocp_testcases }, 385fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "iocp/bufferevent/", bufferevent_iocp_testcases }, 386fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "iocp/listener/", listener_iocp_testcases }, 387fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 388fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#ifdef EVENT__HAVE_OPENSSL 389fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "ssl/", ssl_testcases }, 390fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 391fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath END_OF_GROUPS 392fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath}; 393fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 394fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathconst char *alltests[] = { "+..", NULL }; 395fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathconst char *livenettests[] = { 396fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath "+util/getaddrinfo_live", 397fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath "+dns/gethostby..", 398fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath "+dns/resolve_reverse", 399fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath NULL 400fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath}; 401fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathconst char *finetimetests[] = { 402fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath "+util/monotonic_res_precise", 403fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath "+util/monotonic_res_fallback", 404fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath "+thread/deferred_cb_skew", 405fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath "+http/connection_retry", 406fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath "+http/https_connection_retry", 407fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath NULL 408fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath}; 409fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathstruct testlist_alias_t testaliases[] = { 410fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "all", alltests }, 411fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "live_net", livenettests }, 412fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath { "fine_timing", finetimetests }, 413fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath END_OF_ALIASES 414fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath}; 415fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 416fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathint libevent_tests_running_in_debug_mode = 0; 417fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 418fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathint 419fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamathmain(int argc, const char **argv) 420fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath{ 421fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#ifdef _WIN32 422fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath WORD wVersionRequested; 423fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath WSADATA wsaData; 424fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 425fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath wVersionRequested = MAKEWORD(2, 2); 426fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 427fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath (void) WSAStartup(wVersionRequested, &wsaData); 428fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 429fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 430fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#ifndef _WIN32 431fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) 432fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return 1; 433fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 434fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 435fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#ifdef _WIN32 436fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath tinytest_skip(testgroups, "http/connection_retry"); 437fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath tinytest_skip(testgroups, "http/https_connection_retry"); 438fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 439fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 440fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#ifndef EVENT__DISABLE_THREAD_SUPPORT 441fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (!getenv("EVENT_NO_DEBUG_LOCKS")) 442fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath evthread_enable_lock_debugging(); 443fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath#endif 444fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 445fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (getenv("EVENT_DEBUG_MODE")) { 446fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath event_enable_debug_mode(); 447fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath libevent_tests_running_in_debug_mode = 1; 448fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath } 449fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (getenv("EVENT_DEBUG_LOGGING_ALL")) { 450fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath event_enable_debug_logging(EVENT_DBG_ALL); 451fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath } 452fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 453fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath tinytest_set_aliases(testaliases); 454fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 455fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath evutil_weakrand_seed_(&test_weakrand_state, 0); 456fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 457fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath if (tinytest_main(argc,argv,testgroups)) 458fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return 1; 459fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 460fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath libevent_global_shutdown(); 461fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 462fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath return 0; 463fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath} 464fc74cb45eafe51162b10a850016c6d2e1f8fd23cNarayan Kamath 465