aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2004-08-11 19:20:24 +0000
committerNick Mathewson <nickm@torproject.org>2004-08-11 19:20:24 +0000
commitba7cc463d4f186cc17779c5fbfdcae15e54e37cb (patch)
tree7d5f923e17b73930b1a1284f9df2b60a7ccec046
parent72f85adcbed7a753e988bff7e7ee9b74269576ac (diff)
downloadtor-ba7cc463d4f186cc17779c5fbfdcae15e54e37cb.tar
tor-ba7cc463d4f186cc17779c5fbfdcae15e54e37cb.tar.gz
Clean up tempdir after finishing unittests; use tor_temp_$PID instead of tor_temp; quit if tor_temp_$PID exists.
svn:r2226
-rw-r--r--src/or/test.c67
1 files changed, 55 insertions, 12 deletions
diff --git a/src/or/test.c b/src/or/test.c
index 704d3901b..68d8e8dc3 100644
--- a/src/or/test.c
+++ b/src/or/test.c
@@ -11,7 +11,7 @@
/* For mkdir() */
#include <direct.h>
#endif
-
+#include <dirent.h>
#include "or.h"
#include "../common/test.h"
@@ -38,18 +38,60 @@ dump_hex(char *s, int len)
}
}
+static char temp_dir[256];
+
void
-setup_directory() {
- char buf[256];
+setup_directory()
+{
+ static int is_setup = 0;
int r;
- sprintf(buf, "/tmp/tor_test");
+ if (is_setup) return;
+
+ sprintf(temp_dir, "/tmp/tor_test_%d", (int) getpid());
#ifdef _MSC_VER
- r = mkdir(buf);
+ r = mkdir(temp_dir);
#else
- r = mkdir(buf, 0700);
+ r = mkdir(temp_dir, 0700);
+#endif
+ if (r) {
+ fprintf(stderr, "Can't create directory %s:", temp_dir);
+ perror("");
+ exit(1);
+ }
+ is_setup = 1;
+}
+
+const char *
+get_fname(const char *name)
+{
+ static char buf[1024];
+ setup_directory();
+ sprintf(buf,"%s/%s",temp_dir,name);
+ return buf;
+}
+
+void
+remove_directory()
+{
+ DIR *dirp;
+ struct dirent *de;
+ setup_directory();
+ if (!(dirp = opendir(temp_dir))) {
+ perror("Can't open temporary directory to remove files");
+ return;
+ }
+ while ((de = readdir(dirp)) != NULL) {
+ /* Only "." and ".." start with ., since we don't create any dotfiles. */
+ if (de->d_name[0] == '.') continue;
+ if (unlink(get_fname(de->d_name))) {
+ perror("Error removing file");
+ }
+#if 0
+ printf("==%s\n", de->d_name);
#endif
- if (r && errno != EEXIST)
- fprintf(stderr, "Can't create directory %s", buf);
+ }
+ closedir(dirp);
+ rmdir(temp_dir);
}
void
@@ -75,14 +117,14 @@ test_buffers() {
/****
* read_to_buf
****/
- s = open("/tmp/tor_test/data", O_WRONLY|O_CREAT|O_TRUNC, 0600);
+ s = open(get_fname("data"), O_WRONLY|O_CREAT|O_TRUNC, 0600);
for (j=0;j<256;++j) {
str[j] = (char)j;
}
write(s, str, 256);
close(s);
- s = open("/tmp/tor_test/data", O_RDONLY, 0);
+ s = open(get_fname("data"), O_RDONLY, 0);
eof = 0;
i = read_to_buf(s, 10, buf, &eof);
test_eq(buf_capacity(buf), 512*1024);
@@ -349,10 +391,10 @@ test_crypto()
/* File operations: save and load private key */
test_assert(! crypto_pk_write_private_key_to_filename(pk1,
- "/tmp/tor_test/pke1y"));
+ get_fname("pkey1")));
test_assert(! crypto_pk_read_private_key_from_filename(pk2,
- "/tmp/tor_test/pke1y"));
+ get_fname("pkey1")));
test_eq(15, crypto_pk_private_decrypt(pk2, data1, 128, data3,
PK_PKCS1_OAEP_PADDING,1));
@@ -933,6 +975,7 @@ main(int c, char**v){
crypto_seed_rng();
setup_directory();
rep_hist_init();
+ atexit(remove_directory);
// puts("========================== Buffers =========================");
// test_buffers();