Make unit tests work on win32

svn:r3094
This commit is contained in:
Nick Mathewson 2004-12-07 05:31:38 +00:00
parent c3c6873945
commit ac759adb43
3 changed files with 40 additions and 3 deletions

View File

@ -1011,7 +1011,7 @@ static void dumpstats(int severity) {
/** Called before we make any calls to network-related functions. /** Called before we make any calls to network-related functions.
* (Some operating systems require their network libraries to be * (Some operating systems require their network libraries to be
* initialized.) */ * initialized.) */
static int network_init(void) int network_init(void)
{ {
#ifdef MS_WINDOWS #ifdef MS_WINDOWS
/* This silly exercise is necessary before windows will allow gethostbyname to work. /* This silly exercise is necessary before windows will allow gethostbyname to work.

View File

@ -1387,6 +1387,7 @@ int proxy_mode(or_options_t *options);
void handle_signals(int is_parent); void handle_signals(int is_parent);
void tor_cleanup(void); void tor_cleanup(void);
int network_init(void);
int tor_main(int argc, char *argv[]); int tor_main(int argc, char *argv[]);

View File

@ -4,6 +4,7 @@
/* $Id$ */ /* $Id$ */
const char test_c_id[] = "$Id$"; const char test_c_id[] = "$Id$";
#include "orconfig.h"
#include <stdio.h> #include <stdio.h>
#ifdef HAVE_FCNTL_H #ifdef HAVE_FCNTL_H
#include <fcntl.h> #include <fcntl.h>
@ -12,8 +13,10 @@ const char test_c_id[] = "$Id$";
#ifdef MS_WINDOWS #ifdef MS_WINDOWS
/* For mkdir() */ /* For mkdir() */
#include <direct.h> #include <direct.h>
#endif #else
#include <dirent.h> #include <dirent.h>
#endif
#include "or.h" #include "or.h"
#include "../common/test.h" #include "../common/test.h"
#include "../common/torgzip.h" #include "../common/torgzip.h"
@ -34,10 +37,12 @@ setup_directory(void)
int r; int r;
if (is_setup) return; if (is_setup) return;
tor_snprintf(temp_dir, sizeof(temp_dir), "/tmp/tor_test_%d", (int) getpid());
#ifdef MS_WINDOWS #ifdef MS_WINDOWS
// XXXX
tor_snprintf(temp_dir, sizeof(temp_dir), "c:\\windows\\temp\\tor_test_%d", (int)getpid());
r = mkdir(temp_dir); r = mkdir(temp_dir);
#else #else
tor_snprintf(temp_dir, sizeof(temp_dir), "/tmp/tor_test_%d", (int) getpid());
r = mkdir(temp_dir, 0700); r = mkdir(temp_dir, 0700);
#endif #endif
if (r) { if (r) {
@ -60,6 +65,35 @@ get_fname(const char *name)
static void static void
remove_directory(void) remove_directory(void)
{ {
#ifdef MS_WINDOWS
char *pattern;
HANDLE handle;
WIN32_FIND_DATA findData;
setup_directory();
pattern = tor_malloc(strlen(temp_dir)+16);
tor_snprintf(pattern, strlen(temp_dir)+16, "%s\\*", temp_dir);
handle = FindFirstFile(pattern, &findData);
if (handle == INVALID_HANDLE_VALUE) {
perror("Can't remove");
return;
}
while(1) {
size_t dlen = strlen(findData.cFileName)+strlen(temp_dir)+16;
char *deleteable = tor_malloc(dlen);
tor_snprintf(deleteable, dlen, "%s\\%s", temp_dir, findData.cFileName);
unlink(deleteable);
tor_free(deleteable);
if (!FindNextFile(handle, &findData)) {
if (GetLastError() != ERROR_NO_MORE_FILES) {
perror("error reading dir");
}
break;
}
}
FindClose(handle);
tor_free(pattern);
#else
DIR *dirp; DIR *dirp;
struct dirent *de; struct dirent *de;
setup_directory(); setup_directory();
@ -78,6 +112,7 @@ remove_directory(void)
#endif #endif
} }
closedir(dirp); closedir(dirp);
#endif
rmdir(temp_dir); rmdir(temp_dir);
} }
@ -1239,6 +1274,7 @@ test_rend_fns(void)
int int
main(int c, char**v) { main(int c, char**v) {
or_options_t *options = tor_malloc_zero(sizeof(or_options_t)); or_options_t *options = tor_malloc_zero(sizeof(or_options_t));
network_init();
options_init(options); options_init(options);
set_options(options); set_options(options);