aboutsummaryrefslogtreecommitdiff
path: root/src/or/test.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/or/test.c')
-rw-r--r--src/or/test.c157
1 files changed, 105 insertions, 52 deletions
diff --git a/src/or/test.c b/src/or/test.c
index 0e1c47301..2a568b54d 100644
--- a/src/or/test.c
+++ b/src/or/test.c
@@ -132,26 +132,122 @@ test_buffers(void) {
if (!(buf = buf_new()))
test_fail();
- test_eq(buf_capacity(buf), 512*1024);
+ test_eq(buf_capacity(buf), 4096);
test_eq(buf_datalen(buf), 0);
/****
- * read_to_buf
- ****/
- s = open(get_fname("data"), O_WRONLY|O_CREAT|O_TRUNC, 0600);
+ * General pointer frobbing
+ */
for (j=0;j<256;++j) {
str[j] = (char)j;
}
+ write_to_buf(str, 256, buf);
+ write_to_buf(str, 256, buf);
+ test_eq(buf_datalen(buf), 512);
+ fetch_from_buf(str2, 200, buf);
+ test_memeq(str, str2, 200);
+ test_eq(buf_datalen(buf), 312);
+ memset(str2, 0, sizeof(str2));
+
+ fetch_from_buf(str2, 256, buf);
+ test_memeq(str+200, str2, 56);
+ test_memeq(str, str2+56, 200);
+ test_eq(buf_datalen(buf), 56);
+ memset(str2, 0, sizeof(str2));
+ /* Okay, now we should be 512 bytes into the 4096-byte buffer. If we add
+ * another 3584 bytes, we hit the end. */
+ for(j=0;j<15;++j) {
+ write_to_buf(str, 256, buf);
+ }
+ assert_buf_ok(buf);
+ test_eq(buf_datalen(buf), 3896);
+ fetch_from_buf(str2, 56, buf);
+ test_eq(buf_datalen(buf), 3840);
+ test_memeq(str+200, str2, 56);
+ for(j=0;j<15;++j) {
+ memset(str2, 0, sizeof(str2));
+ fetch_from_buf(str2, 256, buf);
+ test_memeq(str, str2, 256);
+ }
+ test_eq(buf_datalen(buf), 0);
+ buf_free(buf);
+
+ /* Okay, now make sure growing can work. */
+ buf = buf_new_with_capacity(16);
+ test_eq(buf_capacity(buf), 16);
+ write_to_buf(str+1, 255, buf);
+ test_eq(buf_capacity(buf), 256);
+ fetch_from_buf(str2, 254, buf);
+ test_memeq(str+1, str2, 254);
+ printf("%d, %d, %d\n", (int)buf, buf_capacity(buf), buf_datalen(buf));
+ test_eq(buf_capacity(buf), 256);
+ assert_buf_ok(buf);
+ write_to_buf(str, 32, buf);
+ test_eq(buf_capacity(buf), 256);
+ assert_buf_ok(buf);
+ write_to_buf(str, 256, buf);
+ assert_buf_ok(buf);
+ test_eq(buf_capacity(buf), 512);
+ test_eq(buf_datalen(buf), 33+256);
+ fetch_from_buf(str2, 33, buf);
+ test_eq(*str2, str[255]);
+
+ test_memeq(str2+1, str, 32);
+ test_eq(buf_capacity(buf), 512);
+ test_eq(buf_datalen(buf), 256);
+ fetch_from_buf(str2, 256, buf);
+ test_memeq(str, str2, 256);
+
+ /* now try shrinking: case 1. */
+ buf_free(buf);
+ buf = buf_new_with_capacity(33668);
+ for (j=0;j<67;++j) {
+ write_to_buf(str,255, buf);
+ }
+ test_eq(buf_capacity(buf), 33668);
+ test_eq(buf_datalen(buf), 17085);
+ for (j=0; j < 40; ++j) {
+ fetch_from_buf(str2, 255,buf);
+ test_memeq(str2, str, 255);
+ }
+
+ /* now try shrinking: case 2. */
+ buf_free(buf);
+ buf = buf_new_with_capacity(33668);
+ for (j=0;j<67;++j) {
+ write_to_buf(str,255, buf);
+ }
+ for (j=0; j < 20; ++j) {
+ fetch_from_buf(str2, 255,buf);
+ test_memeq(str2, str, 255);
+ }
+ for (j=0;j<80;++j) {
+ write_to_buf(str,255, buf);
+ }
+ test_eq(buf_capacity(buf),33668);
+ for (j=0; j < 120; ++j) {
+ fetch_from_buf(str2, 255,buf);
+ test_memeq(str2, str, 255);
+ }
+
+
+ /****
+ * read_to_buf
+ ****/
+ s = open(get_fname("data"), O_WRONLY|O_CREAT|O_TRUNC, 0600);
write(s, str, 256);
close(s);
s = open(get_fname("data"), O_RDONLY, 0);
eof = 0;
+ errno = 0; /* XXXX */
i = read_to_buf(s, 10, buf, &eof);
- test_eq(buf_capacity(buf), 512*1024);
- test_eq(buf_datalen(buf), 10);
- test_eq(eof, 0);
+ printf("%s\n", strerror(errno));
test_eq(i, 10);
+ test_eq(eof, 0);
+ test_eq(buf_capacity(buf), 4096);
+ test_eq(buf_datalen(buf), 10);
+
test_memeq(str, (char*)_buf_peek_raw_buffer(buf), 10);
/* Test reading 0 bytes. */
@@ -195,49 +291,6 @@ test_buffers(void) {
test_eq(buf_datalen(buf), 256-6-32);
test_eq(eof, 1);
- close(s);
-
- /****
- * fetch_from_buf
- ****/
- memset(str2, 255, 256);
- test_eq(246, fetch_from_buf(str2, 10, buf));
- test_memeq(str2, str, 10);
- test_memeq(str+10,(char*)_buf_peek_raw_buffer(buf),246);
- test_eq(buf_datalen(buf),246);
-
- test_eq(0, fetch_from_buf(str2, 246, buf));
- test_memeq(str2, str+10, 246);
- test_eq(buf_capacity(buf),MAX_BUF_SIZE);
- test_eq(buf_datalen(buf),0);
-
- /****
- * write_to_buf
- ****/
- memset((char *)_buf_peek_raw_buffer(buf), (int)'-', 256);
- i = write_to_buf("Hello world", 11, buf);
- test_eq(i, 11);
- test_eq(buf_datalen(buf), 11);
- test_memeq((char*)_buf_peek_raw_buffer(buf), "Hello world", 11);
- i = write_to_buf("XYZZY", 5, buf);
- test_eq(i, 16);
- test_eq(buf_datalen(buf), 16);
- test_memeq((char*)_buf_peek_raw_buffer(buf), "Hello worldXYZZY", 16);
- /* Test when buffer is overfull. */
-#if 0
- buflen = 18;
- test_eq(-1, write_to_buf("This string will not fit.", 25,
- &buf, &buflen, &buf_datalen));
- test_eq(buf_datalen, 16);
- test_memeq(buf, "Hello worldXYZZY--", 18);
- buflen = MAX_BUF_SIZE;
-#endif
-
- /****
- * flush_buf
- ****/
- /* XXXX Needs tests. */
-
buf_free(buf);
}
@@ -1319,8 +1372,8 @@ main(int c, char**v) {
printf("Running Tor unit tests on %s\n", get_uname());
-// puts("========================== Buffers =========================");
- if (0) test_buffers();
+ puts("========================== Buffers =========================");
+ test_buffers();
puts("\n========================== Crypto ==========================");
// add_stream_log(LOG_DEBUG, LOG_ERR, "<stdout>", stdout);
test_crypto();